From 1d999a7b2815bd136c42d1eaaf4877d4387406eb Mon Sep 17 00:00:00 2001 From: jcyuan Date: Wed, 12 Apr 2023 11:54:56 -0500 Subject: [PATCH 001/161] Fix the default parameter type for the exhaust control function. --- src/EnergyPlus/ExhaustAirSystemManager.cc | 6 +++--- src/EnergyPlus/ExhaustAirSystemManager.hh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/EnergyPlus/ExhaustAirSystemManager.cc b/src/EnergyPlus/ExhaustAirSystemManager.cc index aac6c90fca0..4c1ab7cfa1f 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.cc +++ b/src/EnergyPlus/ExhaustAirSystemManager.cc @@ -675,13 +675,13 @@ namespace ExhaustAirSystemManager { } for (int ExhaustControlNum = 1; ExhaustControlNum <= state.dataZoneEquip->NumZoneExhaustControls; ++ExhaustControlNum) { - CalcZoneHVACExhaustControl(state, ExhaustControlNum, _); + CalcZoneHVACExhaustControl(state, ExhaustControlNum); } // report results if needed } - void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, ObjexxFCL::Optional FlowRatio) + void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio) { // Calculate a zonehvac exhaust control system @@ -695,7 +695,7 @@ namespace ExhaustAirSystemManager { Real64 Tin = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisExhCtrl.ZoneNum).ZT; Real64 thisExhCtrlAvailScheVal = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.AvailScheduleNum); - if (present(FlowRatio)) { + if (FlowRatio != 0.0) { thisExhCtrl.BalancedFlow *= FlowRatio; thisExhCtrl.UnbalancedFlow *= FlowRatio; diff --git a/src/EnergyPlus/ExhaustAirSystemManager.hh b/src/EnergyPlus/ExhaustAirSystemManager.hh index 40020d7d243..2117972ac6c 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.hh +++ b/src/EnergyPlus/ExhaustAirSystemManager.hh @@ -133,7 +133,7 @@ namespace ExhaustAirSystemManager { void SimZoneHVACExhaustControls(EnergyPlusData &state); - void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, ObjexxFCL::Optional FlowRatio); + void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio = 0.0); void SizeExhaustSystem(EnergyPlusData &state, int const exhSysNum); From 3adb67b8e4611413667c04b15095629845f75a30 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Fri, 12 May 2023 14:21:04 -0500 Subject: [PATCH 002/161] A couple of additional places of azimuth angles comparisions where rotational angle differences should be used. --- src/EnergyPlus/SurfaceGeometry.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 622a94b16d1..273afbc97dc 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -7897,7 +7897,7 @@ namespace SurfaceGeometry { surfaceArea; // Autodesk:F2C++ Functions handle array subscript usage for (ThisSurf = 1; ThisSurf <= state.dataHeatBal->ExtVentedCavity(Item).NumSurfs; ++ThisSurf) { SurfID = state.dataHeatBal->ExtVentedCavity(Item).SurfPtrs(ThisSurf); - if (std::abs(state.dataSurface->Surface(SurfID).Azimuth - AvgAzimuth) > 15.0) { + if (rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > 15.0) { ShowWarningError(state, format("{}=\"{}, Surface {} has Azimuth different from others in the associated group.", cCurrentModuleObject, @@ -13053,7 +13053,7 @@ namespace SurfaceGeometry { for (int iFace = 1; iFace <= zonePoly.NumSurfaceFaces; ++iFace) { int curSurfNum = zonePoly.SurfaceFace(iFace).SurfNum; - if (std::abs(state.dataSurface->Surface(curSurfNum).Azimuth - azimuth) < 1.) { + if (rotAzmDiffDeg(state.dataSurface->Surface(curSurfNum).Azimuth, azimuth) < 1.) { facingAzimuth.emplace_back(iFace); } } From ce1a5b545858795bd33c8a917a43d1c3659549b0 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Fri, 12 May 2023 15:11:24 -0500 Subject: [PATCH 003/161] Refactoring for include in other files, and one additional occurance in the transpired collector module. --- src/EnergyPlus/General.cc | 14 ++++++++++++++ src/EnergyPlus/General.hh | 3 ++- src/EnergyPlus/SurfaceGeometry.cc | 22 ++++------------------ src/EnergyPlus/TranspiredCollector.cc | 2 +- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/EnergyPlus/General.cc b/src/EnergyPlus/General.cc index 170cf152994..0c1cb3f3b9a 100644 --- a/src/EnergyPlus/General.cc +++ b/src/EnergyPlus/General.cc @@ -1409,4 +1409,18 @@ void findReportPeriodIdx(EnergyPlusData &state, } } +Real64 rotAzmDiffDeg(Real64 const &AzmA, Real64 const &AzmB) +{ + // This function takes two (azimuth) angles in Degree(s), + // and returns the rotational angle difference in Degree(s). + + Real64 diff = AzmB - AzmA; + if (diff > 180.0) { + diff = 360.0 - diff; + } else if (diff < -180.0) { + diff = 360.0 + diff; + } + return std::abs(diff); +} + } // namespace EnergyPlus::General diff --git a/src/EnergyPlus/General.hh b/src/EnergyPlus/General.hh index f3904d710d8..c3301642115 100644 --- a/src/EnergyPlus/General.hh +++ b/src/EnergyPlus/General.hh @@ -248,6 +248,8 @@ namespace General { int nReportPeriods, Array1D_bool &inReportPeriodFlags); + Real64 rotAzmDiffDeg(Real64 const &AzmA, Real64 const &AzmB); + inline Real64 epexp(const Real64 numerator, const Real64 denominator) { if (denominator == 0.0) { @@ -256,7 +258,6 @@ namespace General { return std::exp(numerator / denominator); } } - } // namespace General struct GeneralData : BaseGlobalStruct diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 273afbc97dc..420c4477dcb 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -3017,20 +3017,6 @@ namespace SurfaceGeometry { } } - Real64 rotAzmDiffDeg(Real64 const &AzmA, Real64 const &AzmB) - { - // This function takes two (azimuth) angles in Degree(s), - // and returns the rotational angle difference in Degree(s). - - Real64 diff = AzmB - AzmA; - if (diff > 180.0) { - diff = 360.0 - diff; - } else if (diff < -180.0) { - diff = 360.0 + diff; - } - return std::abs(diff); - } - void checkSubSurfAzTiltNorm(EnergyPlusData &state, SurfaceData &baseSurface, // Base surface data (in) SurfaceData &subSurface, // Subsurface data (in) @@ -3066,7 +3052,7 @@ namespace SurfaceGeometry { // Is base surface horizontal? If so, ignore azimuth differences if (std::abs(baseSurface.Tilt) <= 1.0e-5 || std::abs(baseSurface.Tilt - 180.0) <= 1.0e-5) baseSurfHoriz = true; - if (((rotAzmDiffDeg(baseSurface.Azimuth, subSurface.Azimuth) > errorTolerance) && !baseSurfHoriz) || + if (((General::rotAzmDiffDeg(baseSurface.Azimuth, subSurface.Azimuth) > errorTolerance) && !baseSurfHoriz) || (std::abs(baseSurface.Tilt - subSurface.Tilt) > errorTolerance)) { surfaceError = true; ShowSevereError( @@ -3077,7 +3063,7 @@ namespace SurfaceGeometry { format("Subsurface=\"{}\" Tilt = {:.1R} Azimuth = {:.1R}", subSurface.Name, subSurface.Tilt, subSurface.Azimuth)); ShowContinueError( state, format("Base surface=\"{}\" Tilt = {:.1R} Azimuth = {:.1R}", baseSurface.Name, baseSurface.Tilt, baseSurface.Azimuth)); - } else if (((rotAzmDiffDeg(baseSurface.Azimuth, subSurface.Azimuth) > warningTolerance) && !baseSurfHoriz) || + } else if (((General::rotAzmDiffDeg(baseSurface.Azimuth, subSurface.Azimuth) > warningTolerance) && !baseSurfHoriz) || (std::abs(baseSurface.Tilt - subSurface.Tilt) > warningTolerance)) { ++state.dataSurfaceGeometry->checkSubSurfAzTiltNormErrCount; if (state.dataSurfaceGeometry->checkSubSurfAzTiltNormErrCount == 1 && !state.dataGlobal->DisplayExtraWarnings) { @@ -7897,7 +7883,7 @@ namespace SurfaceGeometry { surfaceArea; // Autodesk:F2C++ Functions handle array subscript usage for (ThisSurf = 1; ThisSurf <= state.dataHeatBal->ExtVentedCavity(Item).NumSurfs; ++ThisSurf) { SurfID = state.dataHeatBal->ExtVentedCavity(Item).SurfPtrs(ThisSurf); - if (rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > 15.0) { + if (General::rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > 15.0) { ShowWarningError(state, format("{}=\"{}, Surface {} has Azimuth different from others in the associated group.", cCurrentModuleObject, @@ -13053,7 +13039,7 @@ namespace SurfaceGeometry { for (int iFace = 1; iFace <= zonePoly.NumSurfaceFaces; ++iFace) { int curSurfNum = zonePoly.SurfaceFace(iFace).SurfNum; - if (rotAzmDiffDeg(state.dataSurface->Surface(curSurfNum).Azimuth, azimuth) < 1.) { + if (General::rotAzmDiffDeg(state.dataSurface->Surface(curSurfNum).Azimuth, azimuth) < 1.) { facingAzimuth.emplace_back(iFace); } } diff --git a/src/EnergyPlus/TranspiredCollector.cc b/src/EnergyPlus/TranspiredCollector.cc index d42925bbe52..684fc939360 100644 --- a/src/EnergyPlus/TranspiredCollector.cc +++ b/src/EnergyPlus/TranspiredCollector.cc @@ -654,7 +654,7 @@ namespace TranspiredCollector { surfaceArea; // Autodesk:F2C++ Functions handle array subscript usage for (ThisSurf = 1; ThisSurf <= state.dataTranspiredCollector->UTSC(Item).NumSurfs; ++ThisSurf) { SurfID = state.dataTranspiredCollector->UTSC(Item).SurfPtrs(ThisSurf); - if (std::abs(state.dataSurface->Surface(SurfID).Azimuth - AvgAzimuth) > 15.0) { + if (General::rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > 15.0) { ShowWarningError(state, format("Surface {} has Azimuth different from others in the group associated with {} ={}", state.dataSurface->Surface(SurfID).Name, From 81060ecaca8499be3a482409241a5202d8e3c8d4 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 6 Jun 2023 11:34:03 -0500 Subject: [PATCH 004/161] Correction of Issues with ZeroSource variables Changes made to ZeroSource variables in various models that act like radiant systems. ZeroSource (and other variables) converted from arrays over zones or surfaces to being attached to local objects. --- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 8 +- src/EnergyPlus/ChilledCeilingPanelSimple.hh | 2 +- src/EnergyPlus/DataHeatBalance.hh | 5 +- src/EnergyPlus/ElectricBaseboardRadiator.cc | 2 +- src/EnergyPlus/HWBaseboardRadiator.cc | 148 +++++++------------- src/EnergyPlus/HWBaseboardRadiator.hh | 29 ++-- src/EnergyPlus/HighTempRadiantSystem.cc | 103 +++++++------- src/EnergyPlus/HighTempRadiantSystem.hh | 25 ++-- src/EnergyPlus/LowTempRadiantSystem.cc | 26 ++-- src/EnergyPlus/LowTempRadiantSystem.hh | 27 ++-- src/EnergyPlus/SteamBaseboardRadiator.cc | 70 +++++---- src/EnergyPlus/SteamBaseboardRadiator.hh | 28 ++-- src/EnergyPlus/SwimmingPool.cc | 60 +++----- src/EnergyPlus/SwimmingPool.hh | 17 +-- src/EnergyPlus/VentilatedSlab.cc | 7 +- src/EnergyPlus/VentilatedSlab.hh | 22 +-- 16 files changed, 253 insertions(+), 326 deletions(-) diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index bda31786665..c71de090e31 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -873,7 +873,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons ThisInNode.Press = 0.0; ThisInNode.HumRat = 0.0; - ThisCP.ZeroSourceSumHATsurf = 0.0; + ThisCP.ZeroCPSourceSumHATsurf = 0.0; ThisCP.CoolingPanelSource = 0.0; ThisCP.CoolingPanelSrcAvg = 0.0; ThisCP.LastCoolingPanelSrc = 0.0; @@ -889,7 +889,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { int ZoneNum = ThisCP.ZonePtr; - state.dataHeatBal->Zone(ZoneNum).ZeroSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); + ThisCP.ZeroCPSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); ThisCP.CoolingPanelSrcAvg = 0.0; ThisCP.LastCoolingPanelSrc = 0.0; ThisCP.LastSysTimeElapsed = 0.0; @@ -1416,8 +1416,8 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli // that all energy radiated to people is converted to convective energy is // not very precise, but at least it conserves energy. The system impact to heat balance // should include this. - LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataHeatBal->Zone(ZoneNum).ZeroSourceSumHATsurf) + - (CoolingPanelCool * this->FracConvect) + (RadHeat * this->FracDistribPerson); + LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - this->ZeroCPSourceSumHATsurf) + (CoolingPanelCool * this->FracConvect) + + (RadHeat * this->FracDistribPerson); } this->WaterOutletEnthalpy = this->WaterInletEnthalpy - CoolingPanelCool / waterMassFlowRate; diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.hh b/src/EnergyPlus/ChilledCeilingPanelSimple.hh index 14a9ca198a3..64e406f7458 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.hh +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.hh @@ -144,7 +144,7 @@ namespace CoolingPanelSimple { int CoolingPanelMassFlowReSimIndex = 0; int CoolingPanelInletTempFlowReSimIndex = 0; bool MyEnvrnFlag = true; - Real64 ZeroSourceSumHATsurf = 0.0; + Real64 ZeroCPSourceSumHATsurf = 0.0; Real64 CoolingPanelSource = 0.0; Real64 CoolingPanelSrcAvg = 0.0; Real64 LastCoolingPanelSrc = 0.0; diff --git a/src/EnergyPlus/DataHeatBalance.hh b/src/EnergyPlus/DataHeatBalance.hh index d8fbfeb9063..627532583a8 100644 --- a/src/EnergyPlus/DataHeatBalance.hh +++ b/src/EnergyPlus/DataHeatBalance.hh @@ -692,9 +692,8 @@ namespace DataHeatBalance { Real64 delta_T = 0.0; // Indoor and outdoor temperature Real64 delta_HumRat = 0.0; // Indoor and outdoor humidity ratio delta - Real64 ZeroSourceSumHATsurf = 0.0; // From Chilled Ceiling Panel, equal to the SumHATsurf for all the walls in a zone with no source - bool zoneOAQuadratureSum = false; // True when zone OA balance method is Quadrature - int zoneOABalanceIndex = 0; // Index to ZoneAirBalance for this zone, if any + bool zoneOAQuadratureSum = false; // True when zone OA balance method is Quadrature + int zoneOABalanceIndex = 0; // Index to ZoneAirBalance for this zone, if any // Spaces bool anySurfacesWithoutSpace = false; // True if any surfaces in a zone do not have a space assigned in input diff --git a/src/EnergyPlus/ElectricBaseboardRadiator.cc b/src/EnergyPlus/ElectricBaseboardRadiator.cc index 57140cedc55..83369f7d5be 100644 --- a/src/EnergyPlus/ElectricBaseboardRadiator.cc +++ b/src/EnergyPlus/ElectricBaseboardRadiator.cc @@ -741,7 +741,7 @@ namespace ElectricBaseboardRadiator { DistributeBBElecRadGains(state); HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum); HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); - // Recalculate LoadMet with new ZeroSource... term and see if it is positive now. If not, shut it down. + // Recalculate LoadMet with new ZeroBBSource... term and see if it is positive now. If not, shut it down. LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - TempZeroBBSourceSumHATsurf) + (QBBCap * elecBaseboard.FracConvect) + (RadHeat * elecBaseboard.FracDistribPerson); if (LoadMet < 0.0) { diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index 76e45188879..f7653bcd6fc 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -908,12 +908,6 @@ namespace HWBaseboardRadiator { Real64 Cp; // local fluid specific heat bool errFlag; - auto &ZeroSourceSumHATsurf = state.dataHWBaseboardRad->ZeroSourceSumHATsurf; - auto &QBBRadSource = state.dataHWBaseboardRad->QBBRadSource; - auto &QBBRadSrcAvg = state.dataHWBaseboardRad->QBBRadSrcAvg; - auto &LastQBBRadSrc = state.dataHWBaseboardRad->LastQBBRadSrc; - auto &LastSysTimeElapsed = state.dataHWBaseboardRad->LastSysTimeElapsed; - auto &LastTimeStepSys = state.dataHWBaseboardRad->LastTimeStepSys; int NumHWBaseboards = state.dataHWBaseboardRad->NumHWBaseboards; auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; @@ -923,12 +917,6 @@ namespace HWBaseboardRadiator { // Initialize the environment and sizing flags state.dataHWBaseboardRad->MyEnvrnFlag.dimension(NumHWBaseboards, true); state.dataHWBaseboardRad->MySizeFlag.dimension(NumHWBaseboards, true); - ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0); - QBBRadSource.dimension(NumHWBaseboards, 0.0); - QBBRadSrcAvg.dimension(NumHWBaseboards, 0.0); - LastQBBRadSrc.dimension(NumHWBaseboards, 0.0); - LastSysTimeElapsed.dimension(NumHWBaseboards, 0.0); - LastTimeStepSys.dimension(NumHWBaseboards, 0.0); state.dataHWBaseboardRad->SetLoopIndexFlag.dimension(NumHWBaseboards, true); state.dataHWBaseboardRad->MyOneTimeFlag = false; @@ -936,6 +924,12 @@ namespace HWBaseboardRadiator { // Air mass flow rate is obtained from the following linear equation (reset if autosize is used) // m_dot = 0.0062 + 2.75e-05*q HWBaseboard(Loop).AirMassFlowRateStd = Constant + Coeff * HWBaseboard(Loop).RatedCapacity; + HWBaseboard(Loop).ZeroBBSourceSumHATsurf = 0.0; + HWBaseboard(Loop).QBBRadSource = 0.0; + HWBaseboard(Loop).QBBRadSrcAvg = 0.0; + HWBaseboard(Loop).LastQBBRadSrc = 0.0; + HWBaseboard(Loop).LastSysTimeElapsed = 0.0; + HWBaseboard(Loop).LastTimeStepSys = 0.0; } } @@ -999,12 +993,12 @@ namespace HWBaseboardRadiator { state.dataLoopNodes->Node(WaterInletNode).Press = 0.0; state.dataLoopNodes->Node(WaterInletNode).HumRat = 0.0; - ZeroSourceSumHATsurf = 0.0; - QBBRadSource = 0.0; - QBBRadSrcAvg = 0.0; - LastQBBRadSrc = 0.0; - LastSysTimeElapsed = 0.0; - LastTimeStepSys = 0.0; + HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf = 0.0; + HWBaseboard(BaseboardNum).QBBRadSource = 0.0; + HWBaseboard(BaseboardNum).QBBRadSrcAvg = 0.0; + HWBaseboard(BaseboardNum).LastQBBRadSrc = 0.0; + HWBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; + HWBaseboard(BaseboardNum).LastTimeStepSys = 0.0; state.dataHWBaseboardRad->MyEnvrnFlag(BaseboardNum) = false; } @@ -1015,11 +1009,11 @@ namespace HWBaseboardRadiator { if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { int ZoneNum = HWBaseboard(BaseboardNum).ZonePtr; - ZeroSourceSumHATsurf(ZoneNum) = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); - QBBRadSrcAvg(BaseboardNum) = 0.0; - LastQBBRadSrc(BaseboardNum) = 0.0; - LastSysTimeElapsed(BaseboardNum) = 0.0; - LastTimeStepSys(BaseboardNum) = 0.0; + HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); + HWBaseboard(BaseboardNum).QBBRadSrcAvg = 0.0; + HWBaseboard(BaseboardNum).LastQBBRadSrc = 0.0; + HWBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; + HWBaseboard(BaseboardNum).LastTimeStepSys = 0.0; } // Do the every time step initializations @@ -1444,8 +1438,6 @@ namespace HWBaseboardRadiator { Real64 Cp; auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; auto &HWBaseboardDesignObject = state.dataHWBaseboardRad->HWBaseboardDesignObject; - auto &QBBRadSource = state.dataHWBaseboardRad->QBBRadSource; - auto &ZeroSourceSumHATsurf = state.dataHWBaseboardRad->ZeroSourceSumHATsurf; ZoneNum = HWBaseboard(BaseboardNum).ZonePtr; QZnReq = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).RemainingOutputReqToHeatSP; @@ -1495,7 +1487,7 @@ namespace HWBaseboardRadiator { WaterOutletTemp = WaterInletTemp - CapacitanceAir * (AirOutletTemp - AirInletTemp) / CapacitanceWater; BBHeat = CapacitanceWater * (WaterInletTemp - WaterOutletTemp); RadHeat = BBHeat * HWBaseboardDesignDataObject.FracRadiant; - QBBRadSource(BaseboardNum) = RadHeat; + HWBaseboard(BaseboardNum).QBBRadSource = RadHeat; if (HWBaseboardDesignDataObject.FracRadiant <= MinFrac) { LoadMet = BBHeat; @@ -1516,7 +1508,7 @@ namespace HWBaseboardRadiator { // that all energy radiated to people is converted to convective energy is // not very precise, but at least it conserves energy. The system impact to heat balance // should include this. - LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - ZeroSourceSumHATsurf(ZoneNum)) + + LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf) + (BBHeat * HWBaseboard(BaseboardNum).FracConvect) + (RadHeat * HWBaseboardDesignDataObject.FracDistribPerson); } HWBaseboard(BaseboardNum).WaterOutletEnthalpy = HWBaseboard(BaseboardNum).WaterInletEnthalpy - BBHeat / WaterMassFlowRate; @@ -1533,7 +1525,7 @@ namespace HWBaseboardRadiator { RadHeat = 0.0; WaterMassFlowRate = 0.0; AirMassFlowRate = 0.0; - QBBRadSource(BaseboardNum) = 0.0; + HWBaseboard(BaseboardNum).QBBRadSource = 0.0; HWBaseboard(BaseboardNum).WaterOutletEnthalpy = HWBaseboard(BaseboardNum).WaterInletEnthalpy; SetActuatedBranchFlowRate(state, WaterMassFlowRate, HWBaseboard(BaseboardNum).WaterInletNode, HWBaseboard(BaseboardNum).plantLoc, false); } @@ -1586,12 +1578,7 @@ namespace HWBaseboardRadiator { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int WaterInletNode; int WaterOutletNode; - auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; - auto &LastSysTimeElapsed = state.dataHWBaseboardRad->LastSysTimeElapsed; - auto &QBBRadSrcAvg = state.dataHWBaseboardRad->QBBRadSrcAvg; - auto &LastQBBRadSrc = state.dataHWBaseboardRad->LastQBBRadSrc; - auto &QBBRadSource = state.dataHWBaseboardRad->QBBRadSource; - auto &LastTimeStepSys = state.dataHWBaseboardRad->LastTimeStepSys; + auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); if (state.dataGlobal->BeginEnvrnFlag && state.dataHWBaseboardRad->MyEnvrnFlag2) { state.dataHWBaseboardRad->Iter = 0; @@ -1602,24 +1589,24 @@ namespace HWBaseboardRadiator { } // First, update the running average if necessary... - if (LastSysTimeElapsed(BaseboardNum) == state.dataHVACGlobal->SysTimeElapsed) { - QBBRadSrcAvg(BaseboardNum) -= LastQBBRadSrc(BaseboardNum) * LastTimeStepSys(BaseboardNum) / state.dataGlobal->TimeStepZone; + if (thisHWBB.LastSysTimeElapsed == state.dataHVACGlobal->SysTimeElapsed) { + thisHWBB.QBBRadSrcAvg -= thisHWBB.LastQBBRadSrc * thisHWBB.LastTimeStepSys / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - QBBRadSrcAvg(BaseboardNum) += QBBRadSource(BaseboardNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; + thisHWBB.QBBRadSrcAvg += thisHWBB.QBBRadSource * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; - LastQBBRadSrc(BaseboardNum) = QBBRadSource(BaseboardNum); - LastSysTimeElapsed(BaseboardNum) = state.dataHVACGlobal->SysTimeElapsed; - LastTimeStepSys(BaseboardNum) = state.dataHVACGlobal->TimeStepSys; + thisHWBB.LastQBBRadSrc = thisHWBB.QBBRadSource; + thisHWBB.LastSysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; + thisHWBB.LastTimeStepSys = state.dataHVACGlobal->TimeStepSys; - WaterInletNode = HWBaseboard(BaseboardNum).WaterInletNode; - WaterOutletNode = HWBaseboard(BaseboardNum).WaterOutletNode; + WaterInletNode = thisHWBB.WaterInletNode; + WaterOutletNode = thisHWBB.WaterOutletNode; // Set the outlet air nodes of the Baseboard // Set the outlet water nodes for the Coil SafeCopyPlantNode(state, WaterInletNode, WaterOutletNode); - state.dataLoopNodes->Node(WaterOutletNode).Temp = HWBaseboard(BaseboardNum).WaterOutletTemp; - state.dataLoopNodes->Node(WaterOutletNode).Enthalpy = HWBaseboard(BaseboardNum).WaterOutletEnthalpy; + state.dataLoopNodes->Node(WaterOutletNode).Temp = thisHWBB.WaterOutletTemp; + state.dataLoopNodes->Node(WaterOutletNode).Enthalpy = thisHWBB.WaterOutletEnthalpy; } void UpdateBBRadSourceValAvg(EnergyPlusData &state, bool &HWBaseboardSysOn) // .TRUE. if the radiant system has run this zone time step @@ -1644,42 +1631,18 @@ namespace HWBaseboardRadiator { // see if the system was even on. If any average term is non-zero, then // one or more of the radiant systems was running. - // REFERENCES: - // na - - // USE STATEMENTS: - // na - - // Locals - // SUBROUTINE ARGUMENT DEFINITIONS: - - // SUBROUTINE PARAMETER DEFINITIONS: - // na - - // INTERFACE BLOCK SPECIFICATIONS - // na - - // DERIVED TYPE DEFINITIONS - // na - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int BaseboardNum; // DO loop counter for surface index - HWBaseboardSysOn = false; + auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; - // If this was never allocated, then there are no radiant systems in this input file (just RETURN) - if (!allocated(state.dataHWBaseboardRad->QBBRadSrcAvg)) return; + // If there are no baseboards in this input file, just RETURN + if (state.dataHWBaseboardRad->NumHWBaseboards == 0) return; - // If it was allocated, then we have to check to see if this was running at all... - for (BaseboardNum = 1; BaseboardNum <= state.dataHWBaseboardRad->NumHWBaseboards; ++BaseboardNum) { - if (state.dataHWBaseboardRad->QBBRadSrcAvg(BaseboardNum) != 0.0) { - HWBaseboardSysOn = true; - break; // DO loop - } + // If there are baseboards, then we have to check to see if this was running at all... + for (int BaseboardNum = 1; BaseboardNum <= state.dataHWBaseboardRad->NumHWBaseboards; ++BaseboardNum) { + HWBaseboard(BaseboardNum).QBBRadSource = HWBaseboard(BaseboardNum).QBBRadSrcAvg; + if (HWBaseboard(BaseboardNum).QBBRadSrcAvg != 0.0) HWBaseboardSysOn = true; } - state.dataHWBaseboardRad->QBBRadSource = state.dataHWBaseboardRad->QBBRadSrcAvg; - DistributeBBRadGains(state); // QBBRadSource has been modified so we need to redistribute gains } @@ -1717,28 +1680,23 @@ namespace HWBaseboardRadiator { int ZoneNum; // Pointer to the Zone derived type Real64 ThisSurfIntensity; // temporary for W/m2 term for rad on a surface - int NumHWBaseboards = state.dataHWBaseboardRad->NumHWBaseboards; - auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; - auto &HWBaseboardDesignObject = state.dataHWBaseboardRad->HWBaseboardDesignObject; - auto &QBBRadSource = state.dataHWBaseboardRad->QBBRadSource; - // Initialize arrays state.dataHeatBalFanSys->SurfQHWBaseboard = 0.0; state.dataHeatBalFanSys->ZoneQHWBaseboardToPerson = 0.0; - for (BaseboardNum = 1; BaseboardNum <= NumHWBaseboards; ++BaseboardNum) { + for (BaseboardNum = 1; BaseboardNum <= state.dataHWBaseboardRad->NumHWBaseboards; ++BaseboardNum) { + auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); HWBaseboardDesignData HWBaseboardDesignDataObject{ - HWBaseboardDesignObject(HWBaseboard(BaseboardNum).DesignObjectPtr)}; // Contains the data for the design object - ZoneNum = HWBaseboard(BaseboardNum).ZonePtr; + state.dataHWBaseboardRad->HWBaseboardDesignObject(thisHWBB.DesignObjectPtr)}; // Contains the data for the design object + ZoneNum = thisHWBB.ZonePtr; if (ZoneNum <= 0) continue; - state.dataHeatBalFanSys->ZoneQHWBaseboardToPerson(ZoneNum) += QBBRadSource(BaseboardNum) * HWBaseboardDesignDataObject.FracDistribPerson; + state.dataHeatBalFanSys->ZoneQHWBaseboardToPerson(ZoneNum) += thisHWBB.QBBRadSource * HWBaseboardDesignDataObject.FracDistribPerson; - for (RadSurfNum = 1; RadSurfNum <= HWBaseboard(BaseboardNum).TotSurfToDistrib; ++RadSurfNum) { - SurfNum = HWBaseboard(BaseboardNum).SurfacePtr(RadSurfNum); + for (RadSurfNum = 1; RadSurfNum <= thisHWBB.TotSurfToDistrib; ++RadSurfNum) { + SurfNum = thisHWBB.SurfacePtr(RadSurfNum); if (state.dataSurface->Surface(SurfNum).Area > SmallestArea) { - ThisSurfIntensity = (QBBRadSource(BaseboardNum) * HWBaseboard(BaseboardNum).FracDistribToSurf(RadSurfNum) / - state.dataSurface->Surface(SurfNum).Area); + ThisSurfIntensity = (thisHWBB.QBBRadSource * thisHWBB.FracDistribToSurf(RadSurfNum) / state.dataSurface->Surface(SurfNum).Area); state.dataHeatBalFanSys->SurfQHWBaseboard(SurfNum) += ThisSurfIntensity; state.dataHeatBalSurf->AnyRadiantSystems = true; // CR 8074, trap for excessive intensity (throws off surface balance ) @@ -1746,7 +1704,7 @@ namespace HWBaseboardRadiator { ShowSevereError(state, "DistributeBBRadGains: excessive thermal radiation heat flux intensity detected"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, HWBaseboard(BaseboardNum).EquipID)); + ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.EquipID)); ShowContinueError(state, format("Radiation intensity = {:.2R} [W/m2]", ThisSurfIntensity)); ShowContinueError(state, format("Assign a larger surface area or more surfaces in {}", cCMO_BBRadiator_Water)); ShowFatalError(state, "DistributeBBRadGains: excessive thermal radiation heat flux intensity detected"); @@ -1755,7 +1713,7 @@ namespace HWBaseboardRadiator { ShowSevereError(state, "DistributeBBRadGains: surface not large enough to receive thermal radiation heat flux"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, HWBaseboard(BaseboardNum).EquipID)); + ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.EquipID)); ShowContinueError(state, format("Assign a larger surface area or more surfaces in {}", cCMO_BBRadiator_Water)); ShowFatalError(state, "DistributeBBRadGains: surface not large enough to receive thermal radiation heat flux"); } @@ -1771,12 +1729,12 @@ namespace HWBaseboardRadiator { // DATE WRITTEN Aug 2007 // MODIFIED na // RE-ENGINEERED na - auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; + auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); - HWBaseboard(BaseboardNum).TotEnergy = HWBaseboard(BaseboardNum).TotPower * state.dataHVACGlobal->TimeStepSysSec; - HWBaseboard(BaseboardNum).Energy = HWBaseboard(BaseboardNum).Power * state.dataHVACGlobal->TimeStepSysSec; - HWBaseboard(BaseboardNum).ConvEnergy = HWBaseboard(BaseboardNum).ConvPower * state.dataHVACGlobal->TimeStepSysSec; - HWBaseboard(BaseboardNum).RadEnergy = HWBaseboard(BaseboardNum).RadPower * state.dataHVACGlobal->TimeStepSysSec; + thisHWBB.TotEnergy = thisHWBB.TotPower * state.dataHVACGlobal->TimeStepSysSec; + thisHWBB.Energy = thisHWBB.Power * state.dataHVACGlobal->TimeStepSysSec; + thisHWBB.ConvEnergy = thisHWBB.ConvPower * state.dataHVACGlobal->TimeStepSysSec; + thisHWBB.RadEnergy = thisHWBB.RadPower * state.dataHVACGlobal->TimeStepSysSec; } void UpdateHWBaseboardPlantConnection(EnergyPlusData &state, diff --git a/src/EnergyPlus/HWBaseboardRadiator.hh b/src/EnergyPlus/HWBaseboardRadiator.hh index fe9cb9a05a5..a50fb56859b 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.hh +++ b/src/EnergyPlus/HWBaseboardRadiator.hh @@ -118,9 +118,16 @@ namespace HWBaseboardRadiator { int BBLoadReSimIndex; int BBMassFlowReSimIndex; int BBInletTempFlowReSimIndex; - int HeatingCapMethod; // - Method for heating capacity scaled sizing calculation (HeatingDesignCapacity, CapacityPerFloorArea, - // FracOfAutosizedHeatingCapacity) - Real64 ScaledHeatingCapacity; // - scaled maximum heating capacity {W} or scalable variable of zone HVAC equipment, {-}, or {W/m2} + int HeatingCapMethod; // - Method for heating capacity scaled sizing calculation (HeatingDesignCapacity, CapacityPerFloorArea, + // FracOfAutosizedHeatingCapacity) + Real64 ScaledHeatingCapacity; // - scaled maximum heating capacity {W} or scalable variable of zone HVAC equipment, {-}, or {W/m2} + Real64 ZeroBBSourceSumHATsurf; // used in baseboard energy balance + // Record keeping variables used to calculate QBBRadSrcAvg locally + Real64 QBBRadSource; // Need to keep the last value in case we are still iterating + Real64 QBBRadSrcAvg; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating + Real64 LastQBBRadSrc; // Need to keep the last value in case we are still iterating // Default Constructor HWBaseboardParams() @@ -131,7 +138,8 @@ namespace HWBaseboardRadiator { WaterOutletEnthalpy(0.0), AirInletTempStd(0.0), AirInletTemp(0.0), AirOutletTemp(0.0), AirInletHumRat(0.0), AirOutletTempStd(0.0), FracConvect(0.0), TotPower(0.0), Power(0.0), ConvPower(0.0), RadPower(0.0), TotEnergy(0.0), Energy(0.0), ConvEnergy(0.0), RadEnergy(0.0), plantLoc{}, BBLoadReSimIndex(0), BBMassFlowReSimIndex(0), BBInletTempFlowReSimIndex(0), HeatingCapMethod(0), - ScaledHeatingCapacity(0.0) + ScaledHeatingCapacity(0.0), ZeroBBSourceSumHATsurf(0.0), QBBRadSource(0.0), QBBRadSrcAvg(0.0), LastSysTimeElapsed(0.0), + LastTimeStepSys(0.0), LastQBBRadSrc(0.0) { } }; @@ -216,13 +224,6 @@ namespace HWBaseboardRadiator { struct HWBaseboardRadiatorData : BaseGlobalStruct { - Array1D QBBRadSource; // Need to keep the last value in case we are still iterating - Array1D QBBRadSrcAvg; // Need to keep the last value in case we are still iterating - Array1D ZeroSourceSumHATsurf; // Equal to the SumHATsurf for all the walls in a zone with no source - // Record keeping variables used to calculate QBBRadSrcAvg locally - Array1D LastQBBRadSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating Array1D_bool MySizeFlag; Array1D_bool CheckEquipName; Array1D_bool SetLoopIndexFlag; // get loop number flag @@ -242,12 +243,6 @@ struct HWBaseboardRadiatorData : BaseGlobalStruct void clear_state() override { - this->QBBRadSource.clear(); - this->QBBRadSrcAvg.clear(); - this->ZeroSourceSumHATsurf.clear(); - this->LastQBBRadSrc.clear(); - this->LastSysTimeElapsed.clear(); - this->LastTimeStepSys.clear(); this->MySizeFlag.clear(); this->CheckEquipName.clear(); this->SetLoopIndexFlag.clear(); diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index be979f354c9..1a0ae2d47ea 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -735,12 +735,6 @@ namespace HighTempRadiantSystem { int Loop; if (state.dataHighTempRadSys->firstTime) { - state.dataHighTempRadSys->ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0); - state.dataHighTempRadSys->QHTRadSource.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, 0.0); - state.dataHighTempRadSys->QHTRadSrcAvg.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, 0.0); - state.dataHighTempRadSys->LastQHTRadSrc.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, 0.0); - state.dataHighTempRadSys->LastSysTimeElapsed.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, 0.0); - state.dataHighTempRadSys->LastTimeStepSys.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, 0.0); state.dataHighTempRadSys->MySizeFlag.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, true); state.dataHighTempRadSys->firstTime = false; } @@ -764,29 +758,27 @@ namespace HighTempRadiantSystem { } if (state.dataGlobal->BeginEnvrnFlag && state.dataHighTempRadSys->MyEnvrnFlag) { - state.dataHighTempRadSys->ZeroSourceSumHATsurf = 0.0; - state.dataHighTempRadSys->QHTRadSource = 0.0; - state.dataHighTempRadSys->QHTRadSrcAvg = 0.0; - state.dataHighTempRadSys->LastQHTRadSrc = 0.0; - state.dataHighTempRadSys->LastSysTimeElapsed = 0.0; - state.dataHighTempRadSys->LastTimeStepSys = 0.0; state.dataHighTempRadSys->MyEnvrnFlag = false; } if (!state.dataGlobal->BeginEnvrnFlag) { + for (int HTRnum = 1; state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + state.dataHighTempRadSys->HighTempRadSys(HTRnum).LastQHTRRadSrc = 0.0; + } state.dataHighTempRadSys->MyEnvrnFlag = true; } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { // This is the first pass through in a particular time step - ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - state.dataHighTempRadSys->ZeroSourceSumHATsurf(ZoneNum) = - state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets - state.dataHighTempRadSys->QHTRadSrcAvg(RadSysNum) = 0.0; // Initialize this variable to zero (radiant system defaults to off) - state.dataHighTempRadSys->LastQHTRadSrc(RadSysNum) = - 0.0; // At the beginning of a time step, reset to zero so average calculation can start again - state.dataHighTempRadSys->LastSysTimeElapsed(RadSysNum) = - 0.0; // At the beginning of a time step, reset to zero so average calculation can start again - state.dataHighTempRadSys->LastTimeStepSys(RadSysNum) = - 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + for (int HTRnum = 1; state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(HTRnum); + ZoneNum = thisHTR.ZonePtr; + thisHTR.ZeroHTRSourceSumHATsurf = + state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets + thisHTR.QHTRRadSource = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisHTR.QHTRRadSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisHTR.LastQHTRRadSrc = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + thisHTR.LastSysTimeElapsed = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + thisHTR.LastTimeStepSys = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + } } } @@ -958,7 +950,7 @@ namespace HighTempRadiantSystem { // Unit is off or has no load upon it; set the flow rates to zero and then // simulate the components with the no flow conditions - state.dataHighTempRadSys->QHTRadSource(RadSysNum) = 0.0; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = 0.0; } else { // Unit might be on-->this section is intended to control the output of the // high temperature radiant heater (temperature controlled) @@ -989,7 +981,8 @@ namespace HighTempRadiantSystem { if (HeatFrac > 1.0) HeatFrac = 1.0; // Set the heat source for the high temperature electric radiant system - state.dataHighTempRadSys->QHTRadSource(RadSysNum) = HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = + HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; } } @@ -1058,7 +1051,7 @@ namespace HighTempRadiantSystem { // initialize local variables ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - state.dataHighTempRadSys->QHTRadSource(RadSysNum) = 0.0; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = 0.0; if (GetCurrentScheduleValue(state, state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SchedPtr) > 0) { @@ -1111,7 +1104,8 @@ namespace HighTempRadiantSystem { } // Set the heat source for the high temperature radiant system - state.dataHighTempRadSys->QHTRadSource(RadSysNum) = HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = + HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; // Now, distribute the radiant energy of all systems to the appropriate // surfaces, to people, and the air; determine the latent portion @@ -1199,25 +1193,23 @@ namespace HighTempRadiantSystem { int ZoneNum; // Zone index number for the current radiant system Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; Real64 TimeStepSys = state.dataHVACGlobal->TimeStepSys; + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); // First, update the running average if necessary... - if (state.dataHighTempRadSys->LastSysTimeElapsed(RadSysNum) == SysTimeElapsed) { + if (thisHTR.LastSysTimeElapsed == SysTimeElapsed) { // Still iterating or reducing system time step, so subtract old values which were // not valid - state.dataHighTempRadSys->QHTRadSrcAvg(RadSysNum) -= state.dataHighTempRadSys->LastQHTRadSrc(RadSysNum) * - state.dataHighTempRadSys->LastTimeStepSys(RadSysNum) / - state.dataGlobal->TimeStepZone; + thisHTR.QHTRRadSrcAvg -= thisHTR.LastQHTRRadSrc * thisHTR.LastTimeStepSys / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - state.dataHighTempRadSys->QHTRadSrcAvg(RadSysNum) += - state.dataHighTempRadSys->QHTRadSource(RadSysNum) * TimeStepSys / state.dataGlobal->TimeStepZone; + thisHTR.QHTRRadSrcAvg += thisHTR.QHTRRadSource * TimeStepSys / state.dataGlobal->TimeStepZone; - state.dataHighTempRadSys->LastQHTRadSrc(RadSysNum) = state.dataHighTempRadSys->QHTRadSource(RadSysNum); - state.dataHighTempRadSys->LastSysTimeElapsed(RadSysNum) = SysTimeElapsed; - state.dataHighTempRadSys->LastTimeStepSys(RadSysNum) = TimeStepSys; + thisHTR.LastQHTRRadSrc = thisHTR.QHTRRadSource; + thisHTR.LastSysTimeElapsed = SysTimeElapsed; + thisHTR.LastTimeStepSys = TimeStepSys; - switch (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ControlType) { + switch (thisHTR.ControlType) { case RadControlType::MATControl: case RadControlType::MRTControl: case RadControlType::OperativeControl: { @@ -1227,7 +1219,7 @@ namespace HighTempRadiantSystem { DistributeHTRadGains(state); // Now "simulate" the system by recalculating the heat balances - ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; + ZoneNum = thisHTR.ZonePtr; HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum); HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); } break; @@ -1235,11 +1227,11 @@ namespace HighTempRadiantSystem { break; } - if (state.dataHighTempRadSys->QHTRadSource(RadSysNum) <= 0.0) { + if (thisHTR.QHTRRadSource <= 0.0) { LoadMet = 0.0; // System wasn't running so it can't meet a load } else { - ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataHighTempRadSys->ZeroSourceSumHATsurf(ZoneNum)) + + ZoneNum = thisHTR.ZonePtr; + LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - thisHTR.ZeroHTRSourceSumHATsurf) + state.dataHeatBalFanSys->SumConvHTRadSys(ZoneNum); } } @@ -1290,19 +1282,20 @@ namespace HighTempRadiantSystem { HighTempRadSysOn = false; // If this was never allocated, then there are no radiant systems in this input file (just RETURN) - if (!allocated(state.dataHighTempRadSys->QHTRadSrcAvg)) return; + if (state.dataHighTempRadSys->NumOfHighTempRadSys == 0) return; // If it was allocated, then we have to check to see if this was running at all... for (RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { - if (state.dataHighTempRadSys->QHTRadSrcAvg(RadSysNum) != 0.0) { + if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg != 0.0) { HighTempRadSysOn = true; break; // DO loop } } - state.dataHighTempRadSys->QHTRadSource = state.dataHighTempRadSys->QHTRadSrcAvg; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg; - DistributeHTRadGains(state); // state.dataHighTempRadSys->QHTRadSource has been modified so we need to redistribute gains + DistributeHTRadGains( + state); // state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource has been modified so we need to redistribute gains } void DistributeHTRadGains(EnergyPlusData &state) @@ -1350,23 +1343,23 @@ namespace HighTempRadiantSystem { ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - state.dataHeatBalFanSys->ZoneQHTRadSysToPerson(ZoneNum) = state.dataHighTempRadSys->QHTRadSource(RadSysNum) * + state.dataHeatBalFanSys->ZoneQHTRadSysToPerson(ZoneNum) = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracDistribPerson; state.dataHeatBalFanSys->SumConvHTRadSys(ZoneNum) += - state.dataHighTempRadSys->QHTRadSource(RadSysNum) * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracConvect; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracConvect; state.dataHeatBalFanSys->SumLatentHTRadSys(ZoneNum) += - state.dataHighTempRadSys->QHTRadSource(RadSysNum) * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracLatent; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracLatent; for (RadSurfNum = 1; RadSurfNum <= state.dataHighTempRadSys->HighTempRadSys(RadSysNum).TotSurfToDistrib; ++RadSurfNum) { SurfNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SurfacePtr(RadSurfNum); if (state.dataSurface->Surface(SurfNum).Area > SmallestArea) { - ThisSurfIntensity = - (state.dataHighTempRadSys->QHTRadSource(RadSysNum) * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant * - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracDistribToSurf(RadSurfNum) / - state.dataSurface->Surface(SurfNum).Area); + ThisSurfIntensity = (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant * + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracDistribToSurf(RadSurfNum) / + state.dataSurface->Surface(SurfNum).Area); state.dataHeatBalFanSys->SurfQHTRadSys(SurfNum) += ThisSurfIntensity; state.dataHeatBalSurf->AnyRadiantSystems = true; @@ -1422,8 +1415,8 @@ namespace HighTempRadiantSystem { Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeaterType == RadHeaterType::Gas) { - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower = - state.dataHighTempRadSys->QHTRadSource(RadSysNum) / state.dataHighTempRadSys->HighTempRadSys(RadSysNum).CombustionEffic; + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource / + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).CombustionEffic; state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasEnergy = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower * TimeStepSysSec; state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower = 0.0; @@ -1431,13 +1424,13 @@ namespace HighTempRadiantSystem { } else if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeaterType == RadHeaterType::Electric) { state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower = 0.0; state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasEnergy = 0.0; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower = state.dataHighTempRadSys->QHTRadSource(RadSysNum); + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource; state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecEnergy = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower * TimeStepSysSec; } else { ShowWarningError(state, "Someone forgot to add a high temperature radiant heater type to the reporting subroutine"); } - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatPower = state.dataHighTempRadSys->QHTRadSource(RadSysNum); + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource; state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatEnergy = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatPower * TimeStepSysSec; } diff --git a/src/EnergyPlus/HighTempRadiantSystem.hh b/src/EnergyPlus/HighTempRadiantSystem.hh index 3523ff6600a..302056d482e 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.hh +++ b/src/EnergyPlus/HighTempRadiantSystem.hh @@ -123,6 +123,13 @@ namespace HighTempRadiantSystem { Array1D_int SurfacePtr; // Surface number in the list of surfaces heater sends radiation to Array1D FracDistribToSurf; // Fraction of fraction radiant incident on the surface // Other parameters + Real64 ZeroHTRSourceSumHATsurf; // used in baseboard energy balance + Real64 QHTRRadSource; // Need to keep the last value in case we are still iterating + Real64 QHTRRadSrcAvg; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating + Real64 LastQHTRRadSrc; // Need to keep the last value in case we are still iterating + // Report data Real64 ElecPower; // system electric consumption in Watts Real64 ElecEnergy; // system electric consumption in Joules @@ -140,7 +147,8 @@ namespace HighTempRadiantSystem { : SchedPtr(0), ZonePtr(0), HeaterType(RadHeaterType::Invalid), MaxPowerCapac(0.0), CombustionEffic(0.0), FracRadiant(0.0), FracLatent(0.0), FracLost(0.0), FracConvect(0.0), ControlType(RadControlType::Invalid), ThrottlRange(0.0), SetptSchedPtr(0), FracDistribPerson(0.0), TotSurfToDistrib(0), ElecPower(0.0), ElecEnergy(0.0), GasPower(0.0), GasEnergy(0.0), HeatPower(0.0), - HeatEnergy(0.0), HeatingCapMethod(0), ScaledHeatingCapacity(0.0) + HeatEnergy(0.0), HeatingCapMethod(0), ZeroHTRSourceSumHATsurf(0.0), QHTRRadSource(0.0), QHTRRadSrcAvg(0.0), LastSysTimeElapsed(0.0), + LastTimeStepSys(0.0), LastQHTRRadSrc(0.0), ScaledHeatingCapacity(0.0) { } }; @@ -198,14 +206,7 @@ struct HighTempRadiantSystemData : BaseGlobalStruct { // Standard, run-of-the-mill variables... - int NumOfHighTempRadSys = 0; // Number of hydronic low tempererature radiant systems - Array1D QHTRadSource; // Need to keep the last value in case we are still iterating - Array1D QHTRadSrcAvg; // Need to keep the last value in case we are still iterating - Array1D ZeroSourceSumHATsurf; // Equal to the SumHATsurf for all the walls in a zone with no source - // Record keeping variables used to calculate QHTRadSrcAvg locally - Array1D LastQHTRadSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating + int NumOfHighTempRadSys = 0; // Number of hydronic low tempererature radiant systems Array1D_bool MySizeFlag; Array1D_bool CheckEquipName; @@ -221,12 +222,6 @@ struct HighTempRadiantSystemData : BaseGlobalStruct void clear_state() override { NumOfHighTempRadSys = 0; - QHTRadSource.clear(); - QHTRadSrcAvg.clear(); - ZeroSourceSumHATsurf.clear(); - LastQHTRadSrc.clear(); - LastSysTimeElapsed.clear(); - LastTimeStepSys.clear(); MySizeFlag.clear(); CheckEquipName.clear(); diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index f138ed7c0ae..49123698a17 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -1972,7 +1972,6 @@ namespace LowTempRadiantSystem { if (state.dataLowTempRadSys->FirstTimeInit) { - state.dataLowTempRadSys->ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0); state.dataLowTempRadSys->QRadSysSrcAvg.dimension(state.dataSurface->TotSurfaces, 0.0); state.dataLowTempRadSys->LastQRadSysSrc.dimension(state.dataSurface->TotSurfaces, 0.0); state.dataLowTempRadSys->LastSysTimeElapsed.dimension(state.dataSurface->TotSurfaces, 0.0); @@ -1984,8 +1983,9 @@ namespace LowTempRadiantSystem { state.dataLowTempRadSys->MySizeFlagCFlo = true; state.dataLowTempRadSys->MySizeFlagElec = true; - // Initialize total areas for all radiant systems + // Initialize total areas and ZeroLTRSource for all radiant systems for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++RadNum) { + state.dataLowTempRadSys->HydrRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; state.dataLowTempRadSys->HydrRadSys(RadNum).TotalSurfaceArea = 0.0; for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->HydrRadSys(RadNum).NumOfSurfaces; ++SurfNum) { state.dataLowTempRadSys->HydrRadSys(RadNum).TotalSurfaceArea += @@ -1993,6 +1993,7 @@ namespace LowTempRadiantSystem { } } for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { + state.dataLowTempRadSys->CFloRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; state.dataLowTempRadSys->CFloRadSys(RadNum).TotalSurfaceArea = 0.0; for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->CFloRadSys(RadNum).NumOfSurfaces; ++SurfNum) { state.dataLowTempRadSys->CFloRadSys(RadNum).TotalSurfaceArea += @@ -2000,6 +2001,7 @@ namespace LowTempRadiantSystem { } } for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++RadNum) { + state.dataLowTempRadSys->ElecRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; state.dataLowTempRadSys->ElecRadSys(RadNum).TotalSurfaceArea = 0.0; for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->ElecRadSys(RadNum).NumOfSurfaces; ++SurfNum) { state.dataLowTempRadSys->ElecRadSys(RadNum).TotalSurfaceArea += @@ -2273,7 +2275,13 @@ namespace LowTempRadiantSystem { } if (state.dataGlobal->BeginEnvrnFlag && state.dataLowTempRadSys->MyEnvrnFlagGeneral) { - state.dataLowTempRadSys->ZeroSourceSumHATsurf = 0.0; + if (SystemType == LowTempRadiantSystem::SystemType::HydronicSystem) { + state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + } else if (SystemType == LowTempRadiantSystem::SystemType::ConstantFlowSystem) { + state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + } else if (SystemType == LowTempRadiantSystem::SystemType::ElectricSystem) { + state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + } state.dataLowTempRadSys->QRadSysSrcAvg = 0.0; state.dataLowTempRadSys->LastQRadSysSrc = 0.0; state.dataLowTempRadSys->LastSysTimeElapsed = 0.0; @@ -2424,7 +2432,7 @@ namespace LowTempRadiantSystem { switch (SystemType) { case LowTempRadiantSystem::SystemType::HydronicSystem: { ZoneNum = state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->ZeroSourceSumHATsurf(ZoneNum) = + state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->HydrRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { SurfNum = state.dataLowTempRadSys->HydrRadSys(RadSysNum).SurfacePtr(RadSurfNum); @@ -2439,7 +2447,7 @@ namespace LowTempRadiantSystem { } break; case LowTempRadiantSystem::SystemType::ConstantFlowSystem: { ZoneNum = state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->ZeroSourceSumHATsurf(ZoneNum) = + state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->CFloRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { SurfNum = state.dataLowTempRadSys->CFloRadSys(RadSysNum).SurfacePtr(RadSurfNum); @@ -2454,7 +2462,7 @@ namespace LowTempRadiantSystem { } break; case LowTempRadiantSystem::SystemType::ElectricSystem: { ZoneNum = state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->ZeroSourceSumHATsurf(ZoneNum) = + state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->ElecRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { SurfNum = state.dataLowTempRadSys->ElecRadSys(RadSysNum).SurfacePtr(RadSurfNum); @@ -4171,7 +4179,7 @@ namespace LowTempRadiantSystem { HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum); HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); - LoadMet = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataLowTempRadSys->ZeroSourceSumHATsurf(ZoneNum); + LoadMet = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - this->ZeroLTRSourceSumHATsurf; } void ConstantFlowRadiantSystemData::calculateLowTemperatureRadiantSystem(EnergyPlusData &state, @@ -5190,7 +5198,7 @@ namespace LowTempRadiantSystem { HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum); HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); - LoadMet = state.dataHeatBal->Zone(this->ZonePtr).sumHATsurf(state) - state.dataLowTempRadSys->ZeroSourceSumHATsurf(this->ZonePtr); + LoadMet = state.dataHeatBal->Zone(this->ZonePtr).sumHATsurf(state) - this->ZeroLTRSourceSumHATsurf; } // TODO Write unit tests for baseboard void ConstantFlowRadiantSystemData::calculateRunningMeanAverageTemperature(EnergyPlusData &state, int RadSysNum) @@ -5322,7 +5330,7 @@ namespace LowTempRadiantSystem { HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum); HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); - LoadMet = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataLowTempRadSys->ZeroSourceSumHATsurf(ZoneNum); + LoadMet = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - this->ZeroLTRSourceSumHATsurf; } else { // OFF or COOLING MODE (not allowed for an electric low temperature radiant system), turn it off diff --git a/src/EnergyPlus/LowTempRadiantSystem.hh b/src/EnergyPlus/LowTempRadiantSystem.hh index 398ef3992f2..cbadab4f327 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.hh +++ b/src/EnergyPlus/LowTempRadiantSystem.hh @@ -139,17 +139,18 @@ namespace LowTempRadiantSystem { struct RadiantSystemBaseData { // Members - std::string Name; // name of hydronic radiant system - std::string SchedName; // availability schedule - int SchedPtr = 0; // index to schedule - std::string ZoneName; // Name of zone the system is serving - int ZonePtr = 0; // Point to this zone in the Zone derived type - std::string SurfListName; // Name of surface/surface list that is the radiant system - int NumOfSurfaces = 0; // Number of surfaces included in this radiant system (coordinated control) - Array1D_int SurfacePtr; // Pointer to the surface(s) in the Surface derived type - Array1D_string SurfaceName; // Name of surfaces that are the radiant system (can be one or more) - Array1D SurfaceFrac; // Fraction of flow/pipe length or electric power for a particular surface - Real64 TotalSurfaceArea = 0.0; // Total surface area for all surfaces that are part of this radiant system + std::string Name; // name of hydronic radiant system + std::string SchedName; // availability schedule + int SchedPtr = 0; // index to schedule + std::string ZoneName; // Name of zone the system is serving + int ZonePtr = 0; // Point to this zone in the Zone derived type + std::string SurfListName; // Name of surface/surface list that is the radiant system + int NumOfSurfaces = 0; // Number of surfaces included in this radiant system (coordinated control) + Array1D_int SurfacePtr; // Pointer to the surface(s) in the Surface derived type + Array1D_string SurfaceName; // Name of surfaces that are the radiant system (can be one or more) + Array1D SurfaceFrac; // Fraction of flow/pipe length or electric power for a particular surface + Real64 TotalSurfaceArea = 0.0; // Total surface area for all surfaces that are part of this radiant system + Real64 ZeroLTRSourceSumHATsurf = 0.0; // Equal to SumHATsurf for all the walls in a zone with no source LowTempRadiantControlTypes controlType = LowTempRadiantControlTypes::MATControl; // Control type for the system (MAT, MRT, Op temp, ODB, OWB, // Surface Face Temp, Surface Interior Temp, Running Mean // Temp for Constant Flow systems only) @@ -567,8 +568,7 @@ struct LowTempRadiantSystemData : BaseGlobalStruct Real64 LowTempHeating = -200.0; // Used to indicate that a user does not have a heating control temperature Real64 HighTempCooling = 200.0; // Used to indicate that a user does not have a cooling control temperature - Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surface - Array1D ZeroSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source + Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surface // Record keeping variables used to calculate QRadSysSrcAvg locally Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating @@ -630,7 +630,6 @@ struct LowTempRadiantSystemData : BaseGlobalStruct // QRadSysSrcAvg.clear(); - ZeroSourceSumHATsurf.clear(); LastQRadSysSrc.clear(); LastSysTimeElapsed.clear(); LastTimeStepSys.clear(); diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index 7f27498cab0..c8cc0cc2851 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -933,12 +933,6 @@ namespace SteamBaseboardRadiator { // initialize the environment and sizing flags state.dataSteamBaseboardRadiator->MyEnvrnFlag.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, true); state.dataSteamBaseboardRadiator->MySizeFlag.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, true); - state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0); - state.dataSteamBaseboardRadiator->QBBSteamRadSource.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0); - state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0); - state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0); - state.dataSteamBaseboardRadiator->LastSysTimeElapsed.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0); - state.dataSteamBaseboardRadiator->LastTimeStepSys.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0); state.dataSteamBaseboardRadiator->SetLoopIndexFlag.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, true); state.dataSteamBaseboardRadiator->MyOneTimeFlag = false; } @@ -1016,28 +1010,28 @@ namespace SteamBaseboardRadiator { state.dataLoopNodes->Node(SteamInletNode).Quality = 1.0; state.dataLoopNodes->Node(SteamInletNode).HumRat = 0.0; - // Initializes radiant sources - state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf = 0.0; - state.dataSteamBaseboardRadiator->QBBSteamRadSource = 0.0; - state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg = 0.0; - state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc = 0.0; - state.dataSteamBaseboardRadiator->LastSysTimeElapsed = 0.0; - state.dataSteamBaseboardRadiator->LastTimeStepSys = 0.0; - state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = false; } if (!state.dataGlobal->BeginEnvrnFlag) { state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = true; + // Initializes radiant sources + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZeroBBSteamSourceSumHATsurf = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastQBBSteamRadSrc = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastTimeStepSys = 0.0; } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { int ZoneNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr; - state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf(ZoneNum) = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); - state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) = 0.0; - state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) = 0.0; - state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) = 0.0; - state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZeroBBSteamSourceSumHATsurf = + state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastQBBSteamRadSrc = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastTimeStepSys = 0.0; } // Do the every time step initializations @@ -1361,7 +1355,7 @@ namespace SteamBaseboardRadiator { SteamOutletTemp = SteamInletTemp - SubcoolDeltaT; // Outlet temperature of steam // Estimate radiant heat addition RadHeat = SteamBBHeat * SteamBaseboardDesignDataObject.FracRadiant; // Radiant heating rate - state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) = + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = RadHeat; // Radiant heat source which will be distributed to surfaces and people // Now, distribute the radiant energy of all systems to the appropriate surfaces, to people, and the air @@ -1380,7 +1374,8 @@ namespace SteamBaseboardRadiator { // should include this. // Actual system load that the unit should meet - LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf(ZoneNum)) + + LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZeroBBSteamSourceSumHATsurf) + (SteamBBHeat * state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracConvect) + (RadHeat * SteamBaseboardDesignDataObject.FracDistribPerson); state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy = @@ -1392,7 +1387,7 @@ namespace SteamBaseboardRadiator { LoadMet = 0.0; RadHeat = 0.0; SteamMassFlowRate = 0.0; - state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) = 0.0; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = 0.0; state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletQuality = 0.0; state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletEnthalpy; @@ -1432,18 +1427,20 @@ namespace SteamBaseboardRadiator { int SteamOutletNode; // First, update the running average if necessary... - if (state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) == state.dataHVACGlobal->SysTimeElapsed) { - state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) -= state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) * - state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) / - state.dataGlobal->TimeStepZone; + if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastSysTimeElapsed == state.dataHVACGlobal->SysTimeElapsed) { + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg -= + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastQBBSteamRadSrc * + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastTimeStepSys / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) += - state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg += + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource * state.dataHVACGlobal->TimeStepSys / + state.dataGlobal->TimeStepZone; - state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) = state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum); - state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) = state.dataHVACGlobal->SysTimeElapsed; - state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) = state.dataHVACGlobal->TimeStepSys; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastQBBSteamRadSrc = + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastSysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastTimeStepSys = state.dataHVACGlobal->TimeStepSys; SteamInletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode; SteamOutletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletNode; @@ -1482,17 +1479,18 @@ namespace SteamBaseboardRadiator { SteamBaseboardSysOn = false; // If this was never allocated, then there are no radiant systems in this input file (just RETURN) - if (!allocated(state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg)) return; + if (state.dataSteamBaseboardRadiator->NumSteamBaseboards == 0) return; // If it was allocated, then we have to check to see if this was running at all... for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) { - if (state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) != 0.0) { + if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg != 0.0) { SteamBaseboardSysOn = true; break; // DO loop } } - state.dataSteamBaseboardRadiator->QBBSteamRadSource = state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg; DistributeBBSteamRadGains(state); // QBBRadSource has been modified so we need to redistribute gains } @@ -1538,12 +1536,12 @@ namespace SteamBaseboardRadiator { state.dataSteamBaseboardRadiator->SteamBaseboardDesign(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum) .DesignObjectPtr)}; // Contains the data for variable flow hydronic systems state.dataHeatBalFanSys->ZoneQSteamBaseboardToPerson(ZoneNum) += - state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) * SteamBaseboardDesignDataObject.FracDistribPerson; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource * SteamBaseboardDesignDataObject.FracDistribPerson; for (RadSurfNum = 1; RadSurfNum <= state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib; ++RadSurfNum) { SurfNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr(RadSurfNum); if (state.dataSurface->Surface(SurfNum).Area > SmallestArea) { - ThisSurfIntensity = (state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) * + ThisSurfIntensity = (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource * state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(RadSurfNum) / state.dataSurface->Surface(SurfNum).Area); state.dataHeatBalFanSys->SurfQSteamBaseboard(SurfNum) += ThisSurfIntensity; diff --git a/src/EnergyPlus/SteamBaseboardRadiator.hh b/src/EnergyPlus/SteamBaseboardRadiator.hh index 9dd66e99e97..38efaa9603d 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.hh +++ b/src/EnergyPlus/SteamBaseboardRadiator.hh @@ -109,6 +109,16 @@ namespace SteamBaseboardRadiator { int BBLoadReSimIndex; int BBMassFlowReSimIndex; int BBInletTempFlowReSimIndex; + Real64 QBBSteamRadSource; // Need to keep the last value in case we are still iterating + Real64 QBBSteamRadSrcAvg; // Need to keep the last value in case we are still iterating + Real64 ZeroBBSteamSourceSumHATsurf; // Equal to the SumHATsurf for all the walls in a zone + // with no source + + // Record keeping variables used to calculate QBBRadSrcAvg locally + Real64 LastQBBSteamRadSrc; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating + Real64 ScaledHeatingCapacity; // - steam baseboard Radiator system scaled maximum heating capacity {W} or scalable variable of zone HVAC // equipment, {-}, or {W/m2} @@ -120,7 +130,8 @@ namespace SteamBaseboardRadiator { SteamOutletEnthalpy(0.0), SteamInletPress(0.0), SteamOutletPress(0.0), SteamInletQuality(0.0), SteamOutletQuality(0.0), FracRadiant(0.0), FracConvect(0.0), FracDistribPerson(0.0), TotPower(0.0), Power(0.0), ConvPower(0.0), RadPower(0.0), TotEnergy(0.0), Energy(0.0), ConvEnergy(0.0), RadEnergy(0.0), plantLoc{}, BBLoadReSimIndex(0), BBMassFlowReSimIndex(0), BBInletTempFlowReSimIndex(0), - ScaledHeatingCapacity(0.0) + QBBSteamRadSource(0.0), QBBSteamRadSrcAvg(0.0), ZeroBBSteamSourceSumHATsurf(0.0), LastQBBSteamRadSrc(0.0), LastSysTimeElapsed(0.0), + LastTimeStepSys(0.0), ScaledHeatingCapacity(0.0) { } }; @@ -209,15 +220,6 @@ struct SteamBaseboardRadiatorData : BaseGlobalStruct int NumSteamBaseboardsDesign = 0; int SteamIndex = 0; - Array1D QBBSteamRadSource; // Need to keep the last value in case we are still iterating - Array1D QBBSteamRadSrcAvg; // Need to keep the last value in case we are still iterating - Array1D ZeroSourceSumHATsurf; // Equal to the SumHATsurf for all the walls in a zone - // with no source - - // Record keeping variables used to calculate QBBRadSrcAvg locally - Array1D LastQBBSteamRadSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating Array1D_bool MySizeFlag; Array1D_bool CheckEquipName; Array1D_bool CheckDesignObjectName; @@ -238,12 +240,6 @@ struct SteamBaseboardRadiatorData : BaseGlobalStruct { NumSteamBaseboards = 0; SteamIndex = 0; - QBBSteamRadSource.clear(); - QBBSteamRadSrcAvg.clear(); - ZeroSourceSumHATsurf.clear(); - LastQBBSteamRadSrc.clear(); - LastSysTimeElapsed.clear(); - LastTimeStepSys.clear(); MySizeFlag.clear(); MyEnvrnFlag.clear(); CheckEquipName.clear(); diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index 8f70389c30c..7bf1af0aeb0 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -478,27 +478,13 @@ void SwimmingPoolData::initialize(EnergyPlusData &state, bool const FirstHVACIte if (this->MyOneTimeFlag) { this->setupOutputVars(state); // Set up the output variables once here - this->ZeroSourceSumHATsurf.allocate(state.dataGlobal->NumOfZones); - this->ZeroSourceSumHATsurf = 0.0; - this->QPoolSrcAvg.allocate(state.dataSurface->TotSurfaces); - this->QPoolSrcAvg = 0.0; - this->HeatTransCoefsAvg.allocate(state.dataSurface->TotSurfaces); - this->HeatTransCoefsAvg = 0.0; - this->LastQPoolSrc.allocate(state.dataSurface->TotSurfaces); - this->LastQPoolSrc = 0.0; - this->LastHeatTransCoefs.allocate(state.dataSurface->TotSurfaces); - this->LastHeatTransCoefs = 0.0; - this->LastSysTimeElapsed.allocate(state.dataSurface->TotSurfaces); - this->LastSysTimeElapsed = 0.0; - this->LastTimeStepSys.allocate(state.dataSurface->TotSurfaces); - this->LastTimeStepSys = 0.0; this->MyOneTimeFlag = false; } SwimmingPoolData::initSwimmingPoolPlantLoopIndex(state); if (state.dataGlobal->BeginEnvrnFlag && this->MyEnvrnFlagGeneral) { - this->ZeroSourceSumHATsurf = 0.0; + this->ZeroPoolSourceSumHATsurf = 0.0; this->QPoolSrcAvg = 0.0; this->HeatTransCoefsAvg = 0.0; this->LastQPoolSrc = 0.0; @@ -529,14 +515,14 @@ void SwimmingPoolData::initialize(EnergyPlusData &state, bool const FirstHVACIte if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { // This is the first pass through in a particular time step int ZoneNum = this->ZonePtr; - this->ZeroSourceSumHATsurf(ZoneNum) = - state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets + this->ZeroPoolSourceSumHATsurf = + state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what the impact of the swimming pool on all zone surfaces int SurfNum = this->SurfacePtr; - this->QPoolSrcAvg(SurfNum) = 0.0; // Initialize this variable to zero (pool parameters "off") - this->HeatTransCoefsAvg(SurfNum) = 0.0; // Initialize this variable to zero (pool parameters "off") - this->LastQPoolSrc(SurfNum) = 0.0; // At the start of a time step, reset to zero so average calculation can begin again - this->LastSysTimeElapsed(SurfNum) = 0.0; // At the start of a time step, reset to zero so average calculation can begin again - this->LastTimeStepSys(SurfNum) = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->QPoolSrcAvg = 0.0; // Initialize this variable to zero (pool parameters "off") + this->HeatTransCoefsAvg = 0.0; // Initialize this variable to zero (pool parameters "off") + this->LastQPoolSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } // initialize the flow rate for the component on the plant side (this follows standard procedure for other components like low temperature @@ -1004,23 +990,22 @@ void SwimmingPoolData::update(EnergyPlusData &state) int SurfNum = this->SurfacePtr; // surface number/pointer - if (this->LastSysTimeElapsed(SurfNum) == state.dataHVACGlobal->SysTimeElapsed) { + if (this->LastSysTimeElapsed == state.dataHVACGlobal->SysTimeElapsed) { // Still iterating or reducing system time step, so subtract old values which were // not valid - this->QPoolSrcAvg(SurfNum) -= this->LastQPoolSrc(SurfNum) * this->LastTimeStepSys(SurfNum) / state.dataGlobal->TimeStepZone; - this->HeatTransCoefsAvg(SurfNum) -= this->LastHeatTransCoefs(SurfNum) * this->LastTimeStepSys(SurfNum) / state.dataGlobal->TimeStepZone; + this->QPoolSrcAvg -= this->LastQPoolSrc * this->LastTimeStepSys / state.dataGlobal->TimeStepZone; + this->HeatTransCoefsAvg -= this->LastHeatTransCoefs * this->LastTimeStepSys / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - this->QPoolSrcAvg(SurfNum) += - state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; - this->HeatTransCoefsAvg(SurfNum) += + this->QPoolSrcAvg += state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; + this->HeatTransCoefsAvg += state.dataHeatBalFanSys->PoolHeatTransCoefs(SurfNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone; - this->LastQPoolSrc(SurfNum) = state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum); - this->LastHeatTransCoefs(SurfNum) = state.dataHeatBalFanSys->PoolHeatTransCoefs(SurfNum); - this->LastSysTimeElapsed(SurfNum) = state.dataHVACGlobal->SysTimeElapsed; - this->LastTimeStepSys(SurfNum) = state.dataHVACGlobal->TimeStepSys; + this->LastQPoolSrc = state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum); + this->LastHeatTransCoefs = state.dataHeatBalFanSys->PoolHeatTransCoefs(SurfNum); + this->LastSysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; + this->LastTimeStepSys = state.dataHVACGlobal->TimeStepSys; PlantUtilities::SafeCopyPlantNode(state, this->WaterInletNode, this->WaterOutletNode); @@ -1056,13 +1041,14 @@ void UpdatePoolSourceValAvg(EnergyPlusData &state, bool &SwimmingPoolOn) // .TRU // SUBROUTINE LOCAL VARIABLE DECLARATIONS: SwimmingPoolOn = false; - // If this was never allocated, then there are no radiant systems in this input file (just RETURN) - for (int PoolNum = 1; PoolNum <= state.dataSwimmingPools->NumSwimmingPools; ++PoolNum) { - if (!allocated(state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg)) return; + // If there are no pools, then just RETURN - // If it was allocated, then we have to check to see if this was running at all + if (state.dataSwimmingPools->NumSwimmingPools == 0) return; + + for (int PoolNum = 1; PoolNum <= state.dataSwimmingPools->NumSwimmingPools; ++PoolNum) { + // Check to see if any of the pools were running at all for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { - if (state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg(SurfNum) != 0.0) { + if (state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg != 0.0) { SwimmingPoolOn = true; break; // DO loop } diff --git a/src/EnergyPlus/SwimmingPool.hh b/src/EnergyPlus/SwimmingPool.hh index 8f22500e7fa..41b8bb2cc5c 100644 --- a/src/EnergyPlus/SwimmingPool.hh +++ b/src/EnergyPlus/SwimmingPool.hh @@ -130,14 +130,14 @@ namespace SwimmingPool { bool MyOneTimeFlag; bool MyEnvrnFlagGeneral; bool MyPlantScanFlagPool; - Array1D QPoolSrcAvg; // Average source over the time step for a particular radiant surface - Array1D HeatTransCoefsAvg; // Average denominator term over the time step for a particular pool - Array1D ZeroSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source + Real64 QPoolSrcAvg; // Average source over the time step for a particular radiant surface + Real64 HeatTransCoefsAvg; // Average denominator term over the time step for a particular pool + Real64 ZeroPoolSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source // Record keeping variables used to calculate QRadSysSrcAvg locally - Array1D LastQPoolSrc; // Need to keep the last value in case we are still iterating - Array1D LastHeatTransCoefs; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating + Real64 LastQPoolSrc; // Need to keep the last value in case we are still iterating + Real64 LastHeatTransCoefs; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating // Default Constructor SwimmingPoolData() @@ -150,7 +150,8 @@ namespace SwimmingPool { PoolWaterTemp(23.0), WaterInletTemp(0.0), WaterOutletTemp(0.0), WaterMassFlowRate(0.0), MakeUpWaterMassFlowRate(0.0), MakeUpWaterMass(0.0), MakeUpWaterVolFlowRate(0.0), MakeUpWaterVol(0.0), HeatPower(0.0), HeatEnergy(0.0), MiscEquipPower(0.0), MiscEquipEnergy(0.0), RadConvertToConvectRep(0.0), EvapHeatLossRate(0.0), EvapEnergyLoss(0.0), MyOneTimeFlag(true), - MyEnvrnFlagGeneral(true), MyPlantScanFlagPool(true) + MyEnvrnFlagGeneral(true), MyPlantScanFlagPool(true), QPoolSrcAvg(0.0), HeatTransCoefsAvg(0.0), ZeroPoolSourceSumHATsurf(0.0), + LastQPoolSrc(0.0), LastHeatTransCoefs(0.0), LastSysTimeElapsed(0.0), LastTimeStepSys(0.0) { } diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 353e6f2a1d3..70f550e3b7f 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1539,7 +1539,6 @@ namespace VentilatedSlab { state.dataVentilatedSlab->MySizeFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); state.dataVentilatedSlab->MyPlantScanFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); state.dataVentilatedSlab->MyZoneEqFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); - state.dataVentilatedSlab->ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0); state.dataVentilatedSlab->QRadSysSrcAvg.dimension(state.dataSurface->TotSurfaces, 0.0); state.dataVentilatedSlab->LastQRadSysSrc.dimension(state.dataSurface->TotSurfaces, 0.0); state.dataVentilatedSlab->LastSysTimeElapsed.dimension(state.dataSurface->TotSurfaces, 0.0); @@ -1630,14 +1629,14 @@ namespace VentilatedSlab { OutsideAirNode = ventSlab.OutsideAirNode; RhoAir = state.dataEnvrn->StdRhoAir; - // Radiation Panel Part - state.dataVentilatedSlab->ZeroSourceSumHATsurf = 0.0; + // "Radiant" Source Part state.dataVentilatedSlab->QRadSysSrcAvg = 0.0; state.dataVentilatedSlab->LastQRadSysSrc = 0.0; state.dataVentilatedSlab->LastSysTimeElapsed = 0.0; state.dataVentilatedSlab->LastTimeStepSys = 0.0; if (state.dataVentilatedSlab->NumOfVentSlabs > 0) { for (auto &e : state.dataVentilatedSlab->VentSlab) { + e.ZeroVentSlabSourceSumHATsurf = 0.0; e.RadHeatingPower = 0.0; e.RadHeatingEnergy = 0.0; e.RadCoolingPower = 0.0; @@ -1767,7 +1766,7 @@ namespace VentilatedSlab { // The first pass through in a particular time step ZoneNum = ventSlab.ZonePtr; - state.dataVentilatedSlab->ZeroSourceSumHATsurf(ZoneNum) = + ventSlab.ZeroVentSlabSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets for (RadSurfNum = 1; RadSurfNum <= ventSlab.NumOfSurfaces; ++RadSurfNum) { SurfNum = ventSlab.SurfacePtr(RadSurfNum); diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index f84bbccc03e..c33c9a02759 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -273,8 +273,10 @@ namespace VentilatedSlab { Real64 ZoneInletTemp; // supply air temp std::string AvailManagerListName; // Name of an availability manager list object int AvailStatus; - int HVACSizingIndex; // index of a HVACSizing object for a ventilator slab - bool FirstPass; // detects first time through for resetting sizing data + int HVACSizingIndex; // index of a HVACSizing object for a ventilator slab + bool FirstPass; // detects first time through for resetting sizing data + Real64 ZeroVentSlabSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source + // Default Constructor VentilatedSlabData() : SchedPtr(0), ZonePtr(0), NumOfSurfaces(0), TotalSurfaceArea(0.0), CoreDiameter(0.0), CoreLength(0.0), CoreNumbers(0.0), @@ -296,7 +298,7 @@ namespace VentilatedSlab { RadHeatingEnergy(0.0), RadCoolingPower(0.0), RadCoolingEnergy(0.0), HeatCoilPower(0.0), HeatCoilEnergy(0.0), TotCoolCoilPower(0.0), TotCoolCoilEnergy(0.0), SensCoolCoilPower(0.0), SensCoolCoilEnergy(0.0), LateCoolCoilPower(0.0), LateCoolCoilEnergy(0.0), ElecFanPower(0.0), ElecFanEnergy(0.0), AirMassFlowRate(0.0), AirVolFlow(0.0), SlabInTemp(0.0), SlabOutTemp(0.0), ReturnAirTemp(0.0), - FanOutletTemp(0.0), ZoneInletTemp(0.0), AvailStatus(0), HVACSizingIndex(0), FirstPass(true) + FanOutletTemp(0.0), ZoneInletTemp(0.0), AvailStatus(0), HVACSizingIndex(0), FirstPass(true), ZeroVentSlabSourceSumHATsurf(0.0) { } }; @@ -385,13 +387,12 @@ struct VentilatedSlabData : BaseGlobalStruct int OperatingMode = 0; // Used to keep track of whether system is in heating or cooling mode // MODULE VARIABLE DECLARATIONS: - bool HCoilOn = false; // TRUE if the heating coil (gas or electric especially) should be running - int NumOfVentSlabs = 0; // Number of ventilated slab in the input file - Real64 OAMassFlowRate = 0.0; // Outside air mass flow rate for the ventilated slab - Array1D_double QRadSysSrcAvg; // Average source over the time step for a particular radiant surfaceD - Array1D ZeroSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source - int MaxCloNumOfSurfaces = 0; // Used to set allocate size in CalcClo routine - Real64 QZnReq = 0.0; // heating or cooling needed by system [watts] + bool HCoilOn = false; // TRUE if the heating coil (gas or electric especially) should be running + int NumOfVentSlabs = 0; // Number of ventilated slab in the input file + Real64 OAMassFlowRate = 0.0; // Outside air mass flow rate for the ventilated slab + Array1D_double QRadSysSrcAvg; // Average source over the time step for a particular radiant surfaceD + int MaxCloNumOfSurfaces = 0; // Used to set allocate size in CalcClo routine + Real64 QZnReq = 0.0; // heating or cooling needed by system [watts] // Record keeping variables used to calculate QRadSysSrcAvg locally @@ -430,7 +431,6 @@ struct VentilatedSlabData : BaseGlobalStruct this->MaxCloNumOfSurfaces = 0; this->QZnReq = 0.0; this->QRadSysSrcAvg.deallocate(); - this->ZeroSourceSumHATsurf.deallocate(); this->LastQRadSysSrc.deallocate(); this->LastSysTimeElapsed.deallocate(); this->LastTimeStepSys.deallocate(); From b4cc760556645c2e5117f51199e18b67b78bfa68 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 6 Jun 2023 14:46:33 -0500 Subject: [PATCH 005/161] Corrections to Unit Tests Corrections made to HW Baseboard Radiator unit tests which used one of the variables that was moved to become a local variable. --- src/EnergyPlus/SteamBaseboardRadiator.cc | 2 +- tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index c8cc0cc2851..2ec839b5478 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -1492,7 +1492,7 @@ namespace SteamBaseboardRadiator { state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg; - DistributeBBSteamRadGains(state); // QBBRadSource has been modified so we need to redistribute gains + DistributeBBSteamRadGains(state); // QBBSteamRadSource has been modified so we need to redistribute gains } void DistributeBBSteamRadGains(EnergyPlusData &state) diff --git a/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc b/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc index 7e3693bde1b..b04eb6f8e6a 100644 --- a/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc +++ b/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc @@ -77,7 +77,6 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_CalcHWBaseboard) int BBNum; auto &HWBaseboard = state->dataHWBaseboardRad->HWBaseboard; - auto &QBBRadSource = state->dataHWBaseboardRad->QBBRadSource; auto &HWBaseboardDesignObject = state->dataHWBaseboardRad->HWBaseboardDesignObject; state->dataLoopNodes->Node.allocate(1); @@ -85,7 +84,6 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_CalcHWBaseboard) state->dataZoneEnergyDemand->ZoneSysEnergyDemand.allocate(1); state->dataZoneEnergyDemand->CurDeadBandOrSetback.allocate(1); state->dataPlnt->PlantLoop.allocate(1); - QBBRadSource.allocate(1); HWBaseboardDesignObject.allocate(1); state->dataLoopNodes->Node(1).MassFlowRate = 0.40; @@ -103,10 +101,10 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_CalcHWBaseboard) HWBaseboard(1).SchedPtr = -1; HWBaseboard(1).plantLoc.loopNum = 1; HWBaseboard(1).UA = 370; + HWBaseboard(1).QBBRadSource = 0.0; state->dataPlnt->PlantLoop(1).FluidName = "Water"; state->dataPlnt->PlantLoop(1).FluidIndex = 1; state->dataPlnt->PlantLoop(1).FluidType = DataLoopNode::NodeFluidType::Water; - QBBRadSource(1) = 0.0; CalcHWBaseboard(*state, BBNum, LoadMet); @@ -120,7 +118,6 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_CalcHWBaseboard) state->dataZoneEnergyDemand->ZoneSysEnergyDemand.deallocate(); state->dataZoneEnergyDemand->CurDeadBandOrSetback.deallocate(); state->dataPlnt->PlantLoop.deallocate(); - QBBRadSource.deallocate(); } TEST_F(EnergyPlusFixture, HWBaseboardRadiator_HWBaseboardWaterFlowResetTest) @@ -131,7 +128,6 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_HWBaseboardWaterFlowResetTest) BBNum = 1; LoadMet = 0.0; auto &HWBaseboard = state->dataHWBaseboardRad->HWBaseboard; - auto &QBBRadSource = state->dataHWBaseboardRad->QBBRadSource; auto &HWBaseboardDesignObject = state->dataHWBaseboardRad->HWBaseboardDesignObject; state->dataLoopNodes->Node.allocate(2); @@ -139,7 +135,6 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_HWBaseboardWaterFlowResetTest) state->dataZoneEnergyDemand->ZoneSysEnergyDemand.allocate(1); state->dataZoneEnergyDemand->CurDeadBandOrSetback.allocate(1); state->dataPlnt->PlantLoop.allocate(1); - QBBRadSource.allocate(1); HWBaseboardDesignObject.allocate(1); state->dataZoneEnergyDemand->CurDeadBandOrSetback(1) = false; @@ -160,10 +155,10 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_HWBaseboardWaterFlowResetTest) HWBaseboard(1).plantLoc.loopSideNum = DataPlant::LoopSideLocation::Demand; HWBaseboard(1).plantLoc.branchNum = 1; HWBaseboard(1).UA = 400.0; + HWBaseboard(1).QBBRadSource = 0.0; state->dataPlnt->PlantLoop(1).FluidName = "Water"; state->dataPlnt->PlantLoop(1).FluidIndex = 1; state->dataPlnt->PlantLoop(1).FluidType = DataLoopNode::NodeFluidType::Water; - QBBRadSource(1) = 0.0; state->dataLoopNodes->Node(HWBaseboard(1).WaterInletNode).MassFlowRate = 0.2; state->dataLoopNodes->Node(HWBaseboard(1).WaterInletNode).MassFlowRateMax = 0.4; @@ -205,5 +200,4 @@ TEST_F(EnergyPlusFixture, HWBaseboardRadiator_HWBaseboardWaterFlowResetTest) state->dataZoneEnergyDemand->ZoneSysEnergyDemand.deallocate(); state->dataZoneEnergyDemand->CurDeadBandOrSetback.deallocate(); state->dataPlnt->PlantLoop.deallocate(); - QBBRadSource.deallocate(); } From d8c4e12d83114e9b059d91f012ce25c9d5722968 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 6 Jun 2023 16:16:39 -0500 Subject: [PATCH 006/161] More corrections Additional changes needed after attempting to merge in some diffs with develop. --- src/EnergyPlus/HWBaseboardRadiator.cc | 60 +++++++++++++-------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index ce682ad39ec..4fa5e6f016f 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -835,10 +835,8 @@ namespace HWBaseboardRadiator { static constexpr std::string_view RoutineName("BaseboardRadiatorWater:InitHWBaseboard"); int WaterInletNode; - Real64 RhoAirStdInit; Real64 rho; // local fluid density Real64 Cp; // local fluid specific heat - bool errFlag; int NumHWBaseboards = state.dataHWBaseboardRad->NumHWBaseboards; auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); @@ -853,17 +851,17 @@ namespace HWBaseboardRadiator { state.dataHWBaseboardRad->MyOneTimeFlag = false; for (int Loop = 1; Loop <= NumHWBaseboards; ++Loop) { + auto &hWBB = state.dataHWBaseboardRad->HWBaseboard; // Air mass flow rate is obtained from the following linear equation (reset if autosize is used) // m_dot = 0.0062 + 2.75e-05*q - HWBaseboard(Loop).AirMassFlowRateStd = Constant + Coeff * HWBaseboard(Loop).RatedCapacity; - HWBaseboard(Loop).ZeroBBSourceSumHATsurf = 0.0; - HWBaseboard(Loop).QBBRadSource = 0.0; - HWBaseboard(Loop).QBBRadSrcAvg = 0.0; - HWBaseboard(Loop).LastQBBRadSrc = 0.0; - HWBaseboard(Loop).LastSysTimeElapsed = 0.0; - HWBaseboard(Loop).LastTimeStepSys = 0.0; - state.dataHWBaseboardRad->HWBaseboard(Loop).AirMassFlowRateStd = - Constant + Coeff * state.dataHWBaseboardRad->HWBaseboard(Loop).RatedCapacity; + hWBB(Loop).AirMassFlowRateStd = Constant + Coeff * hWBB(Loop).RatedCapacity; + hWBB(Loop).ZeroBBSourceSumHATsurf = 0.0; + hWBB(Loop).QBBRadSource = 0.0; + hWBB(Loop).QBBRadSrcAvg = 0.0; + hWBB(Loop).LastQBBRadSrc = 0.0; + hWBB(Loop).LastSysTimeElapsed = 0.0; + hWBB(Loop).LastTimeStepSys = 0.0; + hWBB(Loop).AirMassFlowRateStd = Constant + Coeff * hWBB(Loop).RatedCapacity; } } @@ -888,7 +886,6 @@ namespace HWBaseboardRadiator { // Do the Begin Environment initializations if (state.dataGlobal->BeginEnvrnFlag && state.dataHWBaseboardRad->MyEnvrnFlag(BaseboardNum)) { // Initialize - RhoAirStdInit = state.dataEnvrn->StdRhoAir; WaterInletNode = HWBaseboard.WaterInletNode; rho = FluidProperties::GetDensityGlycol(state, @@ -914,12 +911,12 @@ namespace HWBaseboardRadiator { state.dataLoopNodes->Node(WaterInletNode).Press = 0.0; state.dataLoopNodes->Node(WaterInletNode).HumRat = 0.0; - HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf = 0.0; - HWBaseboard(BaseboardNum).QBBRadSource = 0.0; - HWBaseboard(BaseboardNum).QBBRadSrcAvg = 0.0; - HWBaseboard(BaseboardNum).LastQBBRadSrc = 0.0; - HWBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; - HWBaseboard(BaseboardNum).LastTimeStepSys = 0.0; + HWBaseboard.ZeroBBSourceSumHATsurf = 0.0; + HWBaseboard.QBBRadSource = 0.0; + HWBaseboard.QBBRadSrcAvg = 0.0; + HWBaseboard.LastQBBRadSrc = 0.0; + HWBaseboard.LastSysTimeElapsed = 0.0; + HWBaseboard.LastTimeStepSys = 0.0; state.dataHWBaseboardRad->MyEnvrnFlag(BaseboardNum) = false; } @@ -929,12 +926,12 @@ namespace HWBaseboardRadiator { } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { - int ZoneNum = HWBaseboard(BaseboardNum).ZonePtr; - HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); - HWBaseboard(BaseboardNum).QBBRadSrcAvg = 0.0; - HWBaseboard(BaseboardNum).LastQBBRadSrc = 0.0; - HWBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; - HWBaseboard(BaseboardNum).LastTimeStepSys = 0.0; + int ZoneNum = HWBaseboard.ZonePtr; + HWBaseboard.ZeroBBSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); + HWBaseboard.QBBRadSrcAvg = 0.0; + HWBaseboard.LastQBBRadSrc = 0.0; + HWBaseboard.LastSysTimeElapsed = 0.0; + HWBaseboard.LastTimeStepSys = 0.0; } // Do the every time step initializations @@ -1337,7 +1334,7 @@ namespace HWBaseboardRadiator { WaterOutletTemp = WaterInletTemp - CapacitanceAir * (AirOutletTemp - AirInletTemp) / CapacitanceWater; BBHeat = CapacitanceWater * (WaterInletTemp - WaterOutletTemp); RadHeat = BBHeat * HWBaseboardDesignDataObject.FracRadiant; - HWBaseboard(BaseboardNum).QBBRadSource = RadHeat; + hWBaseboard.QBBRadSource = RadHeat; if (HWBaseboardDesignDataObject.FracRadiant <= MinFrac) { LoadMet = BBHeat; @@ -1359,8 +1356,8 @@ namespace HWBaseboardRadiator { // not very precise, but at least it conserves energy. The system impact to heat balance // should include this. - LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - HWBaseboard(BaseboardNum).ZeroBBSourceSumHATsurf) + - (BBHeat * HWBaseboard(BaseboardNum).FracConvect) + (RadHeat * HWBaseboardDesignDataObject.FracDistribPerson); + LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - hWBaseboard.ZeroBBSourceSumHATsurf) + + (BBHeat * hWBaseboard.FracConvect) + (RadHeat * HWBaseboardDesignDataObject.FracDistribPerson); } hWBaseboard.WaterOutletEnthalpy = hWBaseboard.WaterInletEnthalpy - BBHeat / WaterMassFlowRate; } else { @@ -1376,7 +1373,7 @@ namespace HWBaseboardRadiator { RadHeat = 0.0; WaterMassFlowRate = 0.0; AirMassFlowRate = 0.0; - HWBaseboard(BaseboardNum).QBBRadSource = 0.0; + hWBaseboard.QBBRadSource = 0.0; hWBaseboard.WaterOutletEnthalpy = hWBaseboard.WaterInletEnthalpy; PlantUtilities::SetActuatedBranchFlowRate(state, WaterMassFlowRate, hWBaseboard.WaterInletNode, hWBaseboard.plantLoc, false); } @@ -1409,7 +1406,6 @@ namespace HWBaseboardRadiator { int WaterInletNode; int WaterOutletNode; auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); - Real64 const qBBRadSource = thisHWBB.QBBRadSource; if (state.dataGlobal->BeginEnvrnFlag && state.dataHWBaseboardRad->MyEnvrnFlag2) { state.dataHWBaseboardRad->Iter = 0; @@ -1513,7 +1509,7 @@ namespace HWBaseboardRadiator { auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); HWBaseboardDesignData const &HWBaseboardDesignDataObject = - state.dataHWBaseboardRad->HWBaseboardDesignObject(HWBaseboard.DesignObjectPtr); // Contains the data for the design object + state.dataHWBaseboardRad->HWBaseboardDesignObject(thisHWBB.DesignObjectPtr); // Contains the data for the design object int ZoneNum = thisHWBB.ZonePtr; if (ZoneNum <= 0) continue; state.dataHeatBalFanSys->ZoneQHWBaseboardToPerson(ZoneNum) += thisHWBB.QBBRadSource * HWBaseboardDesignDataObject.FracDistribPerson; @@ -1529,7 +1525,7 @@ namespace HWBaseboardRadiator { ShowSevereError(state, "DistributeBBRadGains: excessive thermal radiation heat flux intensity detected"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.EquipID)); + ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.Name)); ShowContinueError(state, format("Radiation intensity = {:.2R} [W/m2]", ThisSurfIntensity)); ShowContinueError(state, format("Assign a larger surface area or more surfaces in {}", cCMO_BBRadiator_Water)); ShowFatalError(state, "DistributeBBRadGains: excessive thermal radiation heat flux intensity detected"); @@ -1538,7 +1534,7 @@ namespace HWBaseboardRadiator { ShowSevereError(state, "DistributeBBRadGains: surface not large enough to receive thermal radiation heat flux"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.EquipID)); + ShowContinueError(state, format("Occurs in {} = {}", cCMO_BBRadiator_Water, thisHWBB.Name)); ShowContinueError(state, format("Assign a larger surface area or more surfaces in {}", cCMO_BBRadiator_Water)); ShowFatalError(state, "DistributeBBRadGains: surface not large enough to receive thermal radiation heat flux"); } From 0658c6255b7b54a80ac40869230a5ad585d52ff9 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 7 Jun 2023 07:15:56 -0500 Subject: [PATCH 007/161] Changes to Address Diffs and Fails Fixes a bug introduced in some of the changes that were made and tries to address one of the models that had significant differences in the output. --- src/EnergyPlus/HighTempRadiantSystem.cc | 15 +++++++-------- src/EnergyPlus/SteamBaseboardRadiator.cc | 11 ++++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index 1a0ae2d47ea..2e5010ad0f1 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -732,7 +732,7 @@ namespace HighTempRadiantSystem { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int ZoneNum; // Intermediate variable for keeping track of the zone number - int Loop; + int HTRnum; if (state.dataHighTempRadSys->firstTime) { state.dataHighTempRadSys->MySizeFlag.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, true); @@ -742,12 +742,12 @@ namespace HighTempRadiantSystem { // need to check all units to see if they are on Zone Equipment List or issue warning if (!state.dataHighTempRadSys->ZoneEquipmentListChecked && state.dataZoneEquip->ZoneEquipInputsFilled) { state.dataHighTempRadSys->ZoneEquipmentListChecked = true; - for (Loop = 1; Loop <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++Loop) { - if (CheckZoneEquipmentList(state, "ZoneHVAC:HighTemperatureRadiant", state.dataHighTempRadSys->HighTempRadSys(Loop).Name)) continue; + for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + if (CheckZoneEquipmentList(state, "ZoneHVAC:HighTemperatureRadiant", state.dataHighTempRadSys->HighTempRadSys(HTRnum).Name)) continue; ShowSevereError(state, format("InitHighTempRadiantSystem: Unit=[ZoneHVAC:HighTemperatureRadiant,{}] is not on any ZoneHVAC:EquipmentList. " "It will not be simulated.", - state.dataHighTempRadSys->HighTempRadSys(Loop).Name)); + state.dataHighTempRadSys->HighTempRadSys(HTRnum).Name)); } } @@ -761,14 +761,14 @@ namespace HighTempRadiantSystem { state.dataHighTempRadSys->MyEnvrnFlag = false; } if (!state.dataGlobal->BeginEnvrnFlag) { - for (int HTRnum = 1; state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { state.dataHighTempRadSys->HighTempRadSys(HTRnum).LastQHTRRadSrc = 0.0; } state.dataHighTempRadSys->MyEnvrnFlag = true; } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { // This is the first pass through in a particular time step - for (int HTRnum = 1; state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(HTRnum); ZoneNum = thisHTR.ZonePtr; thisHTR.ZeroHTRSourceSumHATsurf = @@ -1286,14 +1286,13 @@ namespace HighTempRadiantSystem { // If it was allocated, then we have to check to see if this was running at all... for (RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { + state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg; if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg != 0.0) { HighTempRadSysOn = true; break; // DO loop } } - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg; - DistributeHTRadGains( state); // state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource has been modified so we need to redistribute gains } diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index 2ec839b5478..93f29422333 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -1010,11 +1010,6 @@ namespace SteamBaseboardRadiator { state.dataLoopNodes->Node(SteamInletNode).Quality = 1.0; state.dataLoopNodes->Node(SteamInletNode).HumRat = 0.0; - state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = false; - } - - if (!state.dataGlobal->BeginEnvrnFlag) { - state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = true; // Initializes radiant sources state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZeroBBSteamSourceSumHATsurf = 0.0; state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = 0.0; @@ -1022,6 +1017,12 @@ namespace SteamBaseboardRadiator { state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastQBBSteamRadSrc = 0.0; state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastSysTimeElapsed = 0.0; state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).LastTimeStepSys = 0.0; + + state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = false; + } + + if (!state.dataGlobal->BeginEnvrnFlag) { + state.dataSteamBaseboardRadiator->MyEnvrnFlag(BaseboardNum) = true; } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { From 54bcdcd18879bb308fd1ccca7451a3ed17394738 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 7 Jun 2023 08:57:50 -0500 Subject: [PATCH 008/161] Another Round of Corrections Corrections made to address large differences in the results for several idfs and also to take care of some warning messages from the compiler. --- src/EnergyPlus/HighTempRadiantSystem.cc | 12 +++++++++--- src/EnergyPlus/HighTempRadiantSystem.hh | 6 +++--- src/EnergyPlus/SwimmingPool.cc | 11 +++++------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index 2e5010ad0f1..a816cc12ee0 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -758,12 +758,18 @@ namespace HighTempRadiantSystem { } if (state.dataGlobal->BeginEnvrnFlag && state.dataHighTempRadSys->MyEnvrnFlag) { + for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(HTRnum); + thisHTR.ZeroHTRSourceSumHATsurf = 0.0; + thisHTR.QHTRRadSource = 0.0; + thisHTR.QHTRRadSrcAvg = 0.0; + thisHTR.LastQHTRRadSrc = 0.0; + thisHTR.LastSysTimeElapsed = 0.0; + thisHTR.LastTimeStepSys = 0.0; + } state.dataHighTempRadSys->MyEnvrnFlag = false; } if (!state.dataGlobal->BeginEnvrnFlag) { - for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { - state.dataHighTempRadSys->HighTempRadSys(HTRnum).LastQHTRRadSrc = 0.0; - } state.dataHighTempRadSys->MyEnvrnFlag = true; } diff --git a/src/EnergyPlus/HighTempRadiantSystem.hh b/src/EnergyPlus/HighTempRadiantSystem.hh index 302056d482e..6f7d836b1ba 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.hh +++ b/src/EnergyPlus/HighTempRadiantSystem.hh @@ -146,9 +146,9 @@ namespace HighTempRadiantSystem { HighTempRadiantSystemData() : SchedPtr(0), ZonePtr(0), HeaterType(RadHeaterType::Invalid), MaxPowerCapac(0.0), CombustionEffic(0.0), FracRadiant(0.0), FracLatent(0.0), FracLost(0.0), FracConvect(0.0), ControlType(RadControlType::Invalid), ThrottlRange(0.0), SetptSchedPtr(0), - FracDistribPerson(0.0), TotSurfToDistrib(0), ElecPower(0.0), ElecEnergy(0.0), GasPower(0.0), GasEnergy(0.0), HeatPower(0.0), - HeatEnergy(0.0), HeatingCapMethod(0), ZeroHTRSourceSumHATsurf(0.0), QHTRRadSource(0.0), QHTRRadSrcAvg(0.0), LastSysTimeElapsed(0.0), - LastTimeStepSys(0.0), LastQHTRRadSrc(0.0), ScaledHeatingCapacity(0.0) + FracDistribPerson(0.0), TotSurfToDistrib(0), ZeroHTRSourceSumHATsurf(0.0), QHTRRadSource(0.0), QHTRRadSrcAvg(0.0), + LastSysTimeElapsed(0.0), LastTimeStepSys(0.0), LastQHTRRadSrc(0.0), ElecPower(0.0), ElecEnergy(0.0), GasPower(0.0), GasEnergy(0.0), + HeatPower(0.0), HeatEnergy(0.0), HeatingCapMethod(0), ScaledHeatingCapacity(0.0) { } }; diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index 7bf1af0aeb0..2f0c4a613c4 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -517,12 +517,11 @@ void SwimmingPoolData::initialize(EnergyPlusData &state, bool const FirstHVACIte int ZoneNum = this->ZonePtr; this->ZeroPoolSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what the impact of the swimming pool on all zone surfaces - int SurfNum = this->SurfacePtr; - this->QPoolSrcAvg = 0.0; // Initialize this variable to zero (pool parameters "off") - this->HeatTransCoefsAvg = 0.0; // Initialize this variable to zero (pool parameters "off") - this->LastQPoolSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again - this->LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again - this->LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->QPoolSrcAvg = 0.0; // Initialize this variable to zero (pool parameters "off") + this->HeatTransCoefsAvg = 0.0; // Initialize this variable to zero (pool parameters "off") + this->LastQPoolSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + this->LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } // initialize the flow rate for the component on the plant side (this follows standard procedure for other components like low temperature From 2b2d4380057ba014b607eb7ef3482362bf076830 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 7 Jun 2023 10:38:55 -0500 Subject: [PATCH 009/161] Correction of Source to Avg Assignment Rewrite potentially lost some data transfer when one high temperature radiant heater was on--it broke out of the for loop and missed the remaining assignments. This is corrected here. --- src/EnergyPlus/HighTempRadiantSystem.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index a816cc12ee0..ee039843701 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -1292,11 +1292,9 @@ namespace HighTempRadiantSystem { // If it was allocated, then we have to check to see if this was running at all... for (RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg; - if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSrcAvg != 0.0) { - HighTempRadSysOn = true; - break; // DO loop - } + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + thisHTR.QHTRRadSource = thisHTR.QHTRRadSrcAvg; + if (thisHTR.QHTRRadSrcAvg != 0.0) HighTempRadSysOn = true; } DistributeHTRadGains( From 9635292980f96603698371f2b30d57f6ba698bad Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 8 Jun 2023 06:06:32 -0500 Subject: [PATCH 010/161] Clean up swimming pool Cudos to @rraustad for catching this before it became a new bug. --- src/EnergyPlus/SwimmingPool.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index 2f0c4a613c4..b1d7ef308a5 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -1045,16 +1045,11 @@ void UpdatePoolSourceValAvg(EnergyPlusData &state, bool &SwimmingPoolOn) // .TRU if (state.dataSwimmingPools->NumSwimmingPools == 0) return; for (int PoolNum = 1; PoolNum <= state.dataSwimmingPools->NumSwimmingPools; ++PoolNum) { - // Check to see if any of the pools were running at all - for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { - if (state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg != 0.0) { - SwimmingPoolOn = true; - break; // DO loop - } - } - - state.dataHeatBalFanSys->QPoolSurfNumerator = state.dataSwimmingPools->Pool(PoolNum).QPoolSrcAvg; - state.dataHeatBalFanSys->PoolHeatTransCoefs = state.dataSwimmingPools->Pool(PoolNum).HeatTransCoefsAvg; + auto &thisPool = state.dataSwimmingPools->Pool(PoolNum); + if (thisPool.QPoolSrcAvg != 0.0) SwimmingPoolOn = true; + int SurfNum = thisPool.SurfacePtr; // surface number index + state.dataHeatBalFanSys->QPoolSurfNumerator(SurfNum) = thisPool.QPoolSrcAvg; + state.dataHeatBalFanSys->PoolHeatTransCoefs(SurfNum) = thisPool.HeatTransCoefsAvg; } // For interzone surfaces, modQPoolSrcAvg was only updated for the "active" side. The active side From d85c707ed6e5af6f61906ed1ff4980f68e12402a Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 8 Jun 2023 11:00:23 -0500 Subject: [PATCH 011/161] Correction to HTR Got overly aggressive with a change, this impacted some initializations in the high temperature radiant heater (HTR). --- src/EnergyPlus/HighTempRadiantSystem.cc | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index ee039843701..5566925f861 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -774,17 +774,15 @@ namespace HighTempRadiantSystem { } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { // This is the first pass through in a particular time step - for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { - auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(HTRnum); - ZoneNum = thisHTR.ZonePtr; - thisHTR.ZeroHTRSourceSumHATsurf = - state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets - thisHTR.QHTRRadSource = 0.0; // Initialize this variable to zero (radiant system defaults to off) - thisHTR.QHTRRadSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) - thisHTR.LastQHTRRadSrc = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again - thisHTR.LastSysTimeElapsed = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again - thisHTR.LastTimeStepSys = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again - } + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + ZoneNum = thisHTR.ZonePtr; + thisHTR.ZeroHTRSourceSumHATsurf = + state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets + thisHTR.QHTRRadSource = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisHTR.QHTRRadSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisHTR.LastQHTRRadSrc = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + thisHTR.LastSysTimeElapsed = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again + thisHTR.LastTimeStepSys = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again } } From f41547b625b603c46e7ae0b1fbe54ec42ff3deb7 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 9 Jun 2023 08:58:26 -0500 Subject: [PATCH 012/161] Swimming Pool Unit Test and Steam Baseboard Fix Fixed some issues with the swimming pool and the steam baseboard that caused problems in the runs. --- src/EnergyPlus/SteamBaseboardRadiator.cc | 10 ++-- tst/EnergyPlus/unit/SwimmingPool.unit.cc | 67 +++++++++++------------- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index 93f29422333..6a3275352d1 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -1484,15 +1484,11 @@ namespace SteamBaseboardRadiator { // If it was allocated, then we have to check to see if this was running at all... for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) { - if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg != 0.0) { - SteamBaseboardSysOn = true; - break; // DO loop - } + if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg != 0.0) SteamBaseboardSysOn = true; + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg; } - state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSource = - state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).QBBSteamRadSrcAvg; - DistributeBBSteamRadGains(state); // QBBSteamRadSource has been modified so we need to redistribute gains } diff --git a/tst/EnergyPlus/unit/SwimmingPool.unit.cc b/tst/EnergyPlus/unit/SwimmingPool.unit.cc index 8346745f0cf..bcdd188bd9c 100644 --- a/tst/EnergyPlus/unit/SwimmingPool.unit.cc +++ b/tst/EnergyPlus/unit/SwimmingPool.unit.cc @@ -374,10 +374,6 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) SurfData->TotSurfaces = 2; SurfData->Surface.allocate(SurfData->TotSurfaces); - for (int poolNum = 1; poolNum <= PoolData->NumSwimmingPools; ++poolNum) { - PoolData->Pool(poolNum).QPoolSrcAvg.allocate(SurfData->TotSurfaces); - PoolData->Pool(poolNum).HeatTransCoefsAvg.allocate(SurfData->TotSurfaces); - } Real64 noResult = -9999.0; HBFanData->QPoolSurfNumerator.allocate(SurfData->TotSurfaces); @@ -385,9 +381,10 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) HBFanData->PoolHeatTransCoefs.allocate(SurfData->TotSurfaces); HBFanData->PoolHeatTransCoefs = noResult; - for (int surfNum = 1; surfNum <= SurfData->TotSurfaces; ++surfNum) { - SurfData->Surface(surfNum).ExtBoundCond = 0; // All connected to exterior - } + SurfData->Surface(1).ExtBoundCond = 0; // All connected to exterior + SurfData->Surface(2).ExtBoundCond = 0; // All connected to exterior + Pool1Data.SurfacePtr = 1; + Pool2Data.SurfacePtr = 2; // Test 1: both pools off Pool1Data.QPoolSrcAvg = 0.0; @@ -401,16 +398,16 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) // Test data transfer EXPECT_FALSE(poolOnFlag); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), noResult, closeEnough); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), noResult, closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), noResult, closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), noResult, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), 0.0, closeEnough); // Test 2a: pool 1 on, pool 2 off - Pool1Data.QPoolSrcAvg(1) = 100.0; - Pool1Data.HeatTransCoefsAvg(1) = 10.0; - Pool2Data.QPoolSrcAvg(2) = 0.0; - Pool2Data.HeatTransCoefsAvg(2) = 0.0; + Pool1Data.QPoolSrcAvg = 100.0; + Pool1Data.HeatTransCoefsAvg = 10.0; + Pool2Data.QPoolSrcAvg = 0.0; + Pool2Data.HeatTransCoefsAvg = 0.0; HBFanData->QPoolSurfNumerator = noResult; HBFanData->PoolHeatTransCoefs = noResult; @@ -420,16 +417,16 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) // Test data transfer EXPECT_TRUE(poolOnFlag); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg(1), closeEnough); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), noResult, closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg(1), closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), noResult, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), 0.0, closeEnough); // Test 2b: pool 1 off, pool 2 on - Pool1Data.QPoolSrcAvg(1) = 0.0; - Pool1Data.HeatTransCoefsAvg(1) = 0.0; - Pool2Data.QPoolSrcAvg(2) = 200.0; - Pool2Data.HeatTransCoefsAvg(2) = 20.0; + Pool1Data.QPoolSrcAvg = 0.0; + Pool1Data.HeatTransCoefsAvg = 0.0; + Pool2Data.QPoolSrcAvg = 200.0; + Pool2Data.HeatTransCoefsAvg = 20.0; HBFanData->QPoolSurfNumerator = noResult; HBFanData->PoolHeatTransCoefs = noResult; @@ -439,16 +436,16 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) // Test data transfer EXPECT_TRUE(poolOnFlag); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), noResult, closeEnough); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg(2), closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), noResult, closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg(2), closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), 0.0, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg, closeEnough); // Test 3: both pools on - Pool1Data.QPoolSrcAvg(1) = 100.0; - Pool1Data.HeatTransCoefsAvg(1) = 10.0; - Pool2Data.QPoolSrcAvg(2) = 200.0; - Pool2Data.HeatTransCoefsAvg(2) = 20.0; + Pool1Data.QPoolSrcAvg = 100.0; + Pool1Data.HeatTransCoefsAvg = 10.0; + Pool2Data.QPoolSrcAvg = 200.0; + Pool2Data.HeatTransCoefsAvg = 20.0; HBFanData->QPoolSurfNumerator = noResult; HBFanData->PoolHeatTransCoefs = noResult; @@ -458,8 +455,8 @@ TEST_F(EnergyPlusFixture, SwimmingPool_MultiplePoolUpdatePoolSourceValAvgTest) // Test data transfer EXPECT_TRUE(poolOnFlag); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg(1), closeEnough); - EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg(2), closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg(1), closeEnough); - EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg(2), closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(1), Pool1Data.QPoolSrcAvg, closeEnough); + EXPECT_NEAR(HBFanData->QPoolSurfNumerator(2), Pool2Data.QPoolSrcAvg, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(1), Pool1Data.HeatTransCoefsAvg, closeEnough); + EXPECT_NEAR(HBFanData->PoolHeatTransCoefs(2), Pool2Data.HeatTransCoefsAvg, closeEnough); } From 66094ffd55ecbaebfa9674141cc36acbf91aff7c Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 14 Jun 2023 15:31:03 -0500 Subject: [PATCH 013/161] Additional changes to certain models Additional changes specific to models that impact the surface heat balances, requiring a slightly different approach. --- src/EnergyPlus/LowTempRadiantSystem.cc | 151 +++++++++++++++---------- src/EnergyPlus/LowTempRadiantSystem.hh | 15 +-- src/EnergyPlus/VentilatedSlab.cc | 56 ++++----- src/EnergyPlus/VentilatedSlab.hh | 30 +++-- 4 files changed, 132 insertions(+), 120 deletions(-) diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 49123698a17..5cc0838af56 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -1972,10 +1972,27 @@ namespace LowTempRadiantSystem { if (state.dataLowTempRadSys->FirstTimeInit) { - state.dataLowTempRadSys->QRadSysSrcAvg.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataLowTempRadSys->LastQRadSysSrc.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataLowTempRadSys->LastSysTimeElapsed.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataLowTempRadSys->LastTimeStepSys.dimension(state.dataSurface->TotSurfaces, 0.0); + for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++RadNum) { + auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(RadNum); + thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + } + for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { + auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(RadNum); + thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + } + for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++RadNum) { + auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(RadNum); + thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + } state.dataLowTempRadSys->MySizeFlagHydr.allocate(state.dataLowTempRadSys->NumOfHydrLowTempRadSys); state.dataLowTempRadSys->MySizeFlagCFlo.allocate(state.dataLowTempRadSys->NumOfCFloLowTempRadSys); state.dataLowTempRadSys->MySizeFlagElec.allocate(state.dataLowTempRadSys->NumOfElecLowTempRadSys); @@ -2276,16 +2293,27 @@ namespace LowTempRadiantSystem { if (state.dataGlobal->BeginEnvrnFlag && state.dataLowTempRadSys->MyEnvrnFlagGeneral) { if (SystemType == LowTempRadiantSystem::SystemType::HydronicSystem) { - state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = 0.0; + thisLTR.QRadSysSrcAvg = 0.0; + thisLTR.LastQRadSysSrc = 0.0; + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } else if (SystemType == LowTempRadiantSystem::SystemType::ConstantFlowSystem) { - state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = 0.0; + thisLTR.QRadSysSrcAvg = 0.0; + thisLTR.LastQRadSysSrc = 0.0; + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } else if (SystemType == LowTempRadiantSystem::SystemType::ElectricSystem) { - state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = 0.0; + auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = 0.0; + thisLTR.QRadSysSrcAvg = 0.0; + thisLTR.LastQRadSysSrc = 0.0; + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } - state.dataLowTempRadSys->QRadSysSrcAvg = 0.0; - state.dataLowTempRadSys->LastQRadSysSrc = 0.0; - state.dataLowTempRadSys->LastSysTimeElapsed = 0.0; - state.dataLowTempRadSys->LastTimeStepSys = 0.0; state.dataLowTempRadSys->MyEnvrnFlagGeneral = false; } if (!state.dataGlobal->BeginEnvrnFlag) state.dataLowTempRadSys->MyEnvrnFlagGeneral = true; @@ -2432,48 +2460,33 @@ namespace LowTempRadiantSystem { switch (SystemType) { case LowTempRadiantSystem::SystemType::HydronicSystem: { ZoneNum = state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->HydrRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = + auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets - for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->HydrRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { - SurfNum = state.dataLowTempRadSys->HydrRadSys(RadSysNum).SurfacePtr(RadSurfNum); - state.dataLowTempRadSys->QRadSysSrcAvg(SurfNum) = 0.0; // Initialize this variable to zero (radiant system defaults to off) - state.dataLowTempRadSys->LastQRadSysSrc(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastSysTimeElapsed(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastTimeStepSys(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - } + thisLTR.QRadSysSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisLTR.LastQRadSysSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } } break; case LowTempRadiantSystem::SystemType::ConstantFlowSystem: { ZoneNum = state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->CFloRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = + auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets - for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->CFloRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { - SurfNum = state.dataLowTempRadSys->CFloRadSys(RadSysNum).SurfacePtr(RadSurfNum); - state.dataLowTempRadSys->QRadSysSrcAvg(SurfNum) = 0.0; // Initialize this variable to zero (radiant system defaults to off) - state.dataLowTempRadSys->LastQRadSysSrc(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastSysTimeElapsed(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastTimeStepSys(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - } + thisLTR.QRadSysSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisLTR.LastQRadSysSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } } break; case LowTempRadiantSystem::SystemType::ElectricSystem: { ZoneNum = state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZonePtr; - state.dataLowTempRadSys->ElecRadSys(RadSysNum).ZeroLTRSourceSumHATsurf = + auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(RadSysNum); + thisLTR.ZeroLTRSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets - for (RadSurfNum = 1; RadSurfNum <= state.dataLowTempRadSys->ElecRadSys(RadSysNum).NumOfSurfaces; ++RadSurfNum) { - SurfNum = state.dataLowTempRadSys->ElecRadSys(RadSysNum).SurfacePtr(RadSurfNum); - state.dataLowTempRadSys->QRadSysSrcAvg(SurfNum) = 0.0; // Initialize this variable to zero (radiant system defaults to off) - state.dataLowTempRadSys->LastQRadSysSrc(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastSysTimeElapsed(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataLowTempRadSys->LastTimeStepSys(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - } + thisLTR.QRadSysSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisLTR.LastQRadSysSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + thisLTR.LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } } break; default: { ShowSevereError(state, "Radiant system entered without specification of type: electric, constant flow, or hydronic?"); @@ -5355,25 +5368,24 @@ namespace LowTempRadiantSystem { Real64 TimeStepSys = state.dataHVACGlobal->TimeStepSys; Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; + Real64 TimeStepZone = state.dataGlobal->TimeStepZone; for (int radSurfNum = 1; radSurfNum <= this->NumOfSurfaces; ++radSurfNum) { int surfNum = this->SurfacePtr(radSurfNum); - if (state.dataLowTempRadSys->LastSysTimeElapsed(surfNum) == SysTimeElapsed) { + if (this->LastSysTimeElapsed(radSurfNum) == SysTimeElapsed) { // Still iterating or reducing system time step, so subtract old values which were // not valid - state.dataLowTempRadSys->QRadSysSrcAvg(surfNum) -= state.dataLowTempRadSys->LastQRadSysSrc(surfNum) * - state.dataLowTempRadSys->LastTimeStepSys(surfNum) / state.dataGlobal->TimeStepZone; + this->QRadSysSrcAvg(radSurfNum) -= this->LastQRadSysSrc(radSurfNum) * this->LastTimeStepSys(radSurfNum) / TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - state.dataLowTempRadSys->QRadSysSrcAvg(surfNum) += - state.dataHeatBalFanSys->QRadSysSource(surfNum) * TimeStepSys / state.dataGlobal->TimeStepZone; + this->QRadSysSrcAvg(radSurfNum) += state.dataHeatBalFanSys->QRadSysSource(surfNum) * TimeStepSys / TimeStepZone; - state.dataLowTempRadSys->LastQRadSysSrc(surfNum) = state.dataHeatBalFanSys->QRadSysSource(surfNum); - state.dataLowTempRadSys->LastSysTimeElapsed(surfNum) = SysTimeElapsed; - state.dataLowTempRadSys->LastTimeStepSys(surfNum) = TimeStepSys; + this->LastQRadSysSrc(radSurfNum) = state.dataHeatBalFanSys->QRadSysSource(surfNum); + this->LastSysTimeElapsed(radSurfNum) = SysTimeElapsed; + this->LastTimeStepSys(radSurfNum) = TimeStepSys; } } @@ -5930,22 +5942,39 @@ namespace LowTempRadiantSystem { LowTempRadSysOn = false; - // If this was never allocated, then there are no radiant systems in this input file (just RETURN) - if (!allocated(state.dataLowTempRadSys->QRadSysSrcAvg)) return; + // If there are no radiant systems in this input file, just RETURN + if (state.dataLowTempRadSys->TotalNumOfRadSystems == 0) return; // If it was allocated, then we have to check to see if this was running at all... - for (SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { - if (state.dataLowTempRadSys->QRadSysSrcAvg(SurfNum) != 0.0) { - LowTempRadSysOn = true; - break; // DO loop + for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) { + auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(numRadSys); + for (int numRadSurf = 1; numRadSurf <= thisLTR.NumOfSurfaces; ++numRadSurf) { + if (thisLTR.QRadSysSrcAvg(numRadSurf) != 0.0) LowTempRadSysOn = true; + SurfNum = thisLTR.SurfacePtr(numRadSurf); + state.dataHeatBalFanSys->QRadSysSource(SurfNum) = thisLTR.QRadSysSrcAvg(numRadSurf); + } + } + for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++numRadSys) { + auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(numRadSys); + for (int numRadSurf = 1; numRadSurf <= thisLTR.NumOfSurfaces; ++numRadSurf) { + if (thisLTR.QRadSysSrcAvg(numRadSurf) != 0.0) LowTempRadSysOn = true; + SurfNum = thisLTR.SurfacePtr(numRadSurf); + state.dataHeatBalFanSys->QRadSysSource(SurfNum) = thisLTR.QRadSysSrcAvg(numRadSurf); + } + } + for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++numRadSys) { + auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(numRadSys); + for (int numRadSurf = 1; numRadSurf <= thisLTR.NumOfSurfaces; ++numRadSurf) { + if (thisLTR.QRadSysSrcAvg(numRadSurf) != 0.0) LowTempRadSysOn = true; + SurfNum = thisLTR.SurfacePtr(numRadSurf); + state.dataHeatBalFanSys->QRadSysSource(SurfNum) = thisLTR.QRadSysSrcAvg(numRadSurf); } } - state.dataHeatBalFanSys->QRadSysSource = state.dataLowTempRadSys->QRadSysSrcAvg; auto &Surface = state.dataSurface->Surface; - // For interzone surfaces, QRadSysSrcAvg was only updated for the "active" side. The active side - // would have a non-zero value at this point. If the numbers differ, then we have to manually update. + // For interzone surfaces, QRadSysSource was only updated for the "active" side. The + // active side would have a non-zero value at this point. If the numbers differ, then we have to manually update. for (SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { if (Surface(SurfNum).ExtBoundCond > 0 && Surface(SurfNum).ExtBoundCond != SurfNum) { if (std::abs(state.dataHeatBalFanSys->QRadSysSource(SurfNum) - diff --git a/src/EnergyPlus/LowTempRadiantSystem.hh b/src/EnergyPlus/LowTempRadiantSystem.hh index cbadab4f327..f3679c86d8a 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.hh +++ b/src/EnergyPlus/LowTempRadiantSystem.hh @@ -151,6 +151,11 @@ namespace LowTempRadiantSystem { Array1D SurfaceFrac; // Fraction of flow/pipe length or electric power for a particular surface Real64 TotalSurfaceArea = 0.0; // Total surface area for all surfaces that are part of this radiant system Real64 ZeroLTRSourceSumHATsurf = 0.0; // Equal to SumHATsurf for all the walls in a zone with no source + Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surface + // Record keeping variables used to calculate QRadSysSrcAvg locally + Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating + Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating LowTempRadiantControlTypes controlType = LowTempRadiantControlTypes::MATControl; // Control type for the system (MAT, MRT, Op temp, ODB, OWB, // Surface Face Temp, Surface Interior Temp, Running Mean // Temp for Constant Flow systems only) @@ -568,12 +573,6 @@ struct LowTempRadiantSystemData : BaseGlobalStruct Real64 LowTempHeating = -200.0; // Used to indicate that a user does not have a heating control temperature Real64 HighTempCooling = 200.0; // Used to indicate that a user does not have a cooling control temperature - Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surface - // Record keeping variables used to calculate QRadSysSrcAvg locally - Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating - Array1D Ckj; // Coefficients for individual surfaces within a radiant system Array1D Cmj; Array1D WaterTempOut; // Array of outlet water temperatures for @@ -629,10 +628,6 @@ struct LowTempRadiantSystemData : BaseGlobalStruct warnTooHigh = false; // - QRadSysSrcAvg.clear(); - LastQRadSysSrc.clear(); - LastSysTimeElapsed.clear(); - LastTimeStepSys.clear(); Ckj.clear(); Cmj.clear(); WaterTempOut.clear(); diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 70f550e3b7f..b191dda3d77 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1539,18 +1539,19 @@ namespace VentilatedSlab { state.dataVentilatedSlab->MySizeFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); state.dataVentilatedSlab->MyPlantScanFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); state.dataVentilatedSlab->MyZoneEqFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); - state.dataVentilatedSlab->QRadSysSrcAvg.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataVentilatedSlab->LastQRadSysSrc.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataVentilatedSlab->LastSysTimeElapsed.dimension(state.dataSurface->TotSurfaces, 0.0); - state.dataVentilatedSlab->LastTimeStepSys.dimension(state.dataSurface->TotSurfaces, 0.0); - // Initialize total areas for all radiant systems + // Initialize total areas for all radiant systems and dimension record keeping arrays for (RadNum = 1; RadNum <= state.dataVentilatedSlab->NumOfVentSlabs; ++RadNum) { state.dataVentilatedSlab->VentSlab(RadNum).TotalSurfaceArea = 0.0; - for (SurfNum = 1; SurfNum <= state.dataVentilatedSlab->VentSlab(RadNum).NumOfSurfaces; ++SurfNum) { - state.dataVentilatedSlab->VentSlab(RadNum).TotalSurfaceArea += - state.dataSurface->Surface(state.dataVentilatedSlab->VentSlab(RadNum).SurfacePtr(SurfNum)).Area; + auto &numRadSurfs = state.dataVentilatedSlab->VentSlab(RadNum).NumOfSurfaces; + auto &thisVentSlab = state.dataVentilatedSlab->VentSlab(RadNum); + for (SurfNum = 1; SurfNum <= numRadSurfs; ++SurfNum) { + thisVentSlab.TotalSurfaceArea += state.dataSurface->Surface(thisVentSlab.SurfacePtr(SurfNum)).Area; } + thisVentSlab.QRadSysSrcAvg.dimension(numRadSurfs, 0.0); + thisVentSlab.LastQRadSysSrc.dimension(numRadSurfs, 0.0); + thisVentSlab.LastSysTimeElapsed.dimension(numRadSurfs, 0.0); + thisVentSlab.LastTimeStepSys.dimension(numRadSurfs, 0.0); } state.dataVentilatedSlab->MyEnvrnFlag = true; state.dataVentilatedSlab->MySizeFlag = true; @@ -1629,11 +1630,6 @@ namespace VentilatedSlab { OutsideAirNode = ventSlab.OutsideAirNode; RhoAir = state.dataEnvrn->StdRhoAir; - // "Radiant" Source Part - state.dataVentilatedSlab->QRadSysSrcAvg = 0.0; - state.dataVentilatedSlab->LastQRadSysSrc = 0.0; - state.dataVentilatedSlab->LastSysTimeElapsed = 0.0; - state.dataVentilatedSlab->LastTimeStepSys = 0.0; if (state.dataVentilatedSlab->NumOfVentSlabs > 0) { for (auto &e : state.dataVentilatedSlab->VentSlab) { e.ZeroVentSlabSourceSumHATsurf = 0.0; @@ -1641,6 +1637,10 @@ namespace VentilatedSlab { e.RadHeatingEnergy = 0.0; e.RadCoolingPower = 0.0; e.RadCoolingEnergy = 0.0; + e.QRadSysSrcAvg = 0.0; + e.LastQRadSysSrc = 0.0; + e.LastSysTimeElapsed = 0.0; + e.LastTimeStepSys = 0.0; } } @@ -1768,16 +1768,10 @@ namespace VentilatedSlab { ZoneNum = ventSlab.ZonePtr; ventSlab.ZeroVentSlabSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure what part of the load the radiant system meets - for (RadSurfNum = 1; RadSurfNum <= ventSlab.NumOfSurfaces; ++RadSurfNum) { - SurfNum = ventSlab.SurfacePtr(RadSurfNum); - state.dataVentilatedSlab->QRadSysSrcAvg(SurfNum) = 0.0; // Initialize this variable to zero (radiant system defaults to off) - state.dataVentilatedSlab->LastQRadSysSrc(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataVentilatedSlab->LastSysTimeElapsed(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - state.dataVentilatedSlab->LastTimeStepSys(SurfNum) = - 0.0; // At the start of a time step, reset to zero so average calculation can begin again - } + ventSlab.QRadSysSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + ventSlab.LastQRadSysSrc = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + ventSlab.LastSysTimeElapsed = 0.0; // At the start of a time step, reset to zero so average calculation can begin again + ventSlab.LastTimeStepSys = 0.0; // At the start of a time step, reset to zero so average calculation can begin again } } @@ -4480,21 +4474,19 @@ namespace VentilatedSlab { SurfNum = ventSlab.SurfacePtr(RadSurfNum); - if (state.dataVentilatedSlab->LastSysTimeElapsed(SurfNum) == SysTimeElapsed) { + if (ventSlab.LastSysTimeElapsed(RadSurfNum) == SysTimeElapsed) { // Still iterating or reducing system time step, so subtract old values which were // not valid - state.dataVentilatedSlab->QRadSysSrcAvg(SurfNum) -= state.dataVentilatedSlab->LastQRadSysSrc(SurfNum) * - state.dataVentilatedSlab->LastTimeStepSys(SurfNum) / - state.dataGlobal->TimeStepZone; + ventSlab.QRadSysSrcAvg(RadSurfNum) -= + ventSlab.LastQRadSysSrc(RadSurfNum) * ventSlab.LastTimeStepSys(RadSurfNum) / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables - state.dataVentilatedSlab->QRadSysSrcAvg(SurfNum) += - state.dataHeatBalFanSys->QRadSysSource(SurfNum) * TimeStepSys / state.dataGlobal->TimeStepZone; + ventSlab.QRadSysSrcAvg(RadSurfNum) += state.dataHeatBalFanSys->QRadSysSource(SurfNum) * TimeStepSys / state.dataGlobal->TimeStepZone; - state.dataVentilatedSlab->LastQRadSysSrc(SurfNum) = state.dataHeatBalFanSys->QRadSysSource(SurfNum); - state.dataVentilatedSlab->LastSysTimeElapsed(SurfNum) = SysTimeElapsed; - state.dataVentilatedSlab->LastTimeStepSys(SurfNum) = TimeStepSys; + ventSlab.LastQRadSysSrc(RadSurfNum) = state.dataHeatBalFanSys->QRadSysSource(SurfNum); + ventSlab.LastSysTimeElapsed(RadSurfNum) = SysTimeElapsed; + ventSlab.LastTimeStepSys(RadSurfNum) = TimeStepSys; } // First sum up all of the heat sources/sinks associated with this system diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index c33c9a02759..bd329a21817 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -276,6 +276,11 @@ namespace VentilatedSlab { int HVACSizingIndex; // index of a HVACSizing object for a ventilator slab bool FirstPass; // detects first time through for resetting sizing data Real64 ZeroVentSlabSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source + Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surfaceD + // Record keeping variables used to calculate QRadSysSrcAvg locally + Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating + Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating // Default Constructor VentilatedSlabData() @@ -298,7 +303,8 @@ namespace VentilatedSlab { RadHeatingEnergy(0.0), RadCoolingPower(0.0), RadCoolingEnergy(0.0), HeatCoilPower(0.0), HeatCoilEnergy(0.0), TotCoolCoilPower(0.0), TotCoolCoilEnergy(0.0), SensCoolCoilPower(0.0), SensCoolCoilEnergy(0.0), LateCoolCoilPower(0.0), LateCoolCoilEnergy(0.0), ElecFanPower(0.0), ElecFanEnergy(0.0), AirMassFlowRate(0.0), AirVolFlow(0.0), SlabInTemp(0.0), SlabOutTemp(0.0), ReturnAirTemp(0.0), - FanOutletTemp(0.0), ZoneInletTemp(0.0), AvailStatus(0), HVACSizingIndex(0), FirstPass(true), ZeroVentSlabSourceSumHATsurf(0.0) + FanOutletTemp(0.0), ZoneInletTemp(0.0), AvailStatus(0), HVACSizingIndex(0), FirstPass(true), ZeroVentSlabSourceSumHATsurf(0.0), + QRadSysSrcAvg(0.0), LastQRadSysSrc(0.0), LastSysTimeElapsed(0.0), LastTimeStepSys(0.0) { } }; @@ -387,18 +393,12 @@ struct VentilatedSlabData : BaseGlobalStruct int OperatingMode = 0; // Used to keep track of whether system is in heating or cooling mode // MODULE VARIABLE DECLARATIONS: - bool HCoilOn = false; // TRUE if the heating coil (gas or electric especially) should be running - int NumOfVentSlabs = 0; // Number of ventilated slab in the input file - Real64 OAMassFlowRate = 0.0; // Outside air mass flow rate for the ventilated slab - Array1D_double QRadSysSrcAvg; // Average source over the time step for a particular radiant surfaceD - int MaxCloNumOfSurfaces = 0; // Used to set allocate size in CalcClo routine - Real64 QZnReq = 0.0; // heating or cooling needed by system [watts] - - // Record keeping variables used to calculate QRadSysSrcAvg locally - - Array1D_double LastQRadSysSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating + bool HCoilOn = false; // TRUE if the heating coil (gas or electric especially) should be running + int NumOfVentSlabs = 0; // Number of ventilated slab in the input file + Real64 OAMassFlowRate = 0.0; // Outside air mass flow rate for the ventilated slab + int MaxCloNumOfSurfaces = 0; // Used to set allocate size in CalcClo routine + Real64 QZnReq = 0.0; // heating or cooling needed by system [watts] + Array1D_bool CheckEquipName; // Autosizing variables @@ -430,10 +430,6 @@ struct VentilatedSlabData : BaseGlobalStruct this->OAMassFlowRate = 0.0; this->MaxCloNumOfSurfaces = 0; this->QZnReq = 0.0; - this->QRadSysSrcAvg.deallocate(); - this->LastQRadSysSrc.deallocate(); - this->LastSysTimeElapsed.deallocate(); - this->LastTimeStepSys.deallocate(); this->CheckEquipName.deallocate(); this->MySizeFlag.deallocate(); this->VentSlab.deallocate(); From 52f992d4bc2a8e7ea0f2c27706011f2a5f33e94b Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 15 Jun 2023 07:23:39 -0500 Subject: [PATCH 014/161] Minor updates Got rid of unused variables causing warnings and made another initialization to make sure just is not being left around in an array. --- src/EnergyPlus/LowTempRadiantSystem.cc | 8 +++++--- src/EnergyPlus/VentilatedSlab.cc | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 5cc0838af56..e080aa206dd 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -1943,7 +1943,6 @@ namespace LowTempRadiantSystem { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 CurrentFlowSchedule; // Schedule value for flow fraction in a constant flow radiant system int RadNum; // Number of the radiant system (DO loop counter) - int RadSurfNum; // Number of the radiant system surface (DO loop counter) int SurfNum; // Intermediate variable for keeping track of the surface number Real64 TotalEffic; // Intermediate calculation variable for total pump efficiency int ZoneNum; // Intermediate variable for keeping track of the zone number @@ -5945,8 +5944,11 @@ namespace LowTempRadiantSystem { // If there are no radiant systems in this input file, just RETURN if (state.dataLowTempRadSys->TotalNumOfRadSystems == 0) return; - // If it was allocated, then we have to check to see if this was running at all... - for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) { + // Now check to see if anything is running and transfer information from the "average" variables to + // the array that will be used within the heat balance. + state.dataHeatBalFanSys->QRadSysSource = 0.0 // Zero this out first + for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) + { auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(numRadSys); for (int numRadSurf = 1; numRadSurf <= thisLTR.NumOfSurfaces; ++numRadSurf) { if (thisLTR.QRadSysSrcAvg(numRadSurf) != 0.0) LowTempRadSysOn = true; diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index b191dda3d77..00d7ce4d95a 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1515,7 +1515,6 @@ namespace VentilatedSlab { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int RadNum; // Number of the radiant system (DO loop counter) - int RadSurfNum; // Number of the radiant system surface (DO loop counter) int SurfNum; // Intermediate variable for keeping track of the surface number int ZoneNum; // Intermediate variable for keeping track of the zone number int AirRelNode; // relief air node number in Ventilated Slab loop From 865da70db606bcfbb5c88bd60ac36e9c32c7c6c2 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 15 Jun 2023 07:28:54 -0500 Subject: [PATCH 015/161] Minor typo fix No comment. --- src/EnergyPlus/LowTempRadiantSystem.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index e080aa206dd..a090ed654a6 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -5946,7 +5946,7 @@ namespace LowTempRadiantSystem { // Now check to see if anything is running and transfer information from the "average" variables to // the array that will be used within the heat balance. - state.dataHeatBalFanSys->QRadSysSource = 0.0 // Zero this out first + state.dataHeatBalFanSys->QRadSysSource = 0.0; // Zero this out first for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) { auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(numRadSys); From 46196e4a10e0b0375f0a06d3d6d3928d0accfdcd Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 16 Jun 2023 09:35:59 -0500 Subject: [PATCH 016/161] Unit Test for ZeroSource Fix Addition of a unit test for the fixes for various ZeroSource variables throughout the code. --- .../unit/LowTempRadiantSystem.unit.cc | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc index 72bb1448100..c71b5bb3f23 100644 --- a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc +++ b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc @@ -4665,3 +4665,135 @@ TEST_F(LowTempRadiantSystemTest, VariableFlowCoolingOnlyInputTest) EXPECT_NO_THROW(GetLowTempRadiantSystem(*state)); compare_err_stream(""); } + +TEST_F(LowTempRadiantSystemTest, UpdateRadSysSourceValAvgTest) +{ + bool isItOn; + Real64 errTol = 0.0001; + + auto &hRS = state->dataLowTempRadSys->HydrRadSys; + auto &cRS = state->dataLowTempRadSys->CFloRadSys; + auto &eRS = state->dataLowTempRadSys->ElecRadSys; + auto &surf = state->dataSurface->Surface; + auto &dataLTRS = state->dataLowTempRadSys; + auto &totSurfaces = state->dataSurface->TotSurfaces; + auto &qRadSysSource = state->dataHeatBalFanSys->QRadSysSource; + + dataLTRS->NumOfHydrLowTempRadSys = 2; + dataLTRS->NumOfCFloLowTempRadSys = 1; + dataLTRS->NumOfElecLowTempRadSys = 1; + hRS.allocate(dataLTRS->NumOfHydrLowTempRadSys); + cRS.allocate(dataLTRS->NumOfCFloLowTempRadSys); + eRS.allocate(dataLTRS->NumOfElecLowTempRadSys); + + hRS(1).NumOfSurfaces = 1; + hRS(1).SurfacePtr.allocate(hRS(1).NumOfSurfaces); + hRS(1).QRadSysSrcAvg.allocate(hRS(1).NumOfSurfaces); + hRS(2).NumOfSurfaces = 2; + hRS(2).SurfacePtr.allocate(hRS(2).NumOfSurfaces); + hRS(2).QRadSysSrcAvg.allocate(hRS(2).NumOfSurfaces); + cRS(1).NumOfSurfaces = 1; + cRS(1).SurfacePtr.allocate(cRS(1).NumOfSurfaces); + cRS(1).QRadSysSrcAvg.allocate(cRS(1).NumOfSurfaces); + eRS(1).NumOfSurfaces = 1; + eRS(1).SurfacePtr.allocate(eRS(1).NumOfSurfaces); + eRS(1).QRadSysSrcAvg.allocate(eRS(1).NumOfSurfaces); + + hRS(1).SurfacePtr(1) = 1; + hRS(2).SurfacePtr(1) = 2; + hRS(2).SurfacePtr(2) = 3; + cRS(1).SurfacePtr(1) = 5; + eRS(1).SurfacePtr(1) = 6; + hRS(1).QRadSysSrcAvg(1) = 100.0; + hRS(2).QRadSysSrcAvg(1) = 200.0; + hRS(2).QRadSysSrcAvg(2) = 300.0; + cRS(1).QRadSysSrcAvg(1) = 400.0; + eRS(1).QRadSysSrcAvg(1) = 500.0; + + totSurfaces = 6; + surf.allocate(totSurfaces); + surf(1).ExtBoundCond = 0; + surf(2).ExtBoundCond = 0; + surf(3).ExtBoundCond = 4; // interzone surface test + surf(4).ExtBoundCond = 3; // interzone surface test + surf(5).ExtBoundCond = 0; + surf(6).ExtBoundCond = 0; + qRadSysSource.allocate(totSurfaces); + + // Test 1: No radiant systems--should come back with flag false and nothing set in QRadSysSource + isItOn = false; + dataLTRS->NumOfHydrLowTempRadSys = 0; + dataLTRS->NumOfCFloLowTempRadSys = 0; + dataLTRS->NumOfElecLowTempRadSys = 0; + dataLTRS->TotalNumOfRadSystems = dataLTRS->NumOfHydrLowTempRadSys + dataLTRS->NumOfCFloLowTempRadSys + dataLTRS->NumOfElecLowTempRadSys; + qRadSysSource = 0.0; + UpdateRadSysSourceValAvg(*state, isItOn); + EXPECT_FALSE(isItOn); + for (int surfNum = 1; surfNum <= totSurfaces; ++surfNum) { + EXPECT_NEAR(qRadSysSource(surfNum), 0.0, errTol); + } + + // Test 2: Only Hydronic Radiant System--should come back with flag true and only hydronic variables set in QRadSysSource + isItOn = false; + dataLTRS->NumOfHydrLowTempRadSys = 2; + dataLTRS->NumOfCFloLowTempRadSys = 0; + dataLTRS->NumOfElecLowTempRadSys = 0; + dataLTRS->TotalNumOfRadSystems = dataLTRS->NumOfHydrLowTempRadSys + dataLTRS->NumOfCFloLowTempRadSys + dataLTRS->NumOfElecLowTempRadSys; + qRadSysSource = 0.0; + UpdateRadSysSourceValAvg(*state, isItOn); + EXPECT_TRUE(isItOn); + EXPECT_NEAR(qRadSysSource(1), 100.0, errTol); + EXPECT_NEAR(qRadSysSource(2), 200.0, errTol); + EXPECT_NEAR(qRadSysSource(3), 300.0, errTol); + EXPECT_NEAR(qRadSysSource(4), 300.0, errTol); + EXPECT_NEAR(qRadSysSource(5), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(6), 0.0, errTol); + + // Test 3: Only Constant Flow Radiant System--should come back with flag true and only constant flow variables set in QRadSysSource + isItOn = false; + dataLTRS->NumOfHydrLowTempRadSys = 0; + dataLTRS->NumOfCFloLowTempRadSys = 1; + dataLTRS->NumOfElecLowTempRadSys = 0; + dataLTRS->TotalNumOfRadSystems = dataLTRS->NumOfHydrLowTempRadSys + dataLTRS->NumOfCFloLowTempRadSys + dataLTRS->NumOfElecLowTempRadSys; + qRadSysSource = 0.0; + UpdateRadSysSourceValAvg(*state, isItOn); + EXPECT_TRUE(isItOn); + EXPECT_NEAR(qRadSysSource(1), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(2), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(3), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(4), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(5), 400.0, errTol); + EXPECT_NEAR(qRadSysSource(6), 0.0, errTol); + + // Test 4: Only Electric Radiant System--should come back with flag true and only electric variables set in qRadSysSrc (QRadSysSource) + isItOn = false; + dataLTRS->NumOfHydrLowTempRadSys = 0; + dataLTRS->NumOfCFloLowTempRadSys = 0; + dataLTRS->NumOfElecLowTempRadSys = 1; + dataLTRS->TotalNumOfRadSystems = dataLTRS->NumOfHydrLowTempRadSys + dataLTRS->NumOfCFloLowTempRadSys + dataLTRS->NumOfElecLowTempRadSys; + qRadSysSource = 0.0; + UpdateRadSysSourceValAvg(*state, isItOn); + EXPECT_TRUE(isItOn); + EXPECT_NEAR(qRadSysSource(1), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(2), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(3), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(4), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(5), 0.0, errTol); + EXPECT_NEAR(qRadSysSource(6), 500.0, errTol); + + // Test 5: All Radiant System--should come back with flag true and all variables set in qRadSysSrc (QRadSysSource) + isItOn = false; + dataLTRS->NumOfHydrLowTempRadSys = 2; + dataLTRS->NumOfCFloLowTempRadSys = 1; + dataLTRS->NumOfElecLowTempRadSys = 1; + dataLTRS->TotalNumOfRadSystems = dataLTRS->NumOfHydrLowTempRadSys + dataLTRS->NumOfCFloLowTempRadSys + dataLTRS->NumOfElecLowTempRadSys; + qRadSysSource = 0.0; + UpdateRadSysSourceValAvg(*state, isItOn); + EXPECT_TRUE(isItOn); + EXPECT_NEAR(qRadSysSource(1), 100.0, errTol); + EXPECT_NEAR(qRadSysSource(2), 200.0, errTol); + EXPECT_NEAR(qRadSysSource(3), 300.0, errTol); + EXPECT_NEAR(qRadSysSource(4), 300.0, errTol); + EXPECT_NEAR(qRadSysSource(5), 400.0, errTol); + EXPECT_NEAR(qRadSysSource(6), 500.0, errTol); +} From 87220a9050d7b11f15f38eb099a733fa2f40ca95 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 16 Jun 2023 12:47:44 -0500 Subject: [PATCH 017/161] Clang formating issue Fixed something that clang didn't like. --- src/EnergyPlus/LowTempRadiantSystem.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index a090ed654a6..50a2057d87f 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -5947,8 +5947,7 @@ namespace LowTempRadiantSystem { // Now check to see if anything is running and transfer information from the "average" variables to // the array that will be used within the heat balance. state.dataHeatBalFanSys->QRadSysSource = 0.0; // Zero this out first - for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) - { + for (int numRadSys = 1; numRadSys <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++numRadSys) { auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(numRadSys); for (int numRadSurf = 1; numRadSurf <= thisLTR.NumOfSurfaces; ++numRadSurf) { if (thisLTR.QRadSysSrcAvg(numRadSurf) != 0.0) LowTempRadSysOn = true; From 136f3b450d4e1b646ffa6e5c282c77706d3469a2 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 20 Jun 2023 09:25:49 -0500 Subject: [PATCH 018/161] Merge with Corrections Merged in latest develop and cleaned up some other stuff that somehow made it through previously (???). --- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 2 +- src/EnergyPlus/HighTempRadiantSystem.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index 8889d75b916..ed6459e0e51 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -889,7 +889,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons } if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { - int ZoneNum = ThisCP.ZonePtr; + int ZoneNum = thisCP.ZonePtr; thisCP.ZeroCPSourceSumHATsurf = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); thisCP.CoolingPanelSrcAvg = 0.0; thisCP.LastCoolingPanelSrc = 0.0; diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index ab3684f0341..61902cd055c 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -1098,7 +1098,7 @@ namespace HighTempRadiantSystem { if (state.dataHighTempRadSys->NumOfHighTempRadSys == 0) return; // If it was allocated, then we have to check to see if this was running at all... - for (RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { + for (int RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); thisHTR.QHTRRadSource = thisHTR.QHTRRadSrcAvg; if (thisHTR.QHTRRadSrcAvg != 0.0) HighTempRadSysOn = true; From 61f4709f84082d1b1540b30a18a7af38570d1a6a Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 20 Jun 2023 09:41:08 -0500 Subject: [PATCH 019/161] clang format didn't like it clang format detected a double blank line and said nope. Fixed here. --- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index ed6459e0e51..e4073f9887b 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -873,7 +873,6 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons ThisInNode.Press = 0.0; ThisInNode.HumRat = 0.0; - thisCP.ZeroCPSourceSumHATsurf = 0.0; thisCP.CoolingPanelSource = 0.0; thisCP.CoolingPanelSrcAvg = 0.0; From 41728fdc4ff217dde3b5e04ab54c0d55d99992c8 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 20 Jun 2023 11:10:04 -0500 Subject: [PATCH 020/161] LTR and VentSlab time variables During review, it was noted that the time variables for the LTR and VentSlab systems did not need to be arrays but rather a scalar for a specific system. This commit fixes that issue. --- src/EnergyPlus/LowTempRadiantSystem.cc | 21 ++++++++++----------- src/EnergyPlus/LowTempRadiantSystem.hh | 4 ++-- src/EnergyPlus/VentilatedSlab.cc | 17 +++++++---------- src/EnergyPlus/VentilatedSlab.hh | 6 +++--- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 9207d02e5ff..976edf2c550 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -1975,22 +1975,22 @@ namespace LowTempRadiantSystem { auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(RadNum); thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(RadNum); thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++RadNum) { auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(RadNum); thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastTimeStepSys.dimension(thisLTR.NumOfSurfaces, 0.0); + thisLTR.LastSysTimeElapsed = 0.0; + thisLTR.LastTimeStepSys = 0.0; } state.dataLowTempRadSys->MySizeFlagHydr.allocate(state.dataLowTempRadSys->NumOfHydrLowTempRadSys); state.dataLowTempRadSys->MySizeFlagCFlo.allocate(state.dataLowTempRadSys->NumOfCFloLowTempRadSys); @@ -5373,19 +5373,18 @@ namespace LowTempRadiantSystem { int surfNum = this->SurfacePtr(radSurfNum); - if (this->LastSysTimeElapsed(radSurfNum) == SysTimeElapsed) { + if (this->LastSysTimeElapsed == SysTimeElapsed) { // Still iterating or reducing system time step, so subtract old values which were // not valid - this->QRadSysSrcAvg(radSurfNum) -= this->LastQRadSysSrc(radSurfNum) * this->LastTimeStepSys(radSurfNum) / TimeStepZone; + this->QRadSysSrcAvg(radSurfNum) -= this->LastQRadSysSrc(radSurfNum) * this->LastTimeStepSys / TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables this->QRadSysSrcAvg(radSurfNum) += state.dataHeatBalFanSys->QRadSysSource(surfNum) * TimeStepSys / TimeStepZone; - this->LastQRadSysSrc(radSurfNum) = state.dataHeatBalFanSys->QRadSysSource(surfNum); - this->LastSysTimeElapsed(radSurfNum) = SysTimeElapsed; - this->LastTimeStepSys(radSurfNum) = TimeStepSys; } + this->LastSysTimeElapsed = SysTimeElapsed; + this->LastTimeStepSys = TimeStepSys; } void VariableFlowRadiantSystemData::updateLowTemperatureRadiantSystem(EnergyPlusData &state) diff --git a/src/EnergyPlus/LowTempRadiantSystem.hh b/src/EnergyPlus/LowTempRadiantSystem.hh index f3679c86d8a..461649e8d27 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.hh +++ b/src/EnergyPlus/LowTempRadiantSystem.hh @@ -154,8 +154,8 @@ namespace LowTempRadiantSystem { Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surface // Record keeping variables used to calculate QRadSysSrcAvg locally Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating LowTempRadiantControlTypes controlType = LowTempRadiantControlTypes::MATControl; // Control type for the system (MAT, MRT, Op temp, ODB, OWB, // Surface Face Temp, Surface Interior Temp, Running Mean // Temp for Constant Flow systems only) diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 4448d09648d..414e43c689a 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1549,8 +1549,8 @@ namespace VentilatedSlab { } thisVentSlab.QRadSysSrcAvg.dimension(numRadSurfs, 0.0); thisVentSlab.LastQRadSysSrc.dimension(numRadSurfs, 0.0); - thisVentSlab.LastSysTimeElapsed.dimension(numRadSurfs, 0.0); - thisVentSlab.LastTimeStepSys.dimension(numRadSurfs, 0.0); + thisVentSlab.LastSysTimeElapsed = 0.0; + thisVentSlab.LastTimeStepSys = 0.0; } state.dataVentilatedSlab->MyEnvrnFlag = true; state.dataVentilatedSlab->MySizeFlag = true; @@ -4473,20 +4473,17 @@ namespace VentilatedSlab { SurfNum = ventSlab.SurfacePtr(RadSurfNum); - if (ventSlab.LastSysTimeElapsed(RadSurfNum) == SysTimeElapsed) { - // Still iterating or reducing system time step, so subtract old values which were - // not valid - ventSlab.QRadSysSrcAvg(RadSurfNum) -= - ventSlab.LastQRadSysSrc(RadSurfNum) * ventSlab.LastTimeStepSys(RadSurfNum) / state.dataGlobal->TimeStepZone; + if (ventSlab.LastSysTimeElapsed == SysTimeElapsed) { + // Still iterating or reducing system time step, so subtract old values which were not valid + ventSlab.QRadSysSrcAvg(RadSurfNum) -= ventSlab.LastQRadSysSrc(RadSurfNum) * ventSlab.LastTimeStepSys / state.dataGlobal->TimeStepZone; } // Update the running average and the "last" values with the current values of the appropriate variables ventSlab.QRadSysSrcAvg(RadSurfNum) += state.dataHeatBalFanSys->QRadSysSource(SurfNum) * TimeStepSys / state.dataGlobal->TimeStepZone; - ventSlab.LastQRadSysSrc(RadSurfNum) = state.dataHeatBalFanSys->QRadSysSource(SurfNum); - ventSlab.LastSysTimeElapsed(RadSurfNum) = SysTimeElapsed; - ventSlab.LastTimeStepSys(RadSurfNum) = TimeStepSys; } + ventSlab.LastSysTimeElapsed = SysTimeElapsed; + ventSlab.LastTimeStepSys = TimeStepSys; // First sum up all of the heat sources/sinks associated with this system TotalHeatSource = 0.0; diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index bd329a21817..394adc7dac8 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -278,9 +278,9 @@ namespace VentilatedSlab { Real64 ZeroVentSlabSourceSumHATsurf; // Equal to SumHATsurf for all the walls in a zone with no source Array1D QRadSysSrcAvg; // Average source over the time step for a particular radiant surfaceD // Record keeping variables used to calculate QRadSysSrcAvg locally - Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating - Array1D LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Array1D LastTimeStepSys; // Need to keep the last value in case we are still iterating + Array1D LastQRadSysSrc; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating // Default Constructor VentilatedSlabData() From df4344eb865a50c57059e718b84aac328eca9c0c Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 20 Jun 2023 11:57:46 -0500 Subject: [PATCH 021/161] More intros of auto statements Implementation of more "thisHTR" auto definitions to clean up the code in various subroutines throughout this module. --- src/EnergyPlus/HighTempRadiantSystem.cc | 149 +++++++++++------------- 1 file changed, 71 insertions(+), 78 deletions(-) diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index 61902cd055c..e118b42716c 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -709,6 +709,9 @@ namespace HighTempRadiantSystem { // METHODOLOGY EMPLOYED: // Obtains design heating load from the zone sizing arrays + // Using/Aliasing + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + // SUBROUTINE LOCAL VARIABLE DECLARATIONS Real64 TempSize; // autosized value of coil input field state.dataSize->DataScalableCapSizingON = false; @@ -719,48 +722,45 @@ namespace HighTempRadiantSystem { auto &zoneEqSizing = state.dataSize->ZoneEqSizing(curZoneEqNum); state.dataSize->DataFracOfAutosizedHeatingCapacity = 1.0; - state.dataSize->DataZoneNumber = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; + state.dataSize->DataZoneNumber = thisHTR.ZonePtr; // Integer representation of sizing method name (e.g., CoolingAirflowSizing, HeatingCapacitySizing, etc.) int SizingMethod = DataHVACGlobals::HeatingCapacitySizing; int FieldNum = 1; std::string const SizingString = format("{} [W]", state.dataHighTempRadSys->HighTempRadSysNumericFields(RadSysNum).FieldNames(FieldNum)); // capacity sizing methods (HeatingDesignCapacity, CapacityPerFloorArea, FractionOfAutosizedCoolingCapacity, and // FractionOfAutosizedHeatingCapacity ) - int CapSizingMethod = static_cast(state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatingCapMethod); + int CapSizingMethod = static_cast(thisHTR.HeatingCapMethod); zoneEqSizing.SizingMethod(SizingMethod) = CapSizingMethod; if (CapSizingMethod == DataSizing::HeatingDesignCapacity || CapSizingMethod == DataSizing::CapacityPerFloorArea || CapSizingMethod == DataSizing::FractionOfAutosizedHeatingCapacity) { std::string_view const CompType = "ZoneHVAC:HighTemperatureRadiant"; - std::string_view const CompName = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).Name; + std::string_view const CompName = thisHTR.Name; if (CapSizingMethod == DataSizing::HeatingDesignCapacity) { - if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ScaledHeatingCapacity == DataSizing::AutoSize) { + if (thisHTR.ScaledHeatingCapacity == DataSizing::AutoSize) { CheckZoneSizing(state, CompType, CompName); - zoneEqSizing.DesHeatingLoad = state.dataSize->FinalZoneSizing(curZoneEqNum).NonAirSysDesHeatLoad / - (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant + - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracConvect); + zoneEqSizing.DesHeatingLoad = + state.dataSize->FinalZoneSizing(curZoneEqNum).NonAirSysDesHeatLoad / (thisHTR.FracRadiant + thisHTR.FracConvect); } else { - zoneEqSizing.DesHeatingLoad = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ScaledHeatingCapacity; + zoneEqSizing.DesHeatingLoad = thisHTR.ScaledHeatingCapacity; } zoneEqSizing.HeatingCapacity = true; TempSize = zoneEqSizing.DesHeatingLoad; } else if (CapSizingMethod == DataSizing::CapacityPerFloorArea) { zoneEqSizing.HeatingCapacity = true; - zoneEqSizing.DesHeatingLoad = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ScaledHeatingCapacity * - state.dataHeatBal->Zone(state.dataSize->DataZoneNumber).FloorArea; + zoneEqSizing.DesHeatingLoad = thisHTR.ScaledHeatingCapacity * state.dataHeatBal->Zone(state.dataSize->DataZoneNumber).FloorArea; TempSize = zoneEqSizing.DesHeatingLoad; state.dataSize->DataScalableCapSizingON = true; } else if (CapSizingMethod == DataSizing::FractionOfAutosizedHeatingCapacity) { CheckZoneSizing(state, CompType, CompName); zoneEqSizing.HeatingCapacity = true; - state.dataSize->DataFracOfAutosizedHeatingCapacity = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ScaledHeatingCapacity; - zoneEqSizing.DesHeatingLoad = state.dataSize->FinalZoneSizing(curZoneEqNum).NonAirSysDesHeatLoad / - (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant + - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracConvect); + state.dataSize->DataFracOfAutosizedHeatingCapacity = thisHTR.ScaledHeatingCapacity; + zoneEqSizing.DesHeatingLoad = + state.dataSize->FinalZoneSizing(curZoneEqNum).NonAirSysDesHeatLoad / (thisHTR.FracRadiant + thisHTR.FracConvect); TempSize = DataSizing::AutoSize; state.dataSize->DataScalableCapSizingON = true; } else { - TempSize = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ScaledHeatingCapacity; + TempSize = thisHTR.ScaledHeatingCapacity; } bool PrintFlag = true; bool errorsFound = false; @@ -768,7 +768,7 @@ namespace HighTempRadiantSystem { HeatingCapacitySizer sizerHeatingCapacity; sizerHeatingCapacity.overrideSizingString(SizingString); sizerHeatingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName); - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac = sizerHeatingCapacity.size(state, TempSize, errorsFound); + thisHTR.MaxPowerCapac = sizerHeatingCapacity.size(state, TempSize, errorsFound); state.dataSize->DataScalableCapSizingON = false; } } @@ -803,37 +803,39 @@ namespace HighTempRadiantSystem { // energy analysis program", M.S. thesis, University of Illinois at // Urbana-Champaign (Dept. of Mechanical and Industrial Engineering). + // Using/Aliasing + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + // initialize local variables - int ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; + int ZoneNum = thisHTR.ZonePtr; Real64 HeatFrac = 0.0; // fraction of maximum energy input to radiant system [dimensionless] - if (ScheduleManager::GetCurrentScheduleValue(state, state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SchedPtr) <= 0) { + if (ScheduleManager::GetCurrentScheduleValue(state, thisHTR.SchedPtr) <= 0) { // Unit is off or has no load upon it; set the flow rates to zero and then // simulate the components with the no flow conditions - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = 0.0; + thisHTR.QHTRRadSource = 0.0; } else { // Unit might be on-->this section is intended to control the output of the // high temperature radiant heater (temperature controlled) // Determine the current setpoint temperature and the temperature at which the unit should be completely off - Real64 SetPtTemp = ScheduleManager::GetCurrentScheduleValue(state, state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SetptSchedPtr); - Real64 OffTemp = SetPtTemp + 0.5 * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ThrottlRange; + Real64 SetPtTemp = ScheduleManager::GetCurrentScheduleValue(state, thisHTR.SetptSchedPtr); + Real64 OffTemp = SetPtTemp + 0.5 * thisHTR.ThrottlRange; Real64 OpTemp = (state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT + state.dataHeatBal->ZoneMRT(ZoneNum)) / 2.0; // Approximate the "operative" temperature // Determine the fraction of maximum power to the unit (limiting the fraction range from zero to unity) - switch (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ControlType) { + switch (thisHTR.ControlType) { case RadControlType::MATControl: { - HeatFrac = (OffTemp - state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT) / - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ThrottlRange; + HeatFrac = (OffTemp - state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT) / thisHTR.ThrottlRange; } break; case RadControlType::MRTControl: { - HeatFrac = (OffTemp - state.dataHeatBal->ZoneMRT(ZoneNum)) / state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ThrottlRange; + HeatFrac = (OffTemp - state.dataHeatBal->ZoneMRT(ZoneNum)) / thisHTR.ThrottlRange; } break; case RadControlType::OperativeControl: { OpTemp = 0.5 * (state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT + state.dataHeatBal->ZoneMRT(ZoneNum)); - HeatFrac = (OffTemp - OpTemp) / state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ThrottlRange; + HeatFrac = (OffTemp - OpTemp) / thisHTR.ThrottlRange; } break; default: break; @@ -842,8 +844,7 @@ namespace HighTempRadiantSystem { if (HeatFrac > 1.0) HeatFrac = 1.0; // Set the heat source for the high temperature electric radiant system - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = - HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; + thisHTR.QHTRRadSource = HeatFrac * thisHTR.MaxPowerCapac; } } @@ -879,6 +880,9 @@ namespace HighTempRadiantSystem { // energy analysis program", M.S. thesis, University of Illinois at // Urbana-Champaign (Dept. of Mechanical and Industrial Engineering). + // Using/Aliasing + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + // SUBROUTINE PARAMETER DEFINITIONS: float const TempConvToler(0.1f); // Temperature controller tries to converge to within 0.1C int constexpr MaxIterations(10); // Maximum number of iterations to achieve temperature control @@ -890,16 +894,16 @@ namespace HighTempRadiantSystem { Real64 ZoneTemp(0.0); // zone temperature (MAT, MRT, or Operative Temperature, depending on control type) [C] // initialize local variables - int ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = 0.0; + int ZoneNum = thisHTR.ZonePtr; + thisHTR.QHTRRadSource = 0.0; - if (ScheduleManager::GetCurrentScheduleValue(state, state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SchedPtr) > 0) { + if (ScheduleManager::GetCurrentScheduleValue(state, thisHTR.SchedPtr) > 0) { // Unit is scheduled on-->this section is intended to control the output of the // high temperature radiant heater (temperature controlled) // Determine the current setpoint temperature and the temperature at which the unit should be completely off - Real64 SetPtTemp = ScheduleManager::GetCurrentScheduleValue(state, state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SetptSchedPtr); + Real64 SetPtTemp = ScheduleManager::GetCurrentScheduleValue(state, thisHTR.SetptSchedPtr); // Now, distribute the radiant energy of all systems to the appropriate // surfaces, to people, and the air; determine the latent portion @@ -911,7 +915,7 @@ namespace HighTempRadiantSystem { // First determine whether or not the unit should be on // Determine the proper temperature on which to control - switch (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ControlType) { + switch (thisHTR.ControlType) { case RadControlType::MATSPControl: { ZoneTemp = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT; } break; @@ -945,8 +949,7 @@ namespace HighTempRadiantSystem { } // Set the heat source for the high temperature radiant system - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource = - HeatFrac * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).MaxPowerCapac; + thisHTR.QHTRRadSource = HeatFrac * thisHTR.MaxPowerCapac; // Now, distribute the radiant energy of all systems to the appropriate // surfaces, to people, and the air; determine the latent portion @@ -957,7 +960,7 @@ namespace HighTempRadiantSystem { HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum); // Redetermine the current value of the controlling temperature - switch (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ControlType) { + switch (thisHTR.ControlType) { case RadControlType::MATControl: { ZoneTemp = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT; } break; @@ -1135,43 +1138,37 @@ namespace HighTempRadiantSystem { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 ThisSurfIntensity; // temporary for W/m2 term for rad on a surface + // Using/Aliasing + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + auto &dataHBFS = state.dataHeatBalFanSys; + // Initialize arrays - state.dataHeatBalFanSys->SumConvHTRadSys = 0.0; - state.dataHeatBalFanSys->SumLatentHTRadSys = 0.0; - state.dataHeatBalFanSys->SurfQHTRadSys = 0.0; - state.dataHeatBalFanSys->ZoneQHTRadSysToPerson = 0.0; + dataHBFS->SumConvHTRadSys = 0.0; + dataHBFS->SumLatentHTRadSys = 0.0; + dataHBFS->SurfQHTRadSys = 0.0; + dataHBFS->ZoneQHTRadSysToPerson = 0.0; for (int RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { - int ZoneNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ZonePtr; - - state.dataHeatBalFanSys->ZoneQHTRadSysToPerson(ZoneNum) = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant * - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracDistribPerson; + int ZoneNum = thisHTR.ZonePtr; - state.dataHeatBalFanSys->SumConvHTRadSys(ZoneNum) += - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracConvect; + dataHBFS->ZoneQHTRadSysToPerson(ZoneNum) = thisHTR.QHTRRadSource * thisHTR.FracRadiant * thisHTR.FracDistribPerson; + dataHBFS->SumConvHTRadSys(ZoneNum) += thisHTR.QHTRRadSource * thisHTR.FracConvect; + dataHBFS->SumLatentHTRadSys(ZoneNum) += thisHTR.QHTRRadSource * thisHTR.FracLatent; - state.dataHeatBalFanSys->SumLatentHTRadSys(ZoneNum) += - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracLatent; - - for (int RadSurfNum = 1; RadSurfNum <= state.dataHighTempRadSys->HighTempRadSys(RadSysNum).TotSurfToDistrib; ++RadSurfNum) { - int SurfNum = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).SurfacePtr(RadSurfNum); + for (int RadSurfNum = 1; RadSurfNum <= thisHTR.TotSurfToDistrib; ++RadSurfNum) { + int SurfNum = thisHTR.SurfacePtr(RadSurfNum); if (state.dataSurface->Surface(SurfNum).Area > SmallestArea) { - ThisSurfIntensity = (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource * - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracRadiant * - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).FracDistribToSurf(RadSurfNum) / + ThisSurfIntensity = (thisHTR.QHTRRadSource * thisHTR.FracRadiant * thisHTR.FracDistribToSurf(RadSurfNum) / state.dataSurface->Surface(SurfNum).Area); - state.dataHeatBalFanSys->SurfQHTRadSys(SurfNum) += ThisSurfIntensity; + dataHBFS->SurfQHTRadSys(SurfNum) += ThisSurfIntensity; state.dataHeatBalSurf->AnyRadiantSystems = true; if (ThisSurfIntensity > DataHeatBalFanSys::MaxRadHeatFlux) { // CR 8074, trap excessive intensity (throws off surface balance ) ShowSevereError(state, "DistributeHTRadGains: excessive thermal radiation heat flux intensity detected"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError( - state, - format("Occurs in ZoneHVAC:HighTemperatureRadiant = {}", state.dataHighTempRadSys->HighTempRadSys(RadSysNum).Name)); + ShowContinueError(state, format("Occurs in ZoneHVAC:HighTemperatureRadiant = {}", thisHTR.Name)); ShowContinueError(state, format("Radiation intensity = {:.2R} [W/m2]", ThisSurfIntensity)); ShowContinueError(state, "Assign a larger surface area or more surfaces in ZoneHVAC:HighTemperatureRadiant"); ShowFatalError(state, "DistributeHTRadGains: excessive thermal radiation heat flux intensity detected"); @@ -1180,8 +1177,7 @@ namespace HighTempRadiantSystem { ShowSevereError(state, "DistributeHTRadGains: surface not large enough to receive thermal radiation heat flux"); ShowContinueError(state, format("Surface = {}", state.dataSurface->Surface(SurfNum).Name)); ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area)); - ShowContinueError( - state, format("Occurs in ZoneHVAC:HighTemperatureRadiant = {}", state.dataHighTempRadSys->HighTempRadSys(RadSysNum).Name)); + ShowContinueError(state, format("Occurs in ZoneHVAC:HighTemperatureRadiant = {}", thisHTR.Name)); ShowContinueError(state, "Assign a larger surface area or more surfaces in ZoneHVAC:HighTemperatureRadiant"); ShowFatalError(state, "DistributeHTRadGains: surface not large enough to receive thermal radiation heat flux"); } @@ -1196,7 +1192,7 @@ namespace HighTempRadiantSystem { // that all energy radiated to people is converted to convective energy is // not very precise, but at least it conserves energy. for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { - state.dataHeatBalFanSys->SumConvHTRadSys(ZoneNum) += state.dataHeatBalFanSys->ZoneQHTRadSysToPerson(ZoneNum); + dataHBFS->SumConvHTRadSys(ZoneNum) += dataHBFS->ZoneQHTRadSysToPerson(ZoneNum); } } @@ -1213,26 +1209,23 @@ namespace HighTempRadiantSystem { // Using/Aliasing Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); - if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeaterType == Constant::eResource::NaturalGas) { - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource / - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).CombustionEffic; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasEnergy = - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower * TimeStepSysSec; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower = 0.0; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecEnergy = 0.0; - } else if (state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeaterType == Constant::eResource::Electricity) { - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasPower = 0.0; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).GasEnergy = 0.0; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecEnergy = - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).ElecPower * TimeStepSysSec; + if (thisHTR.HeaterType == Constant::eResource::NaturalGas) { + thisHTR.GasPower = thisHTR.QHTRRadSource / thisHTR.CombustionEffic; + thisHTR.GasEnergy = thisHTR.GasPower * TimeStepSysSec; + thisHTR.ElecPower = 0.0; + thisHTR.ElecEnergy = 0.0; + } else if (thisHTR.HeaterType == Constant::eResource::Electricity) { + thisHTR.GasPower = 0.0; + thisHTR.GasEnergy = 0.0; + thisHTR.ElecPower = thisHTR.QHTRRadSource; + thisHTR.ElecEnergy = thisHTR.ElecPower * TimeStepSysSec; } else { ShowWarningError(state, "Someone forgot to add a high temperature radiant heater type to the reporting subroutine"); } - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatPower = state.dataHighTempRadSys->HighTempRadSys(RadSysNum).QHTRRadSource; - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatEnergy = - state.dataHighTempRadSys->HighTempRadSys(RadSysNum).HeatPower * TimeStepSysSec; + thisHTR.HeatPower = thisHTR.QHTRRadSource; + thisHTR.HeatEnergy = thisHTR.HeatPower * TimeStepSysSec; } } // namespace HighTempRadiantSystem From 2cb240a748e8afbbc0c23e247144d2a4c9a06ffc Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 20 Jun 2023 12:13:39 -0500 Subject: [PATCH 022/161] AccountingData fix and random HTR fix Corrected the data structure for the HWBB based on review comments. Also uncovered a problem in HTR that somehow slipped by the compiler on a previous build (?). --- src/EnergyPlus/HWBaseboardRadiator.hh | 64 ++++++++----------------- src/EnergyPlus/HighTempRadiantSystem.cc | 2 +- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/EnergyPlus/HWBaseboardRadiator.hh b/src/EnergyPlus/HWBaseboardRadiator.hh index c45fa8e4ecb..476ca540f89 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.hh +++ b/src/EnergyPlus/HWBaseboardRadiator.hh @@ -68,14 +68,6 @@ namespace HWBaseboardRadiator { extern std::string const cCMO_BBRadiator_Water; - struct AccountingData - { - // Record keeping variables used to calculate QBBRadSrcAvg locally - Real64 LastQBBRadSrc = 0.0; // Need to keep the last value in case we are still iterating - Real64 LastSysTimeElapsed = 0.0; // Need to keep the last value in case we are still iterating - Real64 LastTimeStepSys = 0.0; // Need to keep the last value in case we are still iterating - }; - struct HWBaseboardParams { // Members @@ -113,42 +105,28 @@ namespace HWBaseboardRadiator { Real64 AirOutletTempStd = 0.0; Real64 FracConvect = 0.0; Array1D FracDistribToSurf; - Real64 TotPower; - Real64 Power; - Real64 ConvPower; - Real64 RadPower; - Real64 TotEnergy; - Real64 Energy; - Real64 ConvEnergy; - Real64 RadEnergy; - PlantLocation plantLoc; - int BBLoadReSimIndex; - int BBMassFlowReSimIndex; - int BBInletTempFlowReSimIndex; - int HeatingCapMethod; // - Method for heating capacity scaled sizing calculation (HeatingDesignCapacity, CapacityPerFloorArea, - // FracOfAutosizedHeatingCapacity) - Real64 ScaledHeatingCapacity; // - scaled maximum heating capacity {W} or scalable variable of zone HVAC equipment, {-}, or {W/m2} - Real64 ZeroBBSourceSumHATsurf; // used in baseboard energy balance + Real64 TotPower = 0.0; + Real64 Power = 0.0; + Real64 ConvPower = 0.0; + Real64 RadPower = 0.0; + Real64 TotEnergy = 0.0; + Real64 Energy = 0.0; + Real64 ConvEnergy = 0.0; + Real64 RadEnergy = 0.0; + PlantLocation plantLoc = {}; + int BBLoadReSimIndex = 0; + int BBMassFlowReSimIndex = 0; + int BBInletTempFlowReSimIndex = 0; + int HeatingCapMethod = 0; // - Method for heating capacity scaled sizing calculation (HeatingDesignCapacity, CapacityPerFloorArea, + // FracOfAutosizedHeatingCapacity) + Real64 ScaledHeatingCapacity = 0.0; // - scaled maximum heating capacity {W} or scalable variable of zone HVAC equipment, {-}, or {W/m2} + Real64 ZeroBBSourceSumHATsurf = 0.0; // used in baseboard energy balance // Record keeping variables used to calculate QBBRadSrcAvg locally - Real64 QBBRadSource; // Need to keep the last value in case we are still iterating - Real64 QBBRadSrcAvg; // Need to keep the last value in case we are still iterating - Real64 LastSysTimeElapsed; // Need to keep the last value in case we are still iterating - Real64 LastTimeStepSys; // Need to keep the last value in case we are still iterating - Real64 LastQBBRadSrc; // Need to keep the last value in case we are still iterating - - // Default Constructor - HWBaseboardParams() - : EquipType(DataPlant::PlantEquipmentType::Invalid), DesignObjectPtr(0), ZonePtr(0), SchedPtr(0), WaterInletNode(0), WaterOutletNode(0), - TotSurfToDistrib(0), ControlCompTypeNum(0), CompErrIndex(0), AirMassFlowRate(0.0), AirMassFlowRateStd(0.0), WaterTempAvg(0.0), - RatedCapacity(0.0), UA(0.0), WaterMassFlowRate(0.0), WaterMassFlowRateMax(0.0), WaterMassFlowRateStd(0.0), WaterVolFlowRateMax(0.0), - WaterInletTempStd(0.0), WaterInletTemp(0.0), WaterInletEnthalpy(0.0), WaterOutletTempStd(0.0), WaterOutletTemp(0.0), - WaterOutletEnthalpy(0.0), AirInletTempStd(0.0), AirInletTemp(0.0), AirOutletTemp(0.0), AirInletHumRat(0.0), AirOutletTempStd(0.0), - FracConvect(0.0), TotPower(0.0), Power(0.0), ConvPower(0.0), RadPower(0.0), TotEnergy(0.0), Energy(0.0), ConvEnergy(0.0), - RadEnergy(0.0), plantLoc{}, BBLoadReSimIndex(0), BBMassFlowReSimIndex(0), BBInletTempFlowReSimIndex(0), HeatingCapMethod(0), - ScaledHeatingCapacity(0.0), ZeroBBSourceSumHATsurf(0.0), QBBRadSource(0.0), QBBRadSrcAvg(0.0), LastSysTimeElapsed(0.0), - LastTimeStepSys(0.0), LastQBBRadSrc(0.0) - { - } + Real64 QBBRadSource = 0.0; // Need to keep the last value in case we are still iterating + Real64 QBBRadSrcAvg = 0.0; // Need to keep the last value in case we are still iterating + Real64 LastSysTimeElapsed = 0.0; // Need to keep the last value in case we are still iterating + Real64 LastTimeStepSys = 0.0; // Need to keep the last value in case we are still iterating + Real64 LastQBBRadSrc = 0.0; // Need to keep the last value in case we are still iterating }; struct HWBaseboardDesignData : HWBaseboardParams diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index e118b42716c..b463957a5c9 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -1139,7 +1139,6 @@ namespace HighTempRadiantSystem { Real64 ThisSurfIntensity; // temporary for W/m2 term for rad on a surface // Using/Aliasing - auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); auto &dataHBFS = state.dataHeatBalFanSys; // Initialize arrays @@ -1150,6 +1149,7 @@ namespace HighTempRadiantSystem { for (int RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { + auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); int ZoneNum = thisHTR.ZonePtr; dataHBFS->ZoneQHTRadSysToPerson(ZoneNum) = thisHTR.QHTRRadSource * thisHTR.FracRadiant * thisHTR.FracDistribPerson; From 3478f661b6ce4c735908bc66e5d50660d454ce78 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 28 Jun 2023 15:07:16 -0500 Subject: [PATCH 023/161] Correction to Reporting Problem The code was skipping partitions for updating the outside face flux in the heat balance because there is no outside face--the surface is adiatic. However, the code to skip that forgot that interzone partitions do need to figure this out. This was noticed by a user and the code before the fix resulted in output that made it look like the surface was accumulating energy gain/loss for interzone surfaces over an annual simulation eventhough this value should be relatively small. With the fix, the outside face flux is now no longer zero all the time and the summation of heat storage in the surface is more appropriate as well. --- src/EnergyPlus/HeatBalanceSurfaceManager.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/HeatBalanceSurfaceManager.cc b/src/EnergyPlus/HeatBalanceSurfaceManager.cc index 124d72bb845..036abfff4ea 100644 --- a/src/EnergyPlus/HeatBalanceSurfaceManager.cc +++ b/src/EnergyPlus/HeatBalanceSurfaceManager.cc @@ -5175,7 +5175,9 @@ void UpdateThermalHistories(EnergyPlusData &state) state.dataHeatBalFanSys->CTFTuserConstPart(SurfNum); } - if (surface.ExtBoundCond > 0) continue; // Don't need to evaluate outside for partitions + // Don't need to evaluate outside for partitions (so continue), + // but do need to do remaining calculations for interzone partitions. + if (surface.ExtBoundCond > 0 && surface.ExtBoundCond == SurfNum) continue; // Set current outside flux: if (construct.SourceSinkPresent) { From 6512859730624770960fc92f1d39408188690f06 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 29 Jun 2023 08:10:30 -0500 Subject: [PATCH 024/161] Outside Face Variable Unit Test and Docs Unit test added for the outside face flux reporting problem for interzone partition. Also modified the documentation slightly in the IO Ref to clarify what happens when there are partitions and interzone partitions. --- ...roup-thermal-zone-description-geometry.tex | 6 +- .../unit/HeatBalanceSurfaceManager.unit.cc | 75 +++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/doc/input-output-reference/src/overview/group-thermal-zone-description-geometry.tex b/doc/input-output-reference/src/overview/group-thermal-zone-description-geometry.tex index 9dd0fac5a84..4a489d1989f 100644 --- a/doc/input-output-reference/src/overview/group-thermal-zone-description-geometry.tex +++ b/doc/input-output-reference/src/overview/group-thermal-zone-description-geometry.tex @@ -3331,7 +3331,7 @@ \subsubsection{Surface Inside Face Conduction Heat Loss Rate {[}W{]}}\label{surf These ``inside face conduction'' output variables describe heat flow by conduction right at the inside face of an opaque heat transfer surface. A positive value means that the conduction is from just inside the inside face toward the inside face. A negative value means that the conduction is from the inside face into the core of the heat transfer surface. -Note that Inside Face Conduction, when positive, does \textbf{not} indicate the heat flow from the surface to the zone air, which is governed by the inside face convection coefficient and the difference in temperature between the inside face and the zone air. +Note that Inside Face Conduction, when positive, does \textbf{not} necessarily indicate the heat flow from the surface to the zone air, which is governed by the inside face convection coefficient, the difference in temperature between the inside face and the zone air, and various radiation terms due to solar, internal gains, and radiant exchange with other surfaces in the zone. Different versions of the reports are available. The basic heat gain rate (W) and a per unit area flux (W/m\(^{2}\)) can have positive or negative values with the sign convention that positive indicates heat flowing toward the face itself. There are also directed ``gain'' and ``loss'' versions that have only positive values or zero when the heat flow direction opposes. @@ -3349,7 +3349,9 @@ \subsubsection{Surface Outside Face Conduction Heat Loss Rate {[}W{]}}\label{sur These ``outside face conduction'' output variables describe heat flow by conduction right at the outside face of an opaque heat transfer surface. A positive value means that the conduction is from just inside the outside face toward the outside face. A negative value means that the conduction is from the outside face into the core of the heat transfer surface. -Note that outside face conduction, when positive, does \textbf{not} indicate the heat flow from the surface to the surrounding air, which is governed by the outside face convection coefficient and the difference in temperature between the inside face and the surrounding air. +Note that outside face conduction, when positive, does \textbf{not} necessarily indicate the heat flow from the surface to the surrounding air, due to the fact that there could be various terms such as convection and/or radiation terms based on whatever is the ''outside'' environment for this surface. + +When the surface in question is a partition, the output for this variable is set to zero because there is no outside face because the surface is fully exposed to the zone. When the surface is an interzone partition, the value will be non-zero because there will potentially be conduction into or out of the zone on the other side at this surface. Different versions of the reports are available. The basic heat transfer rate (W) and a per unit area flux (W/m\(^{2}\)) can have positive or negative values with the sign convention that positive indicates heat flowing toward the face itself. There are also directed ``gain'' and ``loss'' versions that have only positive values or zero when the heat flow direction opposes. diff --git a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc index 9927ca044c2..4fee8a5a93f 100644 --- a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc @@ -8552,4 +8552,79 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestUpdateVariableAbsorptanc EXPECT_NEAR(state->dataHeatBalSurf->SurfAbsSolarExt(2), 0.5, 1e-6); } +TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_UpdateThermalHistoriesIZSurfaceCheck) +{ + state->dataSurface->TotSurfaces = 2; + state->dataGlobal->NumOfZones = 2; + state->dataHeatBal->TotConstructs = 1; + state->dataHeatBal->Zone.allocate(state->dataGlobal->NumOfZones); + state->dataSurface->Surface.allocate(state->dataSurface->TotSurfaces); + state->dataSurface->SurfaceWindow.allocate(state->dataSurface->TotSurfaces); + state->dataConstruction->Construct.allocate(state->dataHeatBal->TotConstructs); + state->dataHeatBal->AnyInternalHeatSourceInInput = false; + state->dataHeatBal->SimpleCTFOnly = false; + + AllocateSurfaceHeatBalArrays(*state); // allocates a host of variables related to CTF calculations + + state->dataSurface->Surface(1).Class = DataSurfaces::SurfaceClass::Wall; + state->dataSurface->Surface(1).HeatTransSurf = true; + state->dataSurface->Surface(1).HeatTransferAlgorithm = DataSurfaces::HeatTransferModel::CTF; + state->dataSurface->Surface(1).Construction = 1; + state->dataSurface->Surface(2).Class = DataSurfaces::SurfaceClass::Wall; + state->dataSurface->Surface(2).HeatTransSurf = true; + state->dataSurface->Surface(2).HeatTransferAlgorithm = DataSurfaces::HeatTransferModel::CTF; + state->dataSurface->Surface(2).Construction = 1; + state->dataHeatBal->space.allocate(2); + state->dataHeatBal->Zone(1).spaceIndexes.emplace_back(1); + state->dataHeatBal->space(1).OpaqOrIntMassSurfaceFirst = 1; + state->dataHeatBal->space(1).OpaqOrIntMassSurfaceLast = 1; + state->dataHeatBal->space(1).HTSurfaceFirst = 1; + state->dataHeatBal->space(1).HTSurfaceLast = 1; + state->dataHeatBal->Zone(2).spaceIndexes.emplace_back(2); + state->dataHeatBal->space(2).OpaqOrIntMassSurfaceFirst = 2; + state->dataHeatBal->space(2).OpaqOrIntMassSurfaceLast = 2; + state->dataHeatBal->space(2).HTSurfaceFirst = 2; + state->dataHeatBal->space(2).HTSurfaceLast = 2; + + state->dataConstruction->Construct(1).NumCTFTerms = 2; + state->dataConstruction->Construct(1).SourceSinkPresent = false; + state->dataConstruction->Construct(1).NumHistories = 1; + state->dataConstruction->Construct(1).CTFOutside[0] = 1.5; + state->dataConstruction->Construct(1).CTFCross[0] = 1.5; + state->dataConstruction->Construct(1).CTFInside[0] = 1.5; + + state->dataHeatBalSurf->SurfCurrNumHist(1) = 0; + state->dataHeatBalSurf->SurfOutsideTempHist(1)(1) = 20.0; + state->dataHeatBalSurf->SurfTempIn(1) = 10.0; + state->dataHeatBalSurf->SurfCTFConstInPart(1) = 0.0; + state->dataHeatBalSurf->SurfCurrNumHist(2) = 0; + state->dataHeatBalSurf->SurfOutsideTempHist(1)(2) = 10.0; + state->dataHeatBalSurf->SurfTempIn(2) = 20.0; + state->dataHeatBalSurf->SurfCTFConstInPart(2) = 0.0; + + // Test 1: Partition--outside should still be zero + state->dataSurface->Surface(1).ExtBoundCond = 1; + state->dataSurface->Surface(2).ExtBoundCond = 2; + + UpdateThermalHistories(*state); // Test to make sure that the outside surface flux is being set properly for interzone surfaces + + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(1)); + EXPECT_EQ(0.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(1)); + EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(2)); + EXPECT_EQ(0.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(2)); + + // Test 2: Interzone Partition--outside should have a non-zero value + state->dataSurface->Surface(1).ExtBoundCond = 2; + state->dataSurface->Surface(2).ExtBoundCond = 1; + state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux = 0.0; + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux = 0.0; + + UpdateThermalHistories(*state); // Test to make sure that the outside surface flux is being set properly for interzone surfaces + + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(1)); + EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(1)); + EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(2)); + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(2)); +} + } // namespace EnergyPlus From aebaebe5761e50ca2dcab4aa7dd329d8267fe0b8 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 11 Apr 2023 16:06:19 -0500 Subject: [PATCH 025/161] Remove the big tolerance condition for the local cs assignment to occur. --- src/EnergyPlus/SurfaceGeometry.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 2e8c2149639..a0b54a53dca 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -3051,13 +3051,13 @@ namespace SurfaceGeometry { // Check if base surface and subsurface have the same normal Vectors::CompareTwoVectors(baseSurface.NewellSurfaceNormalVector, subSurface.NewellSurfaceNormalVector, sameSurfNormal, 0.001); if (sameSurfNormal) { // copy lcs vectors - // Prior logic tested for azimuth difference < 30 and then skipped this - this caused large diffs in - // CmplxGlz_MeasuredDeflectionAndShading Restoring that check here but will require further investigation (MJW Dec 2015) - if (std::abs(baseSurface.Azimuth - subSurface.Azimuth) > warningTolerance) { - subSurface.lcsx = baseSurface.lcsx; - subSurface.lcsy = baseSurface.lcsy; - subSurface.lcsz = baseSurface.lcsz; - } + // Prior logic tested for azimuth difference < 30 and then skipped this - this caused large diffs in + // CmplxGlz_MeasuredDeflectionAndShading Restoring that check here but will require further investigation (MJW Dec 2015) + // if (std::abs(baseSurface.Azimuth - subSurface.Azimuth) > warningTolerance) { + subSurface.lcsx = baseSurface.lcsx; + subSurface.lcsy = baseSurface.lcsy; + subSurface.lcsz = baseSurface.lcsz; + // } } else { // // Not sure what this does, but keeping for now (MJW Dec 2015) // if (std::abs(subSurface.Azimuth - 360.0) < 0.01) { From d14744d9c077aee3e21cf7ca4e3723efc691bef9 Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Tue, 11 Jul 2023 15:30:51 -0700 Subject: [PATCH 026/161] add test idf and epw, will be removed after issue is fixed --- ...US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf | 7410 ++++++++++++++ ...ork-John.F.Kennedy.Intl.AP.744860_TMY3.epw | 8768 +++++++++++++++++ 2 files changed, 16178 insertions(+) create mode 100644 testfiles/US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf create mode 100644 weather/USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw diff --git a/testfiles/US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf b/testfiles/US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf new file mode 100644 index 00000000000..06b944fb7bc --- /dev/null +++ b/testfiles/US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf @@ -0,0 +1,7410 @@ +!- --------------------------------------------------------------------------------------------------------- +!- The Residential Prototype Building Models were developed by Pacific Northwest National Laboratory (PNNL), +!- under contract with the U.S. Department of Energy (DOE). +!- The purpose of developing these building prototype models is to measure energy saving impacts from +!- various residential energy codes. Detailed model development descriptions are documented in the following PNNL reports: +!- +!- 1. Salcido V.R., Y. Chen, and Y. Xie. 2021. Energy Savings Analysis: 2021 IECC for Residential Buildings. PNNL-31018. Richland, WA: Pacific Northwest National Laboratory. +!- 2. Taylor T, Mendon V, Zhao M, Liu B. Energy Savings Analysis: 2018 IECC for Residential Buildings. Richland, WA: Pacific Northwest National Laboratory. +!- 3. Mendon V.V., A. Selvacanabady, M. Zhao, and Z.T. Taylor. 2015. National Cost-Effectiveness Analysis of the Residential Provisions of the 2015 IECC. PNNL-24240. Richland, WA: Pacific Northwest National Laboratory. +!- 4. Lucas R.G., V.V. Mendon, and S. Goel. 2012. Energy Use Savings for a Typical New Residential Dwelling Unit Based on the 2009 and 2012 IECC as Compared to the 2006 IECC. PNNL-SA-88603. Richland, WA: Pacific Northwest National Laboratory. +!- +!- --------------------------------------------------------------------------------------------------------- +! GPARM parameters as run: +! ID = US+SF+CZ4A+hp+crawlspace+IECC_2006 +! weatherfile = USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw +! climate_zone = Climate Zone 4 +! moisture_regime = Moist +! humidity_designation = Not Warm-Humid +! tropical_designation = Not Tropical +! bldg_type = Single-Family +! fndn_type = Crawlspace +! system_tag = Heat Pump +! code = IECC_2006 +! permits = 21280.7599039262 +! vent_fan_efficacy = 1.4 +! cfm25 = 18.75 +! afn_control = MultizoneWithDistribution +! is_duct_base = no +! leakage_ratio = 0.297 +! dhw_type = +! TEMPLATE_PATH = template/v9.5 + + Version,23.1; + +! added VRF system + + Schedule:Compact, + VRFCondAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 12:00,1.0, !- Field 3 + Until: 13:00,1.0, !- Field 5 + Until: 24:00,1.0; !- Field 7 + +!- =========== ALL OBJECTS IN CLASS: AIRCONDITIONER:VARIABLEREFRIGERANTFLOW =========== + + AirConditioner:VariableRefrigerantFlow:FluidTemperatureControl, + VRF Heat Pump, !- Heat Pump Name + VRFCondAvailSched, !- Availability Schedule Name + VRF Heat Pump TU List, !- Zone Terminal Unit List Name + R410A, !- Refrigerant Type + 10023, !- Rated Evaporative Capacity {W} + 0.2931, !- Rated Compressor Power Per Unit of Rated Evaporative Capacity {dimensionless} + -5, !- Minimum Outdoor Air Temperature in Cooling Mode {C} + 43, !- Maximum Outdoor Air Temperature in Cooling Mode {C} + -20, !- Minimum Outdoor Air Temperature in Heating Mode {C} + 18, !- Maximum Outdoor Air Temperature in Heating Mode {C} + 7.6, !- Reference Outdoor Unit Superheating {deltaC} + 7.7, !- Reference Outdoor Unit Subcooling {deltaC} + VariableTemp, !- Refrigerant Temperature Control Algorithm for Indoor Unit + 10, !- Reference Evaporating Temperature for Indoor Unit {C} + 38.9, !- Reference Condensing Temperature for Indoor Unit {C} + 6, !- Variable Evaporating Temperature Minimum for Indoor Unit {C} + 13, !- Variable Evaporating Temperature Maximum for Indoor Unit {C} + 35, !- Variable Condensing Temperature Minimum for Indoor Unit {C} + 42, !- Variable Condensing Temperature Maximum for Indoor Unit {C} + 0.01197, !- Outdoor Unit Fan Power Per Unit of Rated Evaporative Capacity {dimensionless} + 0.000169511, !- Outdoor Unit Fan Flow Rate Per Unit of Rated Evaporative Capacity {m3/s-W} + OUEvapTempCurve, !- Outdoor Unit Evaporating Temperature Function of Superheating Curve Name + OUCondTempCurve, !- Outdoor Unit Condensing Temperature Function of Subcooling Curve Name + 0.0508, !- Diameter of Main Pipe Connecting Outdoor Unit to the First Branch Joint {m} + 10, !- Length of Main Pipe Connecting Outdoor Unit to the First Branch Joint {m} + 12, !- Equivalent Length of Main Pipe Connecting Outdoor Unit to the First Branch Joint {m} + 5, !- Height Difference Between Outdoor Unit and Indoor Units {m} + 0.02, !- Main Pipe Insulation Thickness {m} + 0.032, !- Main Pipe Insulation Thermal Conductivity {W/m-K} + 33, !- Crankcase Heater Power per Compressor {W} + 1, !- Number of Compressors {dimensionless} + 0.33, !- Ratio of Compressor Size to Total Compressor Capacity {W/W} + 7, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater {C} + , !- Defrost Strategy + , !- Defrost Control + , !- Defrost Energy Input Ratio Modifier Function of Temperature Curve Name + , !- Defrost Time Period Fraction + , !- Resistive Defrost Heater Capacity {W} + , !- Maximum Outdoor Dry-bulb Temperature for Defrost Operation {C} + 4500000, !- Compressor maximum delta Pressure {Pa} + 8, !- Number of Compressor Loading Index Entries + 1319, !- Compressor Speed at Loading Index 1 {rev/min} + Spd1Cooling, !- Loading Index 1 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd1Power, !- Loading Index 1 Compressor Power Multiplier Function of Temperature Curve Name + 1920, !- Compressor Speed at Loading Index 2 {rev/min} + Spd2Cooling, !- Loading Index 2 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd2Power, !- Loading Index 2 Compressor Power Multiplier Function of Temperature Curve Name + 2580, !- Compressor Speed at Loading Index 3 {rev/min} + Spd3Cooling, !- Loading Index 3 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd3Power, !- Loading Index 3 Compressor Power Multiplier Function of Temperature Curve Name + 3480, !- Compressor Speed at Loading Index 4 {rev/min} + Spd4Cooling, !- Loading Index 4 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd4Power, !- Loading Index 4 Compressor Power Multiplier Function of Temperature Curve Name + 4380, !- Compressor Speed at Loading Index 5 {rev/min} + Spd5Cooling, !- Loading Index 5 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd5Power, !- Loading Index 5 Compressor Power Multiplier Function of Temperature Curve Name + 4800, !- Compressor Speed at Loading Index 6 {rev/min} + Spd6Cooling, !- Loading Index 6 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd6Power, !- Loading Index 6 Compressor Power Multiplier Function of Temperature Curve Name + 5730, !- Compressor Speed at Loading Index 7 {rev/min} + Spd7Cooling, !- Loading Index 7 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd7Power, !- Loading Index 7 list + 6900, !- Compressor Speed at Loading Index 8 {rev/min} + Spd8Cooling, !- Loading Index 8 Evaporative Capacity Multiplier Function of Temperature Curve Name + Spd8Power; !- Loading Index 8 Compressor Power Multiplier Function of Temperature Curve Name + + Curve:Quadratic, + OUEvapTempCurve, !- Name + -5.0464, !- Coefficient1 Constant + 1.1194, !- Coefficient2 x + -0.0017, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 50, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + Curve:Quadratic, + OUCondTempCurve, !- Name + -0.0269, !- Coefficient1 Constant + 1.0814, !- Coefficient2 x + -0.0012, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 30, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + Curve:Biquadratic, + MinSpdCooling, !- Name + 0.1407, !- Coefficient1 Constant + -0.0006872, !- Coefficient2 x + -0.00001269, !- Coefficient3 x**2 + 0.005913, !- Coefficient4 y + 0.00007356, !- Coefficient5 y**2 + -0.00004693, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd1Cooling, !- Name + 0.2186, !- Coefficient1 Constant + -0.001577, !- Coefficient2 x + -0.000008294, !- Coefficient3 x**2 + 0.008626, !- Coefficient4 y + 0.000105, !- Coefficient5 y**2 + -0.00006976, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd2Cooling, !- Name + 0.3201, !- Coefficient1 Constant + -0.002263, !- Coefficient2 x + -0.00001064, !- Coefficient3 x**2 + 0.0125, !- Coefficient4 y + 0.0001496, !- Coefficient5 y**2 + -0.000103, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd3Cooling, !- Name + 0.4913, !- Coefficient1 Constant + -0.006415, !- Coefficient2 x + 0.00003422, !- Coefficient3 x**2 + 0.01676, !- Coefficient4 y + 0.0001999, !- Coefficient5 y**2 + -0.0001361, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd4Cooling, !- Name + 0.5808, !- Coefficient1 Constant + -0.003717, !- Coefficient2 x + -0.00001957, !- Coefficient3 x**2 + 0.02248, !- Coefficient4 y + 0.0002053, !- Coefficient5 y**2 + -0.0001921, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd5Cooling, !- Name + 0.7591, !- Coefficient1 Constant + -0.005862, !- Coefficient2 x + -0.000007698, !- Coefficient3 x**2 + 0.02731, !- Coefficient4 y + 0.0003537, !- Coefficient5 y**2 + -0.0002037, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd6Cooling, !- Name + 0.8061, !- Coefficient1 Constant + -0.005029, !- Coefficient2 x + -0.00002445, !- Coefficient3 x**2 + 0.03092, !- Coefficient4 y + 0.0003777, !- Coefficient5 y**2 + -0.0002377, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd7Cooling, !- Name + 0.8781, !- Coefficient1 Constant + -0.00156, !- Coefficient2 x + -0.00008131, !- Coefficient3 x**2 + 0.04012, !- Coefficient4 y + 0.0003905, !- Coefficient5 y**2 + -0.0003383, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd8Cooling, !- Name + 0.9687, !- Coefficient1 Constant + 0.002803, !- Coefficient2 x + -0.0001528, !- Coefficient3 x**2 + 0.0517, !- Coefficient4 y + 0.0004067, !- Coefficient5 y**2 + -0.0004648, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + MinSpdPower, !- Name + -0.0004381, !- Coefficient1 Constant + 0.001459, !- Coefficient2 x + -0.000002076, !- Coefficient3 x**2 + -0.001412, !- Coefficient4 y + -0.00002865, !- Coefficient5 y**2 + 0.00003538, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd1Power, !- Name + 0.003529, !- Coefficient1 Constant + 0.001969, !- Coefficient2 x + -0.000001219, !- Coefficient3 x**2 + -0.002001, !- Coefficient4 y + -0.00003987, !- Coefficient5 y**2 + 0.00005041, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd2Power, !- Name + 0.007864, !- Coefficient1 Constant + 0.002813, !- Coefficient2 x + -0.000002908, !- Coefficient3 x**2 + -0.002862, !- Coefficient4 y + -0.00005547, !- Coefficient5 y**2 + 0.00007219, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd3Power, !- Name + 0.05318, !- Coefficient1 Constant + 0.004007, !- Coefficient2 x + 0.00001729, !- Coefficient3 x**2 + -0.005707, !- Coefficient4 y + -0.0001153, !- Coefficient5 y**2 + 0.0001452, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd4Power, !- Name + 0.01397, !- Coefficient1 Constant + 0.009363, !- Coefficient2 x + -0.0000341, !- Coefficient3 x**2 + -0.00757, !- Coefficient4 y + -0.0001547, !- Coefficient5 y**2 + 0.0001957, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd5Power, !- Name + 0.1167, !- Coefficient1 Constant + 0.007259, !- Coefficient2 x + 0.00001968, !- Coefficient3 x**2 + -0.008029, !- Coefficient4 y + -0.0001646, !- Coefficient5 y**2 + 0.0002185, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd6Power, !- Name + 0.2574, !- Coefficient1 Constant + 0.004687, !- Coefficient2 x + 0.00008909, !- Coefficient3 x**2 + -0.009131, !- Coefficient4 y + -0.0001989, !- Coefficient5 y**2 + 0.000259, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd7Power, !- Name + 0.5701, !- Coefficient1 Constant + -0.00674, !- Coefficient2 x + 0.0002654, !- Coefficient3 x**2 + -0.00734, !- Coefficient4 y + -0.000198, !- Coefficient5 y**2 + 0.0002378, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + Spd8Power, !- Name + 0.9635, !- Coefficient1 Constant + -0.02112, !- Coefficient2 x + 0.0004872, !- Coefficient3 x**2 + -0.005087, !- Coefficient4 y + -0.0001969, !- Coefficient5 y**2 + 0.0002112, !- Coefficient6 x*y + 15, !- Minimum Value of x + 65, !- Maximum Value of x + -30, !- Minimum Value of y + 15, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +!- =========== ALL OBJECTS IN CLASS: ZONETERMINALUNITLIST =========== + + ZoneTerminalUnitList, + VRF Heat Pump TU List, !- Zone Terminal Unit List Name + TU1; !- Zone Terminal Unit Name 1 + +!- =========== ALL OBJECTS IN CLASS: ZoneHVAC:TerminalUnit:VariableRefrigerantFlow =========== + + ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, + TU1, !- Zone Terminal Unit Name + VRFAvailSched, !- Terminal Unit Availability Schedule + TU1 Inlet Node, !- Terminal Unit Air Inlet Node Name + TU1 Outlet Node, !- Terminal Unit Air Outlet Node Name + 0.595, !- Cooling Supply Air Flow Rate {m3/s} + 0, !- No Cooling Supply Air Flow Rate {m3/s} + 0.595, !- Heating Supply Air Flow Rate {m3/s} + 0, !- No Heating Supply Air Flow Rate {m3/s} + autosize, !- Cooling Outdoor Air Flow Rate {m3/s} + autosize, !- Heating Outdoor Air Flow Rate {m3/s} + 0, !- No Load Outdoor Air Flow Rate {m3/s} + VRFFanModeSchedule, !- Supply Air Fan Operating Mode Schedule Name + drawthrough, !- Supply Air Fan Placement + Fan:VariableVolume, !- Supply Air Fan Object Type + TU1 VRF Supply Fan, !- Supply Air Fan Object Name + OutdoorAir:Mixer, !- Outside Air Mixer Object Type + TU1 OA Mixer, !- Outside Air Mixer Object Name + Coil:Cooling:DX:VariableRefrigerantFlow:FluidTemperatureControl, !- Cooling Coil Object Type + TU1 VRF DX Cooling Coil, !- Cooling Coil Object Name + COIL:HEATING:DX:VARIABLEREFRIGERANTFLOW:FluidTemperatureControl, !- Heating Coil Object Type + TU1 VRF DX Heating Coil, !- Heating Coil Object Name + 30, !- Zone Terminal Unit On Parasitic Electric Energy Use {W} + 20, !- Zone Terminal Unit Off Parasitic Electric Energy Use {W} + , !- Rated Heating Capacity Sizing Ratio {W/W} + , !- Availability Manager List Name + , !- Design Specification ZoneHVAC Sizing Object Name + Coil:Heating:Electric, !- Supplemental Heating Coil Object Type + TU1 Supp Heating Coil, !- Supplemental Heating Coil Name + 50; !- Maximum Supply Air Temperature from Supplemental Heater {C} + +!- =========== ALL OBJECTS IN CLASS: COIL:HEATING:ELECTRIC =========== + + Coil:Heating:Electric, + TU1 Supp Heating Coil, !- Name + VRFAvailSched, !- Availability Schedule Name + 0.99, !- Efficiency + autosize, !- Nominal Capacity {W} + TU1 VRF Fan Outlet Node, !- Air Inlet Node Name + TU1 Outlet Node; !- Air Outlet Node Name + +! 0 means cycling fan/coil operation + + Schedule:Compact, + VRFFanModeSchedule, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 7:00,0.0, !- Field 3 + Until: 18:00,0.0, !- Field 5 + Until: 24:00,0.0; !- Field 7 + + OutdoorAir:Mixer, + TU1 OA Mixer, !- Name + TU1 VRF DX CCoil Inlet Node, !- Mixed Air Node Name + Outside Air Inlet Node 1,!- Outdoor Air Stream Node Name + Relief Air Outlet Node 1,!- Relief Air Stream Node Name + TU1 Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:NodeList, + Outside Air Inlet Node 1;!- Node or NodeList Name 1 + + Fan:VariableVolume, + TU1 VRF Supply Fan, !- Name + VRFAvailSched, !- Availability Schedule Name + 0.5, !- Fan Total Efficiency + 400, !- Pressure Rise {Pa} + 0.595, !- Maximum Flow Rate {m3/s} + FixedFlowRate, !- Fan Power Minimum Flow Rate Input Method + 0, !- Fan Power Minimum Flow Fraction + 0.415, !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1, !- Motor In Airstream Fraction + 0.09, !- Fan Power Coefficient 1 + 0, !- Fan Power Coefficient 2 + 0, !- Fan Power Coefficient 3 + 0.91, !- Fan Power Coefficient 4 + 0, !- Fan Power Coefficient 5 + TU1 VRF DX HCoil Outlet Node, !- Air Inlet Node Name + TU1 VRF Fan Outlet Node, !- Air Outlet Node Name + General; !- End-Use Subcategory + +!- =========== ALL OBJECTS IN CLASS: COIL:COOLING:DX:VARIABLEREFRIGERANTFLOW:FLUIDTEMPERATURECONTROL =========== + + Coil:Cooling:DX:VariableRefrigerantFlow:FluidTemperatureControl, + TU1 VRF DX Cooling Coil, !- Name + VRFAvailSched, !- Availability Schedule Name + TU1 VRF DX CCoil Inlet Node, !- Coil Air Inlet Node + TU1 VRF DX CCoil Outlet Node, !- Coil Air Outlet Node + 10023, !- Rated Total Cooling Capacity {W} + autosize, !- Rated Sensible Heat Ratio + 8.7, !- Indoor Unit Reference Superheating {deltaC} + IUEvapTempCurve, !- Indoor Unit Evaporating Temperature Function of Superheating Curve Name + ; !- Name of Water Storage Tank for Condensate Collection + + Curve:Quadratic, + IUEvapTempCurve, !- Name + 3.3627, !- Coefficient1 Constant + -0.1535, !- Coefficient2 x + 0.0359, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 25, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + +!- =========== ALL OBJECTS IN CLASS: COIL:HEATING:DX:VARIABLEREFRIGERANTFLOW =========== + + Coil:Heating:DX:VariableRefrigerantFlow:FluidTemperatureControl, + TU1 VRF DX Heating Coil, !- Name + VRFAvailSched, !- Availability Schedule + TU1 VRF DX CCoil Outlet Node, !- Coil Air Inlet Node + TU1 VRF DX HCoil Outlet Node, !- Coil Air Outlet Node + 10023, !- Rated Total Heating Capacity {W} + 11.5, !- Indoor Unit Reference Subcooling {deltaC} + IUCondTempCurve; !- Indoor Unit Condensing Temperature Function of Subcooling Curve Name + + Curve:Quadratic, + IUCondTempCurve, !- Name + 1.2124, !- Coefficient1 Constant + 0.1306, !- Coefficient2 x + 0.0169, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 25, !- Maximum Value of x + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + Schedule:Compact, + VRFAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 9/30, !- Field 5 + For: WeekDays, !- Field 6 + Until: 7:00,1.0, !- Field 7 + Until: 17:00,1.0, !- Field 9 + Until: 24:00,1.0, !- Field 11 + For: SummerDesignDay WinterDesignDay, !- Field 13 + Until: 24:00,1.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,1.0, !- Field 17 + Through: 12/31, !- Field 19 + For: AllDays, !- Field 20 + Until: 24:00,1.0; !- Field 21 + + ZoneHVAC:EquipmentConnections, + living_unit1, !- Zone Name + living_unit1 Eq, !- Zone Conditioning Equipment List Name + living_unit1 In Nodes, !- Zone Air Inlet Node or NodeList Name + living_unit1 Out Nodes, !- Zone Air Exhaust Node or NodeList Name + living_unit1 Node, !- Zone Air Node Name + living_unit1 Out Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + living_unit1 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, !- Zone Equipment 1 Object Type + TU1, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + NodeList, + living_unit1 In Nodes, !- Name + TU1 Outlet Node; !- Node 1 Name + + NodeList, + living_unit1 Out Nodes, !- Name + TU1 Inlet Node; !- Node 1 Name + +!- =========== ALL OBJECTS IN CLASS: FLUIDPROPERTIES:NAME =========== + + FluidProperties:Name, + R410a, !- Fluid Name + Refrigerant; !- Fluid Type + +!- =========== ALL OBJECTS IN CLASS: FLUIDPROPERTIES:TEMPERATURES =========== + + FluidProperties:Temperatures, + R410aSaturatedTemperatures, !- Name + -72.000,-69.000,-66.000,-63.000,-60.000,-57.000,-54.000, + -51.000,-48.000,-45.000,-42.000,-39.000,-36.000,-33.000, + -30.000,-27.000,-24.000,-21.000,-18.000,-15.000,-12.000, + -9.000,-6.000,-3.000,0.000,3.000,6.000,9.000, + 12.000,15.000,18.000,21.000,24.000,27.000,30.000, + 33.000,36.000,39.000,42.000,45.000,48.000,51.000, + 54.000,57.000,60.000,63.000,66.000,69.000; + + FluidProperties:Temperatures, + R410aSuperHeatTemperatures, !- Name + -72.000,-66.000,-60.000,-54.000,-48.000,-45.000,-42.000, + -39.000,-36.000,-33.000,-30.000,-27.000,-24.000,-21.000, + -18.000,-15.000,-12.000,-9.000,-6.000,-3.000,0.000, + 3.000,6.000,9.000,12.000,15.000,18.000,21.000, + 24.000,27.000,30.000,33.000,36.000,39.000,42.000, + 45.000,48.000,51.000,54.000,57.000,60.000,63.000, + 66.000,69.000; + +!- =========== ALL OBJECTS IN CLASS: FLUIDPROPERTIES:SATURATED =========== + + FluidProperties:Saturated, + R410a, !- Fluid Name + Pressure, !- Fluid Property Type + FluidGas, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 3.1238E+04,3.7717E+04,4.5248E+04,5.3954E+04,6.3963E+04,7.5412E+04,8.8445E+04, + 1.0321E+05,1.1988E+05,1.3860E+05,1.5955E+05,1.8292E+05,2.0888E+05,2.3762E+05, + 2.6935E+05,3.0426E+05,3.4257E+05,3.8449E+05,4.3024E+05,4.8004E+05,5.3412E+05, + 5.9273E+05,6.5609E+05,7.2446E+05,7.9808E+05,8.7722E+05,9.6214E+05,1.0531E+06, + 1.1504E+06,1.2543E+06,1.3651E+06,1.4831E+06,1.6086E+06,1.7419E+06,1.8834E+06, + 2.0334E+06,2.1923E+06,2.3604E+06,2.5382E+06,2.7261E+06,2.9246E+06,3.1341E+06, + 3.3552E+06,3.5886E+06,3.8348E+06,4.0949E+06,4.3697E+06,4.6607E+06; + + FluidProperties:Saturated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + Fluid, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 9.8535E+04,1.0259E+05,1.0665E+05,1.1072E+05,1.1479E+05,1.1888E+05,1.2297E+05, + 1.2707E+05,1.3119E+05,1.3532E+05,1.3947E+05,1.4363E+05,1.4782E+05,1.5202E+05, + 1.5624E+05,1.6048E+05,1.6475E+05,1.6904E+05,1.7337E+05,1.7772E+05,1.8210E+05, + 1.8652E+05,1.9097E+05,1.9547E+05,2.0000E+05,2.0458E+05,2.0920E+05,2.1388E+05, + 2.1861E+05,2.2340E+05,2.2825E+05,2.3316E+05,2.3815E+05,2.4322E+05,2.4838E+05, + 2.5363E+05,2.5899E+05,2.6447E+05,2.7008E+05,2.7585E+05,2.8180E+05,2.8797E+05, + 2.9441E+05,3.0120E+05,3.0848E+05,3.1650E+05,3.2578E+05,3.3815E+05; + + FluidProperties:Saturated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + FluidGas, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 3.8813E+05,3.8981E+05,3.9148E+05,3.9313E+05,3.9476E+05,3.9637E+05,3.9796E+05, + 3.9953E+05,4.0108E+05,4.0260E+05,4.0410E+05,4.0557E+05,4.0701E+05,4.0842E+05, + 4.0980E+05,4.1114E+05,4.1245E+05,4.1373E+05,4.1496E+05,4.1615E+05,4.1730E+05, + 4.1840E+05,4.1945E+05,4.2045E+05,4.2139E+05,4.2227E+05,4.2308E+05,4.2382E+05, + 4.2448E+05,4.2507E+05,4.2556E+05,4.2595E+05,4.2624E+05,4.2641E+05,4.2646E+05, + 4.2635E+05,4.2609E+05,4.2564E+05,4.2498E+05,4.2408E+05,4.2290E+05,4.2137E+05, + 4.1941E+05,4.1692E+05,4.1370E+05,4.0942E+05,4.0343E+05,3.9373E+05; + + FluidProperties:Saturated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + Fluid, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 1.4127E+03,1.4036E+03,1.3946E+03,1.3854E+03,1.3762E+03,1.3669E+03,1.3576E+03, + 1.3482E+03,1.3387E+03,1.3291E+03,1.3194E+03,1.3097E+03,1.2998E+03,1.2898E+03, + 1.2797E+03,1.2694E+03,1.2591E+03,1.2486E+03,1.2379E+03,1.2271E+03,1.2160E+03, + 1.2048E+03,1.1934E+03,1.1818E+03,1.1699E+03,1.1578E+03,1.1454E+03,1.1328E+03, + 1.1197E+03,1.1064E+03,1.0927E+03,1.0785E+03,1.0639E+03,1.0488E+03,1.0331E+03, + 1.0167E+03,9.9971E+02,9.8187E+02,9.6308E+02,9.4319E+02,9.2198E+02,8.9916E+02, + 8.7429E+02,8.4672E+02,8.1537E+02,7.7825E+02,7.3095E+02,6.5903E+02; + + FluidProperties:Saturated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + FluidGas, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 1.3845E+00,1.6517E+00,1.9588E+00,2.3100E+00,2.7097E+00,3.1627E+00,3.6737E+00, + 4.2482E+00,4.8916E+00,5.6098E+00,6.4088E+00,7.2952E+00,8.2758E+00,9.3578E+00, + 1.0549E+01,1.1857E+01,1.3292E+01,1.4861E+01,1.6576E+01,1.8447E+01,2.0485E+01, + 2.2702E+01,2.5113E+01,2.7732E+01,3.0575E+01,3.3659E+01,3.7005E+01,4.0634E+01, + 4.4571E+01,4.8844E+01,5.3483E+01,5.8525E+01,6.4012E+01,6.9991E+01,7.6520E+01, + 8.3666E+01,9.1511E+01,1.0016E+02,1.0973E+02,1.2038E+02,1.3233E+02,1.4585E+02, + 1.6135E+02,1.7940E+02,2.0095E+02,2.2766E+02,2.6301E+02,3.1759E+02; + + FluidProperties:Saturated, + R410a, !- Fluid Name + SpecificHeat, !- Fluid Property Type + Fluid, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 1.3499E+03,1.3515E+03,1.3534E+03,1.3557E+03,1.3584E+03,1.3614E+03,1.3648E+03, + 1.3686E+03,1.3728E+03,1.3774E+03,1.3825E+03,1.3881E+03,1.3941E+03,1.4007E+03, + 1.4078E+03,1.4155E+03,1.4238E+03,1.4327E+03,1.4424E+03,1.4527E+03,1.4639E+03, + 1.4759E+03,1.4888E+03,1.5027E+03,1.5177E+03,1.5340E+03,1.5515E+03,1.5706E+03, + 1.5914E+03,1.6141E+03,1.6390E+03,1.6664E+03,1.6968E+03,1.7307E+03,1.7689E+03, + 1.8123E+03,1.8622E+03,1.9204E+03,1.9895E+03,2.0732E+03,2.1774E+03,2.3116E+03, + 2.4924E+03,2.7507E+03,3.1534E+03,3.8723E+03,5.5190E+03,1.2701E+04; + + FluidProperties:Saturated, + R410a, !- Fluid Name + SpecificHeat, !- Fluid Property Type + FluidGas, !- Fluid Phase + R410aSaturatedTemperatures, !- Temperature Values Name + 7.2387E+02,7.3519E+02,7.4693E+02,7.5910E+02,7.7167E+02,7.8465E+02,7.9802E+02, + 8.1178E+02,8.2594E+02,8.4050E+02,8.5546E+02,8.7085E+02,8.8668E+02,9.0298E+02, + 9.1979E+02,9.3715E+02,9.5511E+02,9.7372E+02,9.9307E+02,1.0132E+03,1.0343E+03, + 1.0564E+03,1.0796E+03,1.1042E+03,1.1302E+03,1.1580E+03,1.1877E+03,1.2196E+03, + 1.2541E+03,1.2917E+03,1.3329E+03,1.3783E+03,1.4287E+03,1.4853E+03,1.5494E+03, + 1.6228E+03,1.7078E+03,1.8078E+03,1.9274E+03,2.0735E+03,2.2562E+03,2.4922E+03, + 2.8094E+03,3.2596E+03,3.9504E+03,5.1465E+03,7.7185E+03,1.7076E+04; + +!- =========== ALL OBJECTS IN CLASS: FLUIDPROPERTIES:SUPERHEATED =========== + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.1238E+04, !- Pressure {Pa} + 3.8813E+05,3.9245E+05,3.9675E+05,4.0105E+05,4.0536E+05,4.0753E+05,4.0970E+05, + 4.1189E+05,4.1408E+05,4.1628E+05,4.1849E+05,4.2071E+05,4.2294E+05,4.2518E+05, + 4.2743E+05,4.2969E+05,4.3196E+05,4.3425E+05,4.3655E+05,4.3885E+05,4.4118E+05, + 4.4351E+05,4.4586E+05,4.4821E+05,4.5058E+05,4.5297E+05,4.5536E+05,4.5777E+05, + 4.6020E+05,4.6263E+05,4.6508E+05,4.6754E+05,4.7002E+05,4.7251E+05,4.7501E+05, + 4.7752E+05,4.8005E+05,4.8259E+05,4.8515E+05,4.8772E+05,4.9030E+05,4.9290E+05, + 4.9551E+05,4.9813E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.1238E+04, !- Pressure {Pa} + 1.3845E+00,1.3404E+00,1.2997E+00,1.2617E+00,1.2262E+00,1.2092E+00,1.1928E+00, + 1.1768E+00,1.1613E+00,1.1462E+00,1.1316E+00,1.1173E+00,1.1034E+00,1.0898E+00, + 1.0766E+00,1.0638E+00,1.0512E+00,1.0390E+00,1.0271E+00,1.0154E+00,1.0040E+00, + 9.9285E-01,9.8197E-01,9.7133E-01,9.6093E-01,9.5075E-01,9.4079E-01,9.3104E-01, + 9.2150E-01,9.1215E-01,9.0299E-01,8.9403E-01,8.8524E-01,8.7662E-01,8.6817E-01, + 8.5989E-01,8.5177E-01,8.4380E-01,8.3598E-01,8.2831E-01,8.2077E-01,8.1338E-01, + 8.0612E-01,7.9899E-01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.5248E+04, !- Pressure {Pa} + 0.0000E+00,3.9148E+05,3.9593E+05,4.0034E+05,4.0474E+05,4.0694E+05,4.0915E+05, + 4.1136E+05,4.1358E+05,4.1580E+05,4.1803E+05,4.2027E+05,4.2252E+05,4.2478E+05, + 4.2705E+05,4.2933E+05,4.3161E+05,4.3391E+05,4.3622E+05,4.3854E+05,4.4088E+05, + 4.4322E+05,4.4558E+05,4.4794E+05,4.5032E+05,4.5272E+05,4.5512E+05,4.5754E+05, + 4.5997E+05,4.6241E+05,4.6486E+05,4.6733E+05,4.6981E+05,4.7231E+05,4.7481E+05, + 4.7733E+05,4.7987E+05,4.8241E+05,4.8497E+05,4.8755E+05,4.9013E+05,4.9273E+05, + 4.9535E+05,4.9797E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.5248E+04, !- Pressure {Pa} + 0.0000E+00,1.9588E+00,1.8968E+00,1.8395E+00,1.7863E+00,1.7610E+00,1.7365E+00, + 1.7128E+00,1.6898E+00,1.6674E+00,1.6457E+00,1.6246E+00,1.6041E+00,1.5842E+00, + 1.5647E+00,1.5458E+00,1.5273E+00,1.5093E+00,1.4918E+00,1.4747E+00,1.4580E+00, + 1.4416E+00,1.4257E+00,1.4101E+00,1.3949E+00,1.3800E+00,1.3654E+00,1.3512E+00, + 1.3372E+00,1.3236E+00,1.3102E+00,1.2971E+00,1.2843E+00,1.2717E+00,1.2594E+00, + 1.2473E+00,1.2355E+00,1.2239E+00,1.2125E+00,1.2013E+00,1.1903E+00,1.1796E+00, + 1.1690E+00,1.1586E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 6.3963E+04, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,3.9476E+05,3.9935E+05,4.0388E+05,4.0614E+05,4.0839E+05, + 4.1064E+05,4.1290E+05,4.1516E+05,4.1742E+05,4.1969E+05,4.2196E+05,4.2425E+05, + 4.2654E+05,4.2884E+05,4.3114E+05,4.3346E+05,4.3579E+05,4.3813E+05,4.4047E+05, + 4.4283E+05,4.4520E+05,4.4758E+05,4.4997E+05,4.5238E+05,4.5479E+05,4.5722E+05, + 4.5966E+05,4.6211E+05,4.6457E+05,4.6705E+05,4.6954E+05,4.7204E+05,4.7455E+05, + 4.7708E+05,4.7962E+05,4.8217E+05,4.8474E+05,4.8732E+05,4.8991E+05,4.9252E+05, + 4.9513E+05,4.9777E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 6.3963E+04, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,2.7097E+00,2.6240E+00,2.5451E+00,2.5078E+00,2.4718E+00, + 2.4370E+00,2.4034E+00,2.3708E+00,2.3393E+00,2.3086E+00,2.2789E+00,2.2500E+00, + 2.2219E+00,2.1945E+00,2.1679E+00,2.1420E+00,2.1167E+00,2.0921E+00,2.0681E+00, + 2.0446E+00,2.0217E+00,1.9994E+00,1.9776E+00,1.9562E+00,1.9354E+00,1.9150E+00, + 1.8950E+00,1.8755E+00,1.8564E+00,1.8377E+00,1.8194E+00,1.8014E+00,1.7839E+00, + 1.7666E+00,1.7497E+00,1.7332E+00,1.7169E+00,1.7010E+00,1.6854E+00,1.6700E+00, + 1.6550E+00,1.6402E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 8.8445E+04, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,3.9796E+05,4.0270E+05,4.0503E+05,4.0736E+05, + 4.0967E+05,4.1198E+05,4.1429E+05,4.1660E+05,4.1891E+05,4.2122E+05,4.2354E+05, + 4.2586E+05,4.2819E+05,4.3052E+05,4.3286E+05,4.3521E+05,4.3757E+05,4.3994E+05, + 4.4232E+05,4.4470E+05,4.4710E+05,4.4951E+05,4.5193E+05,4.5436E+05,4.5680E+05, + 4.5925E+05,4.6171E+05,4.6419E+05,4.6668E+05,4.6918E+05,4.7169E+05,4.7421E+05, + 4.7675E+05,4.7930E+05,4.8186E+05,4.8443E+05,4.8702E+05,4.8962E+05,4.9223E+05, + 4.9486E+05,4.9749E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 8.8445E+04, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,3.6737E+00,3.5570E+00,3.5024E+00,3.4500E+00, + 3.3995E+00,3.3509E+00,3.3039E+00,3.2585E+00,3.2146E+00,3.1720E+00,3.1308E+00, + 3.0907E+00,3.0518E+00,3.0140E+00,2.9772E+00,2.9414E+00,2.9065E+00,2.8726E+00, + 2.8395E+00,2.8072E+00,2.7757E+00,2.7449E+00,2.7149E+00,2.6856E+00,2.6569E+00, + 2.6289E+00,2.6015E+00,2.5747E+00,2.5485E+00,2.5228E+00,2.4977E+00,2.4731E+00, + 2.4490E+00,2.4254E+00,2.4022E+00,2.3795E+00,2.3573E+00,2.3354E+00,2.3140E+00, + 2.2930E+00,2.2724E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.1988E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.0108E+05,4.0354E+05,4.0597E+05, + 4.0838E+05,4.1077E+05,4.1315E+05,4.1552E+05,4.1788E+05,4.2025E+05,4.2261E+05, + 4.2497E+05,4.2734E+05,4.2971E+05,4.3209E+05,4.3447E+05,4.3685E+05,4.3925E+05, + 4.4165E+05,4.4406E+05,4.4648E+05,4.4891E+05,4.5135E+05,4.5380E+05,4.5626E+05, + 4.5873E+05,4.6121E+05,4.6370E+05,4.6620E+05,4.6871E+05,4.7124E+05,4.7377E+05, + 4.7632E+05,4.7888E+05,4.8145E+05,4.8404E+05,4.8663E+05,4.8924E+05,4.9186E+05, + 4.9450E+05,4.9715E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.1988E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.8918E+00,4.8116E+00,4.7352E+00, + 4.6621E+00,4.5920E+00,4.5247E+00,4.4599E+00,4.3974E+00,4.3370E+00,4.2787E+00, + 4.2221E+00,4.1674E+00,4.1143E+00,4.0627E+00,4.0126E+00,3.9639E+00,3.9165E+00, + 3.8704E+00,3.8255E+00,3.7817E+00,3.7390E+00,3.6974E+00,3.6567E+00,3.6171E+00, + 3.5783E+00,3.5405E+00,3.5035E+00,3.4673E+00,3.4319E+00,3.3973E+00,3.3634E+00, + 3.3302E+00,3.2977E+00,3.2659E+00,3.2347E+00,3.2041E+00,3.1742E+00,3.1448E+00, + 3.1160E+00,3.0877E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.3860E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.0260E+05,4.0510E+05, + 4.0757E+05,4.1002E+05,4.1244E+05,4.1485E+05,4.1726E+05,4.1965E+05,4.2204E+05, + 4.2444E+05,4.2683E+05,4.2922E+05,4.3162E+05,4.3402E+05,4.3642E+05,4.3883E+05, + 4.4125E+05,4.4368E+05,4.4611E+05,4.4855E+05,4.5100E+05,4.5346E+05,4.5593E+05, + 4.5841E+05,4.6090E+05,4.6340E+05,4.6591E+05,4.6843E+05,4.7097E+05,4.7351E+05, + 4.7606E+05,4.7863E+05,4.8121E+05,4.8380E+05,4.8640E+05,4.8902E+05,4.9165E+05, + 4.9428E+05,4.9694E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.3860E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,5.6098E+00,5.5173E+00, + 5.4293E+00,5.3451E+00,5.2645E+00,5.1871E+00,5.1127E+00,5.0409E+00,4.9717E+00, + 4.9047E+00,4.8399E+00,4.7772E+00,4.7163E+00,4.6573E+00,4.5999E+00,4.5442E+00, + 4.4900E+00,4.4372E+00,4.3859E+00,4.3358E+00,4.2870E+00,4.2394E+00,4.1930E+00, + 4.1476E+00,4.1033E+00,4.0601E+00,4.0178E+00,3.9765E+00,3.9360E+00,3.8965E+00, + 3.8578E+00,3.8199E+00,3.7828E+00,3.7464E+00,3.7108E+00,3.6759E+00,3.6417E+00, + 3.6081E+00,3.5752E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.5955E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.0410E+05, + 4.0664E+05,4.0915E+05,4.1163E+05,4.1409E+05,4.1654E+05,4.1898E+05,4.2140E+05, + 4.2383E+05,4.2625E+05,4.2867E+05,4.3109E+05,4.3351E+05,4.3593E+05,4.3836E+05, + 4.4080E+05,4.4324E+05,4.4569E+05,4.4815E+05,4.5061E+05,4.5309E+05,4.5557E+05, + 4.5806E+05,4.6056E+05,4.6307E+05,4.6559E+05,4.6812E+05,4.7066E+05,4.7321E+05, + 4.7578E+05,4.7835E+05,4.8094E+05,4.8354E+05,4.8615E+05,4.8877E+05,4.9140E+05, + 4.9404E+05,4.9670E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.5955E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,6.4087E+00, + 6.3023E+00,6.2010E+00,6.1045E+00,6.0120E+00,5.9233E+00,5.8380E+00,5.7559E+00, + 5.6767E+00,5.6001E+00,5.5261E+00,5.4544E+00,5.3850E+00,5.3176E+00,5.2521E+00, + 5.1885E+00,5.1267E+00,5.0666E+00,5.0080E+00,4.9509E+00,4.8953E+00,4.8411E+00, + 4.7882E+00,4.7366E+00,4.6862E+00,4.6369E+00,4.5888E+00,4.5417E+00,4.4957E+00, + 4.4507E+00,4.4066E+00,4.3635E+00,4.3212E+00,4.2799E+00,4.2393E+00,4.1996E+00, + 4.1607E+00,4.1225E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.8292E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.0557E+05,4.0816E+05,4.1071E+05,4.1323E+05,4.1573E+05,4.1821E+05,4.2068E+05, + 4.2313E+05,4.2559E+05,4.2804E+05,4.3049E+05,4.3293E+05,4.3538E+05,4.3784E+05, + 4.4029E+05,4.4275E+05,4.4522E+05,4.4769E+05,4.5017E+05,4.5266E+05,4.5516E+05, + 4.5766E+05,4.6017E+05,4.6270E+05,4.6523E+05,4.6777E+05,4.7032E+05,4.7288E+05, + 4.7546E+05,4.7804E+05,4.8063E+05,4.8324E+05,4.8586E+05,4.8848E+05,4.9112E+05, + 4.9378E+05,4.9644E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.8292E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 7.2953E+00,7.1732E+00,7.0571E+00,6.9465E+00,6.8408E+00,6.7394E+00,6.6420E+00, + 6.5482E+00,6.4578E+00,6.3706E+00,6.2862E+00,6.2046E+00,6.1255E+00,6.0488E+00, + 5.9743E+00,5.9020E+00,5.8317E+00,5.7633E+00,5.6968E+00,5.6320E+00,5.5688E+00, + 5.5072E+00,5.4472E+00,5.3885E+00,5.3313E+00,5.2754E+00,5.2208E+00,5.1674E+00, + 5.1152E+00,5.0641E+00,5.0141E+00,4.9652E+00,4.9173E+00,4.8703E+00,4.8244E+00, + 4.7793E+00,4.7352E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.0888E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,4.0701E+05,4.0964E+05,4.1224E+05,4.1480E+05,4.1733E+05,4.1985E+05, + 4.2235E+05,4.2485E+05,4.2733E+05,4.2981E+05,4.3229E+05,4.3477E+05,4.3724E+05, + 4.3972E+05,4.4221E+05,4.4469E+05,4.4719E+05,4.4968E+05,4.5219E+05,4.5470E+05, + 4.5722E+05,4.5974E+05,4.6228E+05,4.6482E+05,4.6738E+05,4.6994E+05,4.7251E+05, + 4.7510E+05,4.7769E+05,4.8029E+05,4.8291E+05,4.8553E+05,4.8817E+05,4.9082E+05, + 4.9348E+05,4.9615E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.0888E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,8.2759E+00,8.1361E+00,8.0034E+00,7.8770E+00,7.7563E+00,7.6407E+00, + 7.5297E+00,7.4230E+00,7.3201E+00,7.2209E+00,7.1251E+00,7.0323E+00,6.9425E+00, + 6.8555E+00,6.7710E+00,6.6890E+00,6.6093E+00,6.5318E+00,6.4564E+00,6.3830E+00, + 6.3115E+00,6.2417E+00,6.1738E+00,6.1074E+00,6.0426E+00,5.9794E+00,5.9176E+00, + 5.8572E+00,5.7981E+00,5.7404E+00,5.6839E+00,5.6286E+00,5.5744E+00,5.5214E+00, + 5.4694E+00,5.4185E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.3762E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.0842E+05,4.1110E+05,4.1374E+05,4.1634E+05,4.1892E+05, + 4.2147E+05,4.2401E+05,4.2654E+05,4.2905E+05,4.3157E+05,4.3407E+05,4.3658E+05, + 4.3909E+05,4.4159E+05,4.4410E+05,4.4662E+05,4.4914E+05,4.5166E+05,4.5419E+05, + 4.5672E+05,4.5927E+05,4.6182E+05,4.6437E+05,4.6694E+05,4.6952E+05,4.7210E+05, + 4.7470E+05,4.7730E+05,4.7992E+05,4.8254E+05,4.8517E+05,4.8782E+05,4.9048E+05, + 4.9315E+05,4.9582E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.3762E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,9.3578E+00,9.1979E+00,9.0465E+00,8.9024E+00,8.7650E+00, + 8.6335E+00,8.5073E+00,8.3861E+00,8.2694E+00,8.1569E+00,8.0482E+00,7.9431E+00, + 7.8414E+00,7.7429E+00,7.6473E+00,7.5546E+00,7.4645E+00,7.3769E+00,7.2917E+00, + 7.2088E+00,7.1280E+00,7.0493E+00,6.9726E+00,6.8977E+00,6.8246E+00,6.7533E+00, + 6.6836E+00,6.6155E+00,6.5489E+00,6.4838E+00,6.4200E+00,6.3577E+00,6.2967E+00, + 6.2369E+00,6.1783E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.6935E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.0980E+05,4.1253E+05,4.1521E+05,4.1786E+05, + 4.2047E+05,4.2307E+05,4.2564E+05,4.2820E+05,4.3075E+05,4.3330E+05,4.3584E+05, + 4.3837E+05,4.4091E+05,4.4345E+05,4.4599E+05,4.4853E+05,4.5107E+05,4.5362E+05, + 4.5617E+05,4.5873E+05,4.6130E+05,4.6388E+05,4.6646E+05,4.6905E+05,4.7165E+05, + 4.7425E+05,4.7687E+05,4.7950E+05,4.8213E+05,4.8478E+05,4.8743E+05,4.9010E+05, + 4.9278E+05,4.9546E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.6935E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,1.0549E+01,1.0367E+01,1.0194E+01,1.0030E+01, + 9.8741E+00,9.7248E+00,9.5817E+00,9.4443E+00,9.3122E+00,9.1848E+00,9.0619E+00, + 8.9431E+00,8.8282E+00,8.7170E+00,8.6091E+00,8.5045E+00,8.4029E+00,8.3042E+00, + 8.2081E+00,8.1147E+00,8.0237E+00,7.9351E+00,7.8487E+00,7.7644E+00,7.6822E+00, + 7.6019E+00,7.5235E+00,7.4469E+00,7.3721E+00,7.2989E+00,7.2273E+00,7.1572E+00, + 7.0886E+00,7.0214E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.0426E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1114E+05,4.1392E+05,4.1665E+05, + 4.1934E+05,4.2200E+05,4.2463E+05,4.2725E+05,4.2984E+05,4.3243E+05,4.3501E+05, + 4.3758E+05,4.4015E+05,4.4272E+05,4.4528E+05,4.4785E+05,4.5042E+05,4.5299E+05, + 4.5556E+05,4.5814E+05,4.6073E+05,4.6332E+05,4.6592E+05,4.6853E+05,4.7114E+05, + 4.7376E+05,4.7639E+05,4.7903E+05,4.8168E+05,4.8434E+05,4.8701E+05,4.8968E+05, + 4.9237E+05,4.9507E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.0426E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.1857E+01,1.1650E+01,1.1453E+01, + 1.1267E+01,1.1090E+01,1.0921E+01,1.0759E+01,1.0604E+01,1.0454E+01,1.0310E+01, + 1.0172E+01,1.0038E+01,9.9083E+00,9.7830E+00,9.6615E+00,9.5438E+00,9.4294E+00, + 9.3184E+00,9.2104E+00,9.1054E+00,9.0032E+00,8.9037E+00,8.8067E+00,8.7121E+00, + 8.6198E+00,8.5297E+00,8.4418E+00,8.3559E+00,8.2719E+00,8.1898E+00,8.1095E+00, + 8.0310E+00,7.9541E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.4257E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1245E+05,4.1529E+05, + 4.1807E+05,4.2080E+05,4.2350E+05,4.2617E+05,4.2883E+05,4.3146E+05,4.3408E+05, + 4.3670E+05,4.3930E+05,4.4190E+05,4.4450E+05,4.4709E+05,4.4969E+05,4.5229E+05, + 4.5489E+05,4.5749E+05,4.6010E+05,4.6271E+05,4.6533E+05,4.6795E+05,4.7058E+05, + 4.7322E+05,4.7587E+05,4.7852E+05,4.8118E+05,4.8385E+05,4.8653E+05,4.8922E+05, + 4.9192E+05,4.9463E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.4257E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.3292E+01,1.3056E+01, + 1.2833E+01,1.2622E+01,1.2421E+01,1.2230E+01,1.2047E+01,1.1871E+01,1.1703E+01, + 1.1541E+01,1.1385E+01,1.1234E+01,1.1088E+01,1.0947E+01,1.0811E+01,1.0678E+01, + 1.0550E+01,1.0425E+01,1.0304E+01,1.0187E+01,1.0072E+01,9.9605E+00,9.8518E+00, + 9.7459E+00,9.6426E+00,9.5417E+00,9.4433E+00,9.3472E+00,9.2533E+00,9.1615E+00, + 9.0717E+00,8.9839E+00; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.8449E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1373E+05, + 4.1661E+05,4.1944E+05,4.2222E+05,4.2497E+05,4.2768E+05,4.3038E+05,4.3305E+05, + 4.3571E+05,4.3836E+05,4.4100E+05,4.4363E+05,4.4626E+05,4.4889E+05,4.5151E+05, + 4.5414E+05,4.5677E+05,4.5940E+05,4.6203E+05,4.6467E+05,4.6732E+05,4.6997E+05, + 4.7262E+05,4.7529E+05,4.7796E+05,4.8063E+05,4.8332E+05,4.8601E+05,4.8872E+05, + 4.9143E+05,4.9415E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.8449E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.4861E+01, + 1.4593E+01,1.4341E+01,1.4102E+01,1.3875E+01,1.3659E+01,1.3452E+01,1.3255E+01, + 1.3065E+01,1.2882E+01,1.2707E+01,1.2537E+01,1.2374E+01,1.2216E+01,1.2063E+01, + 1.1914E+01,1.1771E+01,1.1631E+01,1.1495E+01,1.1364E+01,1.1236E+01,1.1111E+01, + 1.0989E+01,1.0871E+01,1.0755E+01,1.0643E+01,1.0533E+01,1.0426E+01,1.0321E+01, + 1.0218E+01,1.0118E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.3024E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.1496E+05,4.1790E+05,4.2078E+05,4.2361E+05,4.2641E+05,4.2916E+05,4.3190E+05, + 4.3461E+05,4.3731E+05,4.3999E+05,4.4267E+05,4.4533E+05,4.4800E+05,4.5066E+05, + 4.5331E+05,4.5597E+05,4.5863E+05,4.6129E+05,4.6395E+05,4.6662E+05,4.6929E+05, + 4.7197E+05,4.7465E+05,4.7734E+05,4.8003E+05,4.8273E+05,4.8544E+05,4.8816E+05, + 4.9089E+05,4.9362E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.3024E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 1.6576E+01,1.6272E+01,1.5986E+01,1.5716E+01,1.5460E+01,1.5216E+01,1.4983E+01, + 1.4761E+01,1.4547E+01,1.4343E+01,1.4145E+01,1.3955E+01,1.3772E+01,1.3595E+01, + 1.3424E+01,1.3258E+01,1.3097E+01,1.2941E+01,1.2789E+01,1.2642E+01,1.2499E+01, + 1.2360E+01,1.2224E+01,1.2092E+01,1.1964E+01,1.1838E+01,1.1716E+01,1.1596E+01, + 1.1480E+01,1.1365E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.8004E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,4.1615E+05,4.1915E+05,4.2209E+05,4.2497E+05,4.2781E+05,4.3061E+05, + 4.3339E+05,4.3614E+05,4.3888E+05,4.4160E+05,4.4431E+05,4.4701E+05,4.4971E+05, + 4.5240E+05,4.5509E+05,4.5778E+05,4.6047E+05,4.6316E+05,4.6585E+05,4.6855E+05, + 4.7124E+05,4.7395E+05,4.7666E+05,4.7937E+05,4.8209E+05,4.8482E+05,4.8755E+05, + 4.9029E+05,4.9304E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.8004E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,1.8447E+01,1.8102E+01,1.7778E+01,1.7473E+01,1.7184E+01,1.6910E+01, + 1.6648E+01,1.6398E+01,1.6158E+01,1.5928E+01,1.5707E+01,1.5495E+01,1.5289E+01, + 1.5091E+01,1.4900E+01,1.4715E+01,1.4535E+01,1.4361E+01,1.4192E+01,1.4028E+01, + 1.3869E+01,1.3714E+01,1.3563E+01,1.3416E+01,1.3273E+01,1.3133E+01,1.2997E+01, + 1.2864E+01,1.2734E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 5.3412E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.1730E+05,4.2036E+05,4.2335E+05,4.2629E+05,4.2917E+05, + 4.3202E+05,4.3485E+05,4.3764E+05,4.4042E+05,4.4318E+05,4.4593E+05,4.4867E+05, + 4.5140E+05,4.5413E+05,4.5685E+05,4.5957E+05,4.6229E+05,4.6501E+05,4.6773E+05, + 4.7045E+05,4.7318E+05,4.7591E+05,4.7865E+05,4.8139E+05,4.8413E+05,4.8689E+05, + 4.8965E+05,4.9241E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 5.3412E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,2.0485E+01,2.0094E+01,1.9728E+01,1.9383E+01,1.9058E+01, + 1.8749E+01,1.8455E+01,1.8174E+01,1.7905E+01,1.7648E+01,1.7400E+01,1.7162E+01, + 1.6933E+01,1.6712E+01,1.6498E+01,1.6292E+01,1.6092E+01,1.5898E+01,1.5710E+01, + 1.5527E+01,1.5350E+01,1.5178E+01,1.5010E+01,1.4847E+01,1.4688E+01,1.4533E+01, + 1.4382E+01,1.4234E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 5.9273E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.1840E+05,4.2153E+05,4.2458E+05,4.2756E+05, + 4.3050E+05,4.3340E+05,4.3627E+05,4.3911E+05,4.4193E+05,4.4473E+05,4.4752E+05, + 4.5029E+05,4.5306E+05,4.5582E+05,4.5858E+05,4.6133E+05,4.6408E+05,4.6683E+05, + 4.6959E+05,4.7234E+05,4.7509E+05,4.7785E+05,4.8062E+05,4.8338E+05,4.8616E+05, + 4.8894E+05,4.9172E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 5.9273E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,2.2703E+01,2.2260E+01,2.1846E+01,2.1458E+01, + 2.1091E+01,2.0744E+01,2.0413E+01,2.0098E+01,1.9798E+01,1.9509E+01,1.9233E+01, + 1.8967E+01,1.8711E+01,1.8465E+01,1.8227E+01,1.7996E+01,1.7774E+01,1.7558E+01, + 1.7349E+01,1.7146E+01,1.6950E+01,1.6758E+01,1.6572E+01,1.6391E+01,1.6215E+01, + 1.6043E+01,1.5876E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 6.5609E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1945E+05,4.2264E+05,4.2575E+05, + 4.2880E+05,4.3179E+05,4.3474E+05,4.3765E+05,4.4054E+05,4.4340E+05,4.4625E+05, + 4.4907E+05,4.5189E+05,4.5469E+05,4.5749E+05,4.6028E+05,4.6307E+05,4.6585E+05, + 4.6864E+05,4.7142E+05,4.7420E+05,4.7699E+05,4.7978E+05,4.8257E+05,4.8536E+05, + 4.8816E+05,4.9097E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 6.5609E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,2.5113E+01,2.4612E+01,2.4145E+01, + 2.3707E+01,2.3294E+01,2.2904E+01,2.2533E+01,2.2180E+01,2.1844E+01,2.1522E+01, + 2.1213E+01,2.0916E+01,2.0631E+01,2.0356E+01,2.0091E+01,1.9836E+01,1.9588E+01, + 1.9349E+01,1.9117E+01,1.8892E+01,1.8673E+01,1.8461E+01,1.8255E+01,1.8055E+01, + 1.7860E+01,1.7670E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 7.2446E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2045E+05,4.2371E+05, + 4.2688E+05,4.2999E+05,4.3304E+05,4.3604E+05,4.3900E+05,4.4194E+05,4.4484E+05, + 4.4773E+05,4.5060E+05,4.5345E+05,4.5630E+05,4.5913E+05,4.6196E+05,4.6478E+05, + 4.6760E+05,4.7041E+05,4.7323E+05,4.7604E+05,4.7886E+05,4.8168E+05,4.8450E+05, + 4.8732E+05,4.9015E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 7.2446E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,2.7732E+01,2.7164E+01, + 2.6636E+01,2.6143E+01,2.5678E+01,2.5240E+01,2.4825E+01,2.4430E+01,2.4053E+01, + 2.3694E+01,2.3349E+01,2.3019E+01,2.2701E+01,2.2396E+01,2.2101E+01,2.1817E+01, + 2.1542E+01,2.1277E+01,2.1019E+01,2.0770E+01,2.0529E+01,2.0294E+01,2.0066E+01, + 1.9844E+01,1.9629E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 7.9808E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2139E+05, + 4.2472E+05,4.2797E+05,4.3113E+05,4.3424E+05,4.3730E+05,4.4031E+05,4.4329E+05, + 4.4625E+05,4.4918E+05,4.5209E+05,4.5499E+05,4.5787E+05,4.6074E+05,4.6361E+05, + 4.6646E+05,4.6932E+05,4.7217E+05,4.7502E+05,4.7786E+05,4.8071E+05,4.8356E+05, + 4.8641E+05,4.8926E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 7.9808E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,3.0574E+01, + 2.9931E+01,2.9335E+01,2.8779E+01,2.8257E+01,2.7765E+01,2.7299E+01,2.6857E+01, + 2.6436E+01,2.6035E+01,2.5651E+01,2.5283E+01,2.4930E+01,2.4590E+01,2.4263E+01, + 2.3948E+01,2.3644E+01,2.3349E+01,2.3065E+01,2.2789E+01,2.2521E+01,2.2262E+01, + 2.2010E+01,2.1766E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 8.7722E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.2227E+05,4.2568E+05,4.2899E+05,4.3223E+05,4.3540E+05,4.3851E+05,4.4158E+05, + 4.4461E+05,4.4761E+05,4.5059E+05,4.5355E+05,4.5649E+05,4.5941E+05,4.6232E+05, + 4.6523E+05,4.6812E+05,4.7101E+05,4.7389E+05,4.7678E+05,4.7966E+05,4.8254E+05, + 4.8542E+05,4.8830E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 8.7722E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 3.3659E+01,3.2930E+01,3.2256E+01,3.1629E+01,3.1042E+01,3.0490E+01,2.9968E+01, + 2.9474E+01,2.9004E+01,2.8557E+01,2.8129E+01,2.7720E+01,2.7327E+01,2.6950E+01, + 2.6587E+01,2.6238E+01,2.5900E+01,2.5575E+01,2.5260E+01,2.4955E+01,2.4660E+01, + 2.4374E+01,2.4096E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 9.6214E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,4.2308E+05,4.2658E+05,4.2997E+05,4.3327E+05,4.3650E+05,4.3968E+05, + 4.4280E+05,4.4589E+05,4.4894E+05,4.5197E+05,4.5497E+05,4.5795E+05,4.6092E+05, + 4.6387E+05,4.6681E+05,4.6975E+05,4.7267E+05,4.7559E+05,4.7851E+05,4.8142E+05, + 4.8434E+05,4.8725E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 9.6214E+05, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,3.7005E+01,3.6178E+01,3.5416E+01,3.4709E+01,3.4049E+01,3.3429E+01, + 3.2845E+01,3.2292E+01,3.1768E+01,3.1269E+01,3.0793E+01,3.0338E+01,2.9902E+01, + 2.9484E+01,2.9082E+01,2.8694E+01,2.8321E+01,2.7961E+01,2.7613E+01,2.7277E+01, + 2.6951E+01,2.6636E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.0531E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.2382E+05,4.2741E+05,4.3088E+05,4.3426E+05,4.3756E+05, + 4.4079E+05,4.4398E+05,4.4712E+05,4.5023E+05,4.5330E+05,4.5635E+05,4.5938E+05, + 4.6239E+05,4.6539E+05,4.6837E+05,4.7134E+05,4.7430E+05,4.7726E+05,4.8021E+05, + 4.8316E+05,4.8611E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.0531E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.0634E+01,3.9695E+01,3.8832E+01,3.8035E+01,3.7292E+01, + 3.6597E+01,3.5943E+01,3.5325E+01,3.4740E+01,3.4184E+01,3.3654E+01,3.3149E+01, + 3.2665E+01,3.2201E+01,3.1755E+01,3.1327E+01,3.0915E+01,3.0517E+01,3.0133E+01, + 2.9762E+01,2.9403E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.1504E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.2448E+05,4.2817E+05,4.3173E+05,4.3518E+05, + 4.3855E+05,4.4186E+05,4.4511E+05,4.4831E+05,4.5147E+05,4.5459E+05,4.5769E+05, + 4.6077E+05,4.6383E+05,4.6686E+05,4.6989E+05,4.7290E+05,4.7591E+05,4.7890E+05, + 4.8189E+05,4.8488E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.1504E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.4572E+01,4.3503E+01,4.2527E+01,4.1626E+01, + 4.0790E+01,4.0010E+01,3.9277E+01,3.8587E+01,3.7934E+01,3.7314E+01,3.6725E+01, + 3.6164E+01,3.5627E+01,3.5113E+01,3.4620E+01,3.4146E+01,3.3691E+01,3.3252E+01, + 3.2828E+01,3.2419E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.2543E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2507E+05,4.2886E+05,4.3251E+05, + 4.3605E+05,4.3949E+05,4.4287E+05,4.4618E+05,4.4944E+05,4.5266E+05,4.5584E+05, + 4.5899E+05,4.6212E+05,4.6522E+05,4.6831E+05,4.7138E+05,4.7443E+05,4.7748E+05, + 4.8051E+05,4.8354E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.2543E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.8844E+01,4.7627E+01,4.6519E+01, + 4.5502E+01,4.4560E+01,4.3684E+01,4.2863E+01,4.2091E+01,4.1363E+01,4.0673E+01, + 4.0018E+01,3.9394E+01,3.8799E+01,3.8230E+01,3.7685E+01,3.7161E+01,3.6658E+01, + 3.6174E+01,3.5708E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.3651E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2556E+05,4.2947E+05, + 4.3322E+05,4.3684E+05,4.4037E+05,4.4382E+05,4.4720E+05,4.5053E+05,4.5381E+05, + 4.5705E+05,4.6025E+05,4.6343E+05,4.6658E+05,4.6971E+05,4.7283E+05,4.7592E+05, + 4.7901E+05,4.8209E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.3651E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,5.3484E+01,5.2094E+01, + 5.0835E+01,4.9684E+01,4.8623E+01,4.7638E+01,4.6718E+01,4.5855E+01,4.5042E+01, + 4.4274E+01,4.3546E+01,4.2854E+01,4.2194E+01,4.1564E+01,4.0961E+01,4.0383E+01, + 3.9828E+01,3.9294E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.4831E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2595E+05, + 4.2999E+05,4.3385E+05,4.3757E+05,4.4119E+05,4.4471E+05,4.4817E+05,4.5156E+05, + 4.5490E+05,4.5820E+05,4.6146E+05,4.6469E+05,4.6790E+05,4.7108E+05,4.7424E+05, + 4.7738E+05,4.8051E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.4831E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,5.8526E+01, + 5.6935E+01,5.5502E+01,5.4199E+01,5.3001E+01,5.1893E+01,5.0861E+01,4.9896E+01, + 4.8989E+01,4.8133E+01,4.7324E+01,4.6555E+01,4.5824E+01,4.5127E+01,4.4461E+01, + 4.3823E+01,4.3211E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.6086E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.2624E+05,4.3041E+05,4.3439E+05,4.3822E+05,4.4193E+05,4.4554E+05,4.4907E+05, + 4.5254E+05,4.5595E+05,4.5931E+05,4.6263E+05,4.6591E+05,4.6917E+05,4.7240E+05, + 4.7561E+05,4.7880E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.6086E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 6.4013E+01,6.2185E+01,6.0551E+01,5.9071E+01,5.7718E+01,5.6470E+01,5.5313E+01, + 5.4232E+01,5.3220E+01,5.2267E+01,5.1367E+01,5.0514E+01,4.9704E+01,4.8933E+01, + 4.8196E+01,4.7492E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.7419E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,4.2642E+05,4.3074E+05,4.3485E+05,4.3879E+05,4.4260E+05,4.4630E+05, + 4.4991E+05,4.5345E+05,4.5693E+05,4.6036E+05,4.6374E+05,4.6709E+05,4.7040E+05, + 4.7368E+05,4.7694E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.7419E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,6.9990E+01,6.7883E+01,6.6014E+01,6.4331E+01,6.2800E+01,6.1394E+01, + 6.0094E+01,5.8884E+01,5.7753E+01,5.6691E+01,5.5691E+01,5.4744E+01,5.3847E+01, + 5.2994E+01,5.2181E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.8834E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.2646E+05,4.3096E+05,4.3521E+05,4.3927E+05,4.4319E+05, + 4.4699E+05,4.5069E+05,4.5431E+05,4.5786E+05,4.6136E+05,4.6481E+05,4.6821E+05, + 4.7158E+05,4.7492E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 1.8834E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,7.6519E+01,7.4080E+01,7.1935E+01,7.0017E+01,6.8281E+01, + 6.6694E+01,6.5232E+01,6.3876E+01,6.2613E+01,6.1429E+01,6.0316E+01,5.9266E+01, + 5.8272E+01,5.7328E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.0334E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.2635E+05,4.3105E+05,4.3546E+05,4.3966E+05, + 4.4369E+05,4.4760E+05,4.5139E+05,4.5510E+05,4.5873E+05,4.6230E+05,4.6582E+05, + 4.6929E+05,4.7272E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.0334E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,8.3665E+01,8.0827E+01,7.8356E+01,7.6164E+01, + 7.4192E+01,7.2398E+01,7.0753E+01,6.9232E+01,6.7819E+01,6.6499E+01,6.5261E+01, + 6.4095E+01,6.2993E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.1923E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2609E+05,4.3101E+05,4.3560E+05, + 4.3995E+05,4.4411E+05,4.4812E+05,4.5202E+05,4.5582E+05,4.5953E+05,4.6318E+05, + 4.6677E+05,4.7030E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.1923E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,9.1511E+01,8.8190E+01,8.5332E+01, + 8.2819E+01,8.0573E+01,7.8542E+01,7.6687E+01,7.4980E+01,7.3398E+01,7.1925E+01, + 7.0547E+01,6.9252E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.3604E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2564E+05,4.3082E+05, + 4.3561E+05,4.4013E+05,4.4443E+05,4.4856E+05,4.5257E+05,4.5646E+05,4.6027E+05, + 4.6400E+05,4.6766E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.3604E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.0015E+02,9.6239E+01, + 9.2918E+01,9.0027E+01,8.7463E+01,8.5159E+01,8.3065E+01,8.1145E+01,7.9374E+01, + 7.7729E+01,7.6195E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.5382E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.2498E+05, + 4.3047E+05,4.3549E+05,4.4019E+05,4.4464E+05,4.4891E+05,4.5303E+05,4.5703E+05, + 4.6093E+05,4.6475E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.5382E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.0972E+02, + 1.0507E+02,1.0119E+02,9.7851E+01,9.4915E+01,9.2295E+01,8.9926E+01,8.7766E+01, + 8.5780E+01,8.3942E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.7261E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.2408E+05,4.2993E+05,4.3522E+05,4.4012E+05,4.4475E+05,4.4916E+05,4.5341E+05, + 4.5752E+05,4.6152E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.7261E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 1.2038E+02,1.1479E+02,1.1023E+02,1.0635E+02,1.0298E+02,9.9995E+01,9.7312E+01, + 9.4877E+01,9.2647E+01; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.9246E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,4.2290E+05,4.2918E+05,4.3478E+05,4.3992E+05,4.4473E+05,4.4931E+05, + 4.5369E+05,4.5792E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 2.9246E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,1.3233E+02,1.2554E+02,1.2013E+02,1.1562E+02,1.1173E+02,1.0831E+02, + 1.0527E+02,1.0252E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.1341E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,4.2137E+05,4.2820E+05,4.3416E+05,4.3957E+05,4.4459E+05, + 4.4934E+05,4.5387E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.1341E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,1.4585E+02,1.3748E+02,1.3102E+02,1.2572E+02,1.2122E+02, + 1.1731E+02,1.1384E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.3552E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,4.1941E+05,4.2695E+05,4.3334E+05,4.3905E+05, + 4.4432E+05,4.4926E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.3552E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,1.6135E+02,1.5082E+02,1.4302E+02,1.3677E+02, + 1.3154E+02,1.2704E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.5886E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1692E+05,4.2539E+05,4.3229E+05, + 4.3836E+05,4.4389E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.5886E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,1.7941E+02,1.6585E+02,1.5632E+02, + 1.4890E+02,1.4279E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.8348E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.1370E+05,4.2346E+05, + 4.3100E+05,4.3748E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 3.8348E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,2.0095E+02,1.8289E+02, + 1.7111E+02,1.6223E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.0949E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.0942E+05, + 4.2109E+05,4.2943E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.0949E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,2.2766E+02, + 2.0246E+02,1.8765E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.3697E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 4.0343E+05,4.1823E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.3697E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 2.6302E+02,2.2513E+02; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Enthalpy, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.6607E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,3.9373E+05; + + FluidProperties:Superheated, + R410a, !- Fluid Name + Density, !- Fluid Property Type + R410aSuperHeatTemperatures, !- Temperature Values Name + 4.6607E+06, !- Pressure {Pa} + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, + 0.0000E+00,3.1758E+02; + +!- =========== ALL OBJECTS IN CLASS: GLOBALGEOMETRYRULES =========== + + GlobalGeometryRules, + LowerLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative; !- Coordinate System + +!- Geometry from the scalable geometry template + + BuildingSurface:Detailed, + Inter zone floor 1, !- Name + Floor, !- Surface Type + Interior Floor, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Adiabatic, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,2.74390243902439, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,2.74390243902439; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + ceiling_unit1, !- Name + Ceiling, !- Surface Type + Interior Ceiling, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Zone, !- Outside Boundary Condition + attic_unit1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,5.33536585365854, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,5.33536585365854, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 3 {m} + 0,9.09981820971244,5.33536585365854; !- X,Y,Z ==> Vertex 4 {m} + +!- =========== ALL OBJECTS IN CLASS: ZONE =========== + + Zone, + living_unit1, !- Name + 0.0, !- Direction of Relative North {deg} + 0.0, !- X Origin {m} + 0.0, !- Y Origin {m} + 0.0, !- Z Origin {m} + , !- Type + 1; !- Multiplier + + Zone, + attic_unit1, !- Name + 0.0, !- Direction of Relative North {deg} + 0.0, !- X Origin {m} + 0.0, !- Y Origin {m} + 0.0, !- Z Origin {m} + , !- Type + 1; !- Multiplier + + Zone, + crawlspace_unit1, !- Name + 0.0, !- Direction of Relative North {deg} + 0.0, !- X Origin {m} + 0.0, !- Y Origin {m} + 0.0, !- Z Origin {m} + , !- Type + 1; !- Multiplier + + InternalMass, + Internalmass_unit1, !- Name + InteriorFurnishings, !- Construction Name + living_unit1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 9.89591078066915; !- Surface Area {m2} + + BuildingSurface:Detailed, + Roof_front_unit1, !- Name + Roof, !- Surface Type + Exterior Roof, !- Construction Name + attic_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,5.33536585365854, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,5.33536585365854, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,4.54990910485622,6.6995631975537, !- X,Y,Z ==> Vertex 3 {m} + 0,4.54990910485622,6.6995631975537; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Roof_back_unit1, !- Name + Roof, !- Surface Type + Exterior Roof, !- Construction Name + attic_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 2 {m} + 0,4.54990910485622,6.6995631975537, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,4.54990910485622,6.6995631975537; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Roof_right_unit1, !- Name + Wall, !- Surface Type + Gable_end, !- Construction Name + attic_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 3, !- Number of Vertices + 12.1330909462833,0,5.33536585365854, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,4.54990910485622,6.6995631975537; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + Roof_left_unit1, !- Name + Wall, !- Surface Type + Gable_end, !- Construction Name + attic_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 3, !- Number of Vertices + 0,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 1 {m} + 0,0,5.33536585365854, !- X,Y,Z ==> Vertex 2 {m} + 0,4.54990910485622,6.6995631975537; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + Wall_ldf_1.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,0,0.152439024390244, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,0.152439024390244, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,0,2.74390243902439, !- X,Y,Z ==> Vertex 3 {m} + 0,0,2.74390243902439; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_sdr_1.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,0,0.152439024390244, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,2.74390243902439; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_ldb_1.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 2 {m} + 0,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,9.09981820971244,2.74390243902439; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_sdl_1.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 1 {m} + 0,0,0.152439024390244, !- X,Y,Z ==> Vertex 2 {m} + 0,0,2.74390243902439, !- X,Y,Z ==> Vertex 3 {m} + 0,9.09981820971244,2.74390243902439; !- X,Y,Z ==> Vertex 4 {m} + + Window, + Window_ldf_1.unit1, !- Name + Exterior Window, !- Construction Name + Wall_ldf_1.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Window, + Window_ldb_1.unit1, !- Name + Exterior Window, !- Construction Name + Wall_ldb_1.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 2.74190122145512, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Window, + Window_sdr_1.unit1, !- Name + Exterior Window, !- Construction Name + Wall_sdr_1.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Shading:Overhang, + Overhang_sdr_1.unit1, !- Name + Window_sdr_1.unit1, !- Window or Door Name + 0, !- Height above Window or Door {m} + 90, !- Tilt Angle from Window/Door {deg} + 0, !- Left extension from Window/Door Width {m} + 0, !- Right extension from Window/Door Width {m} + 0.0152439024390244; !- Depth {m} + + Window, + Window_sdl_1.unit1, !- Name + Exterior Window, !- Construction Name + Wall_sdl_1.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + BuildingSurface:Detailed, + Wall_ldf_2.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,0,2.74390243902439, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,2.74390243902439, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,0,5.33536585365854, !- X,Y,Z ==> Vertex 3 {m} + 0,0,5.33536585365854; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_sdr_2.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,0,2.74390243902439, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,5.33536585365854; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_ldb_2.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 2 {m} + 0,9.09981820971244,5.33536585365854, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,9.09981820971244,5.33536585365854; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Wall_sdl_2.unit1, !- Name + Wall, !- Surface Type + Exterior Wall, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,9.09981820971244,2.74390243902439, !- X,Y,Z ==> Vertex 1 {m} + 0,0,2.74390243902439, !- X,Y,Z ==> Vertex 2 {m} + 0,0,5.33536585365854, !- X,Y,Z ==> Vertex 3 {m} + 0,9.09981820971244,5.33536585365854; !- X,Y,Z ==> Vertex 4 {m} + + Window, + Window_ldf_2.unit1, !- Name + Exterior Window, !- Construction Name + Wall_ldf_2.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Window, + Window_ldb_2.unit1, !- Name + Exterior Window, !- Construction Name + Wall_ldb_2.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 2.74190122145512, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Window, + Window_sdr_2.unit1, !- Name + Exterior Window, !- Construction Name + Wall_sdr_2.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + Shading:Overhang, + Overhang_sdr_2.unit1, !- Name + Window_sdr_2.unit1, !- Window or Door Name + 0, !- Height above Window or Door {m} + 90, !- Tilt Angle from Window/Door {deg} + 0, !- Left extension from Window/Door Width {m} + 0, !- Right extension from Window/Door Width {m} + 0.0152439024390244; !- Depth {m} + + Window, + Window_sdl_2.unit1, !- Name + Exterior Window, !- Construction Name + Wall_sdl_2.unit1, !- Building Surface Name + , !- Frame and Divider Name + 1, !- Multiplier + 1, !- Starting X Coordinate {m} + 0.914634146341463, !- Starting Z Coordinate {m} + 2.70719591738945, !- Length {m} + 1.52439024390244; !- Height {m} + + BuildingSurface:Detailed, + Floor_unit1, !- Name + Floor, !- Surface Type + Exterior Floor, !- Construction Name + living_unit1, !- Zone Name + , !- Space Name + Zone, !- Outside Boundary Condition + crawlspace_unit1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,0.152439024390244, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,0.152439024390244; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_upper_ldf, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,0,0, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,0, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,0,0.152439024390244, !- X,Y,Z ==> Vertex 3 {m} + 0,0,0.152439024390244; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_lower_ldf, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,0,-0.457317073170732, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,0,-0.457317073170732, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,0,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_upper_sdr, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,0,0, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,9.09981820971244,0, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,0.152439024390244; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_lower_sdr, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,0,-0.457317073170732, !- X,Y,Z ==> Vertex 1 {m} + 12.1330909462833,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,0, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_upper_ldb, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,9.09981820971244,0, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,0, !- X,Y,Z ==> Vertex 2 {m} + 0,9.09981820971244,0.152439024390244, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,9.09981820971244,0.152439024390244; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_lower_ldb, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 12.1330909462833,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 2 {m} + 0,9.09981820971244,0, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,9.09981820971244,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_upper_sdl, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,9.09981820971244,0, !- X,Y,Z ==> Vertex 1 {m} + 0,0,0, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0.152439024390244, !- X,Y,Z ==> Vertex 3 {m} + 0,9.09981820971244,0.152439024390244; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BGWall_lower_sdl, !- Name + Wall, !- Surface Type + Crawl Wall, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + 4, !- Number of Vertices + 0,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 1 {m} + 0,0,-0.457317073170732, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,9.09981820971244,0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Extfloor_unit1, !- Name + Floor, !- Surface Type + Interior Floor, !- Construction Name + crawlspace_unit1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,-0.457317073170732, !- X,Y,Z ==> Vertex 1 {m} + 0,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 2 {m} + 12.1330909462833,9.09981820971244,-0.457317073170732, !- X,Y,Z ==> Vertex 3 {m} + 12.1330909462833,0,-0.457317073170732; !- X,Y,Z ==> Vertex 4 {m} + + Door, + Door_ldb_unit1, !- Name + Exterior Door, !- Construction Name + Wall_ldb_1.unit1, !- Building Surface Name + 1, !- Multiplier + 0.5, !- Starting X Coordinate {m} + 0, !- Starting Z Coordinate {m} + 1.74190122145513, !- Length {m} + 2.13414634146341; !- Height {m} + +!- =========== ALL OBJECTS IN CLASS: WINDOWPROPERTY:SHADINGCONTROL =========== + + WindowShadingControl, + Shades-living_unit1, !- Name + living_unit1, !- Zone Name + 1, !- Shading Control Sequence Number + InteriorBlind, !- Shading Type + window_w_blinds, !- Construction with Shading Name + OnIfScheduleAllows, !- Shading Control Type + shading_2012iecc, !- Schedule Name + , !- Setpoint {W/m2, W or deg C} + Yes, !- Shading Control Is Scheduled + No, !- Glare Control Is Active + , !- Shading Device Material Name + , !- Type of Slat Angle Control for Blinds + , !- Slat Angle Schedule Name + , !- Setpoint 2 {W/m2, deg C or cd/m2} + , !- Daylighting Control Object Name + Sequential, !- Multiple Surface Control Type + Window_ldf_1.unit1, !- Fenestration Surface 1 Name + Window_ldb_1.unit1, !- Fenestration Surface 2 Name + Window_sdr_1.unit1, !- Fenestration Surface 3 Name + Window_sdl_1.unit1, !- Fenestration Surface 4 Name + Window_ldf_2.unit1, !- Fenestration Surface 5 Name + Window_ldb_2.unit1, !- Fenestration Surface 6 Name + Window_sdr_2.unit1, !- Fenestration Surface 7 Name + Window_sdl_2.unit1; !- Fenestration Surface 8 Name + +!- Consolidated wall and floor materials from consolidated.materials.template.. +!- =========== ALL OBJECTS IN CLASS: SIMULATIONCONTROL =========== + + SimulationControl, + Yes, !- Do Zone Sizing Calculation + Yes, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + No, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + , !- Do HVAC Sizing Simulation for Sizing Periods + ; !- Maximum Number of HVAC Sizing Simulation Passes + +!- =========== ALL OBJECTS IN CLASS: BUILDING =========== + + Building, + US+SF+CZ4A+hp+crawlspace+IECC_2006, !- Name + 0, !- North Axis {deg} + Suburbs, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.4, !- Temperature Convergence Tolerance Value {deltaC} + FullExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + +!- =========== ALL OBJECTS IN CLASS: SURFACECONVECTIONALGORITHM:INSIDE =========== + + SurfaceConvectionAlgorithm:Inside,TARP; + +!- =========== ALL OBJECTS IN CLASS: TIMESTEP =========== + + Timestep,6; + +!- =========== ALL OBJECTS IN CLASS: SITE:LOCATION =========== +! Weather_file = USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw; +! Using the stat2idf and the ddy2idf script... +! Water mains temperature correlation object created by: +! Water mains temperature object created by: +! ./tools/bin/stat2idf ./tools/epw//USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.stat +! + + Site:WaterMainsTemperature, + Correlation, !- Calculation Method + , !- Temperature Schedule Name + 12.4666666666667, !- Annual Average Outdoor Air Temperature {C} + 25.2; !- Maximum Difference In Monthly Average Outdoor Air Temperatures {deltaC} + +! Location and design-day objects created by: +! Site:Location and design-day objects created by: +! ./tools/bin/ddy2idf ./tools/epw//USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.ddy +! + + Site:Location, + New.York-John.F.Kennedy.Intl.AP_NY_USA WMO=744860, !- Name + 40.66, !- Latitude {deg} + -73.80, !- Longitude {deg} + -5.00, !- Time Zone {hr} + 7.00; !- Elevation {m} + + SizingPeriod:DesignDay, + New.York-John.F.Kennedy.Intl.AP_NY_USA Ann Htg 99.6% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -10.7, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -10.7, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 101241., !- Barometric Pressure {Pa} + 7.5, !- Wind Speed {m/s} + 320, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + + SizingPeriod:DesignDay, + New.York-John.F.Kennedy.Intl.AP_NY_USA Ann Clg .4% Condns DB=>MWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 32.1, !- Maximum Dry-Bulb Temperature {C} + 7.4, !- Daily Dry-Bulb Temperature Range {deltaC} + DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.1, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 101241., !- Barometric Pressure {Pa} + 5.6, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAETau, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + 0.541, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + 1.800; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + +!- =========== ALL OBJECTS IN CLASS: RUNPERIOD =========== + + RunPeriod, + annual, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 12, !- End Month + 31, !- End Day of Month + , !- End Year + Sunday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes, !- Use Weather File Snow Indicators + ; !- Treat Weather as Actual + +!- =========== ALL OBJECTS IN CLASS: SCHEDULETYPELIMITS =========== + + ScheduleTypeLimits, + any number; !- Name + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + Discrete; !- Numeric Type + + ScheduleTypeLimits, + control_type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + Discrete; !- Numeric Type + + ScheduleTypeLimits, + fraction, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + Continuous; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + Continuous; !- Numeric Type + + Schedule:Compact, + BA_shower_sch, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 1:00,0.00194740740740741, !- Field 3 + Until: 2:00,0.000885185185185185, !- Field 5 + Until: 3:00,0.000531111111111111, !- Field 7 + Until: 4:00,0.000885185185185185, !- Field 9 + Until: 5:00,0.00247851851851852, !- Field 11 + Until: 6:00,0.00920592592592592, !- Field 13 + Until: 7:00,0.0208903703703704, !- Field 15 + Until: 8:00,0.0207133333333333, !- Field 17 + Until: 9:00,0.0168185185185185, !- Field 19 + Until: 10:00,0.0131007407407407, !- Field 21 + Until: 11:00,0.0106222222222222, !- Field 23 + Until: 12:00,0.00832074074074074, !- Field 25 + Until: 13:00,0.00601925925925926, !- Field 27 + Until: 14:00,0.00513407407407407, !- Field 29 + Until: 15:00,0.00460296296296296, !- Field 31 + Until: 16:00,0.00442592592592593, !- Field 33 + Until: 17:00,0.00531111111111111, !- Field 35 + Until: 18:00,0.00690444444444444, !- Field 37 + Until: 19:00,0.00743555555555556, !- Field 39 + Until: 20:00,0.00743555555555556, !- Field 41 + Until: 21:00,0.00743555555555556, !- Field 43 + Until: 22:00,0.00725851851851852, !- Field 45 + Until: 23:00,0.00513407407407407, !- Field 47 + Until: 24:00,0.00371777777777778; !- Field 49 + + Schedule:Compact, + BA_bath_sch, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 1:00,0.000181818181818182, !- Field 3 + Until: 2:00,9.09090909090909e-05, !- Field 5 + Until: 3:00,9.09090909090909e-05, !- Field 7 + Until: 4:00,9.09090909090909e-05, !- Field 9 + Until: 5:00,0.000181818181818182, !- Field 11 + Until: 6:00,0.000431818181818182, !- Field 13 + Until: 7:00,0.00104545454545455, !- Field 15 + Until: 8:00,0.00131818181818182, !- Field 17 + Until: 9:00,0.0015, !- Field 19 + Until: 10:00,0.00131818181818182, !- Field 21 + Until: 11:00,0.00104545454545455, !- Field 23 + Until: 12:00,0.000795454545454545, !- Field 25 + Until: 13:00,0.000704545454545454, !- Field 27 + Until: 14:00,0.000522727272727273, !- Field 29 + Until: 15:00,0.000522727272727273, !- Field 31 + Until: 16:00,0.000522727272727273, !- Field 33 + Until: 17:00,0.000886363636363636, !- Field 35 + Until: 18:00,0.00104545454545455, !- Field 37 + Until: 19:00,0.00175, !- Field 39 + Until: 20:00,0.00227272727272727, !- Field 41 + Until: 21:00,0.00227272727272727, !- Field 43 + Until: 22:00,0.00175, !- Field 45 + Until: 23:00,0.0015, !- Field 47 + Until: 24:00,0.000886363636363636; !- Field 49 + + Schedule:Compact, + BA_sink_sch, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 1:00,0.0043187134502924, !- Field 3 + Until: 2:00,0.0021593567251462, !- Field 5 + Until: 3:00,0.00154239766081871, !- Field 7 + Until: 4:00,0.00154239766081871, !- Field 9 + Until: 5:00,0.0021593567251462, !- Field 11 + Until: 6:00,0.00555263157894737, !- Field 13 + Until: 7:00,0.0129561403508772, !- Field 15 + Until: 8:00,0.019125730994152, !- Field 17 + Until: 9:00,0.020359649122807, !- Field 19 + Until: 10:00,0.019125730994152, !- Field 21 + Until: 11:00,0.0166578947368421, !- Field 23 + Until: 12:00,0.0154239766081871, !- Field 25 + Until: 13:00,0.0151154970760234, !- Field 27 + Until: 14:00,0.0138815789473684, !- Field 29 + Until: 15:00,0.0132646198830409, !- Field 31 + Until: 16:00,0.0126476608187135, !- Field 33 + Until: 17:00,0.0148070175438597, !- Field 35 + Until: 18:00,0.0200511695906433, !- Field 37 + Until: 19:00,0.0231359649122807, !- Field 39 + Until: 20:00,0.0212850877192982, !- Field 41 + Until: 21:00,0.0175833333333333, !- Field 43 + Until: 22:00,0.0148070175438597, !- Field 45 + Until: 23:00,0.0123391812865497, !- Field 47 + Until: 24:00,0.00832894736842105; !- Field 49 + +! +!- *** Occupancy and Lighting factors taken from NREL benchmark model *** +! + + Schedule:Day:Hourly, + OccupancyDay, !- Name + Fraction, !- Schedule Type Limits Name + 1.00000, !- Hour 1 + 1.00000, !- Hour 2 + 1.00000, !- Hour 3 + 1.00000, !- Hour 4 + 1.00000, !- Hour 5 + 1.00000, !- Hour 6 + 1.00000, !- Hour 7 + 0.88310, !- Hour 8 + 0.40861, !- Hour 9 + 0.24189, !- Hour 10 + 0.24189, !- Hour 11 + 0.24189, !- Hour 12 + 0.24189, !- Hour 13 + 0.24189, !- Hour 14 + 0.24189, !- Hour 15 + 0.24189, !- Hour 16 + 0.29498, !- Hour 17 + 0.55310, !- Hour 18 + 0.89693, !- Hour 19 + 0.89693, !- Hour 20 + 0.89693, !- Hour 21 + 1.00000, !- Hour 22 + 1.00000, !- Hour 23 + 1.00000; !- Hour 24 + + Schedule:Day:Hourly, + LightingDay, !- Name + Fraction, !- Schedule Type Limits Name + 0.0625, !- Hour 1 + 0.0625, !- Hour 2 + 0.0625, !- Hour 3 + 0.0625, !- Hour 4 + 0.1875, !- Hour 5 + 0.390625, !- Hour 6 + 0.4375, !- Hour 7 + 0.390625, !- Hour 8 + 0.171875, !- Hour 9 + 0.1171875, !- Hour 10 + 0.1171875, !- Hour 11 + 0.1171875, !- Hour 12 + 0.1171875, !- Hour 13 + 0.1171875, !- Hour 14 + 0.1171875, !- Hour 15 + 0.203125, !- Hour 16 + 0.4375, !- Hour 17 + 0.609375, !- Hour 18 + 0.8203125, !- Hour 19 + 0.984375, !- Hour 20 + 1, !- Hour 21 + 0.6875, !- Hour 22 + 0.3828125, !- Hour 23 + 0.15625; !- Hour 24 + +!- Calculated based on occupancy sensor and motion +!- sensor savings from HMG analysis as detailed +!- in the kWhcalculation spreadsheet + + Schedule:Day:Hourly, + LightingDay_EELighting_OccSensors, !- Name + Fraction, !- Schedule Type Limits Name + 0.065170403, !- Hour 1 + 0.065170403, !- Hour 2 + 0.065170403, !- Hour 3 + 0.065170403, !- Hour 4 + 0.195511208, !- Hour 5 + 0.407315016, !- Hour 6 + 0.456192818, !- Hour 7 + 0.407315016, !- Hour 8 + 0.179218607, !- Hour 9 + 0.122194505, !- Hour 10 + 0.122194505, !- Hour 11 + 0.122194505, !- Hour 12 + 0.122194505, !- Hour 13 + 0.122194505, !- Hour 14 + 0.122194505, !- Hour 15 + 0.211803808, !- Hour 16 + 0.456192818, !- Hour 17 + 0.635411425, !- Hour 18 + 0.855361533, !- Hour 19 + 0.947933128, !- Hour 20 + 0.947933128, !- Hour 21 + 0.716874428, !- Hour 22 + 0.399168715, !- Hour 23 + 0.162926006; !- Hour 24 + + Schedule:Day:Hourly, + LightingDay_EELighting_Garage_OccSensors, !- Name + Fraction, !- Schedule Type Limits Name + 0.048125, !- Hour 1 + 0.048125, !- Hour 2 + 0.048125, !- Hour 3 + 0.048125, !- Hour 4 + 0.144375, !- Hour 5 + 0.30078125, !- Hour 6 + 0.336875, !- Hour 7 + 0.30078125, !- Hour 8 + 0.13234375, !- Hour 9 + 0.090234375, !- Hour 10 + 0.090234375, !- Hour 11 + 0.090234375, !- Hour 12 + 0.090234375, !- Hour 13 + 0.090234375, !- Hour 14 + 0.090234375, !- Hour 15 + 0.15640625, !- Hour 16 + 0.336875, !- Hour 17 + 0.46921875, !- Hour 18 + 0.631640625, !- Hour 19 + 0.7, !- Hour 20 + 0.7, !- Hour 21 + 0.529375, !- Hour 22 + 0.294765625, !- Hour 23 + 0.1203125; !- Hour 24 + + Schedule:Day:Hourly, + ExteriorLightingDay, !- Name + Fraction, !- Schedule Type Limits Name + 1, !- Hour 1 + 1, !- Hour 2 + 1, !- Hour 3 + 1, !- Hour 4 + 1, !- Hour 5 + 1, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 1, !- Hour 19 + 1, !- Hour 20 + 1, !- Hour 21 + 1, !- Hour 22 + 1, !- Hour 23 + 1; !- Hour 24 + + Schedule:Day:Hourly, + LightingDay_EELighting, !- Name + Fraction, !- Schedule Type Limits Name + 0.06875, !- Hour 1 + 0.06875, !- Hour 2 + 0.06875, !- Hour 3 + 0.06875, !- Hour 4 + 0.20625, !- Hour 5 + 0.4296875, !- Hour 6 + 0.48125, !- Hour 7 + 0.4296875, !- Hour 8 + 0.1890625, !- Hour 9 + 0.12890625, !- Hour 10 + 0.12890625, !- Hour 11 + 0.12890625, !- Hour 12 + 0.12890625, !- Hour 13 + 0.12890625, !- Hour 14 + 0.12890625, !- Hour 15 + 0.2234375, !- Hour 16 + 0.48125, !- Hour 17 + 0.6703125, !- Hour 18 + 0.90234375, !- Hour 19 + 1, !- Hour 20 + 1, !- Hour 21 + 0.75625, !- Hour 22 + 0.42109375, !- Hour 23 + 0.171875; !- Hour 24 + + Schedule:Day:Hourly, + RefrigeratorDay, !- Name + Fraction, !- Schedule Type Limits Name + 0.8, !- Hour 1 + 0.782696177062374, !- Hour 2 + 0.765593561368209, !- Hour 3 + 0.742857142857143, !- Hour 4 + 0.731388329979879, !- Hour 5 + 0.731388329979879, !- Hour 6 + 0.759959758551308, !- Hour 7 + 0.8, !- Hour 8 + 0.817102615694165, !- Hour 9 + 0.828571428571429, !- Hour 10 + 0.8, !- Hour 11 + 0.8, !- Hour 12 + 0.839839034205231, !- Hour 13 + 0.839839034205231, !- Hour 14 + 0.828571428571429, !- Hour 15 + 0.839839034205231, !- Hour 16 + 0.885714285714286, !- Hour 17 + 0.971428571428572, !- Hour 18 + 1, !- Hour 19 + 0.971428571428572, !- Hour 20 + 0.942857142857143, !- Hour 21 + 0.925553319919517, !- Hour 22 + 0.885714285714286, !- Hour 23 + 0.828571428571429; !- Hour 24 + + Schedule:Day:Hourly, + MiscPlugLoadDay, !- Name + Fraction, !- Schedule Type Limits Name + 0.607490272373541, !- Hour 1 + 0.559338521400778, !- Hour 2 + 0.552853437094682, !- Hour 3 + 0.545071335927367, !- Hour 4 + 0.524481193255512, !- Hour 5 + 0.585278858625162, !- Hour 6 + 0.676232166018158, !- Hour 7 + 0.718547341115435, !- Hour 8 + 0.607490272373541, !- Hour 9 + 0.517023346303502, !- Hour 10 + 0.529182879377432, !- Hour 11 + 0.529345006485084, !- Hour 12 + 0.520428015564202, !- Hour 13 + 0.538424124513619, !- Hour 14 + 0.568741893644617, !- Hour 15 + 0.600356679636835, !- Hour 16 + 0.71011673151751, !- Hour 17 + 0.862678339818418, !- Hour 18 + 0.936608300907912, !- Hour 19 + 0.966763942931258, !- Hour 20 + 1, !- Hour 21 + 0.976653696498055, !- Hour 22 + 0.845168612191959, !- Hour 23 + 0.73443579766537; !- Hour 24 + + Schedule:Day:Hourly, + CookingRangeDay, !- Name + Fraction, !- Schedule Type Limits Name + 0.04715848452508, !- Hour 1 + 0.04715848452508, !- Hour 2 + 0.0235458911419424, !- Hour 3 + 0.0235458911419424, !- Hour 4 + 0.04715848452508, !- Hour 5 + 0.0707043756670224, !- Hour 6 + 0.165088046958378, !- Hour 7 + 0.283017609391676, !- Hour 8 + 0.306563500533618, !- Hour 9 + 0.320771077908218, !- Hour 10 + 0.283017609391676, !- Hour 11 + 0.330176093916756, !- Hour 12 + 0.377334578441836, !- Hour 13 + 0.306563500533618, !- Hour 14 + 0.292422625400213, !- Hour 15 + 0.377334578441836, !- Hour 16 + 0.613193703308431, !- Hour 17 + 1, !- Hour 18 + 0.778348452508004, !- Hour 19 + 0.400947171824973, !- Hour 20 + 0.235859124866596, !- Hour 21 + 0.165088046958378, !- Hour 22 + 0.103721985058698, !- Hour 23 + 0.0707043756670224; !- Hour 24 + + Schedule:Day:Hourly, + DishwasherWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.129162158913331, !- Hour 1 + 0.0573867051328282, !- Hour 2 + 0.0429979564851542, !- Hour 3 + 0.0286933525664145, !- Hour 4 + 0.0286933525664145, !- Hour 5 + 0.0860800576992427, !- Hour 6 + 0.172244260127419, !- Hour 7 + 0.258408462555596, !- Hour 8 + 0.488207717273711, !- Hour 9 + 0.545594422406539, !- Hour 10 + 0.473818968626037, !- Hour 11 + 0.402043514845535, !- Hour 12 + 0.344572664983772, !- Hour 13 + 0.387654766197861, !- Hour 14 + 0.315879312417358, !- Hour 15 + 0.301490563769684, !- Hour 16 + 0.315879312417358, !- Hour 17 + 0.416348118764274, !- Hour 18 + 0.732311575910566, !- Hour 19 + 0.93333333333333, !- Hour 20 + 0.761004928476981, !- Hour 21 + 0.559983171054213, !- Hour 22 + 0.373266017550187, !- Hour 23 + 0.258408462555596; !- Hour 24 + + Schedule:Day:Hourly, + DishwasherWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.13838802740714, !- Hour 1 + 0.0614857554994591, !- Hour 2 + 0.0460692390912369, !- Hour 3 + 0.0307428777497295, !- Hour 4 + 0.0307428777497295, !- Hour 5 + 0.0922286332491886, !- Hour 6 + 0.184547421565092, !- Hour 7 + 0.276866209880995, !- Hour 8 + 0.523079697078976, !- Hour 9 + 0.584565452578435, !- Hour 10 + 0.507663180670754, !- Hour 11 + 0.430760908763072, !- Hour 12 + 0.369184998196899, !- Hour 13 + 0.41534439235485, !- Hour 14 + 0.338442120447169, !- Hour 15 + 0.323025604038947, !- Hour 16 + 0.338442120447169, !- Hour 17 + 0.44608727010458, !- Hour 18 + 0.784619545618464, !- Hour 19 + 1, !- Hour 20 + 0.815362423368193, !- Hour 21 + 0.599981968986657, !- Hour 22 + 0.399927875946628, !- Hour 23 + 0.276866209880995; !- Hour 24 + + Schedule:Day:Hourly, + DishwasherVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + ClothesWasherWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.0887931470412736, !- Hour 1 + 0.0710155041111689, !- Hour 2 + 0.0354602182509584, !- Hour 3 + 0.0354602182509584, !- Hour 4 + 0.0710155041111689, !- Hour 5 + 0.106570789971378, !- Hour 6 + 0.213141579942758, !- Hour 7 + 0.461933513354977, !- Hour 8 + 0.69294780383709, !- Hour 9 + 0.817391304347826, !- Hour 10 + 0.799613661417722, !- Hour 11 + 0.710725446767196, !- Hour 12 + 0.639614875046775, !- Hour 13 + 0.568599370935607, !- Hour 14 + 0.497488799215186, !- Hour 15 + 0.461933513354977, !- Hour 16 + 0.479711156285081, !- Hour 17 + 0.461933513354977, !- Hour 18 + 0.461933513354977, !- Hour 19 + 0.461933513354977, !- Hour 20 + 0.461933513354977, !- Hour 21 + 0.444155870424871, !- Hour 22 + 0.302029794593282, !- Hour 23 + 0.159903718761693; !- Hour 24 + + Schedule:Day:Hourly, + ClothesWasherWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.108629913933473, !- Hour 1 + 0.086880669923238, !- Hour 2 + 0.0433821819027681, !- Hour 3 + 0.0433821819027681, !- Hour 4 + 0.086880669923238, !- Hour 5 + 0.130379157943708, !- Hour 6 + 0.260758315887416, !- Hour 7 + 0.565131425913003, !- Hour 8 + 0.847755291928355, !- Hour 9 + 1, !- Hour 10 + 0.978250755989765, !- Hour 11 + 0.86950453593859, !- Hour 12 + 0.782507559897651, !- Hour 13 + 0.695626889974413, !- Hour 14 + 0.608629913933473, !- Hour 15 + 0.565131425913003, !- Hour 16 + 0.586880669923238, !- Hour 17 + 0.565131425913003, !- Hour 18 + 0.565131425913003, !- Hour 19 + 0.565131425913003, !- Hour 20 + 0.565131425913003, !- Hour 21 + 0.543382181902768, !- Hour 22 + 0.36950453593859, !- Hour 23 + 0.195626889974413; !- Hour 24 + + Schedule:Day:Hourly, + ClothesWasherVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + dhw_profile_day, !- Name + fraction, !- Schedule Type Limits Name + 0.006, !- Hour 1 + 0.003, !- Hour 2 + 0.001, !- Hour 3 + 0.001, !- Hour 4 + 0.003, !- Hour 5 + 0.021, !- Hour 6 + 0.075, !- Hour 7 + 0.079, !- Hour 8 + 0.076, !- Hour 9 + 0.067, !- Hour 10 + 0.061, !- Hour 11 + 0.05, !- Hour 12 + 0.042, !- Hour 13 + 0.038, !- Hour 14 + 0.033, !- Hour 15 + 0.038, !- Hour 16 + 0.043, !- Hour 17 + 0.058, !- Hour 18 + 0.068, !- Hour 19 + 0.065, !- Hour 20 + 0.06, !- Hour 21 + 0.047, !- Hour 22 + 0.041, !- Hour 23 + 0.024; !- Hour 24 + + Schedule:Day:Hourly, + ClothesDryerWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.0996818663838815, !- Hour 1 + 0.0598091198303289, !- Hour 2 + 0.0398727465535526, !- Hour 3 + 0.0199363732767763, !- Hour 4 + 0.0398727465535526, !- Hour 5 + 0.0598091198303289, !- Hour 6 + 0.15949098621421, !- Hour 7 + 0.31898197242842, !- Hour 8 + 0.486427370202556, !- Hour 9 + 0.685791102970318, !- Hour 10 + 0.785472969354199, !- Hour 11 + 0.817391304347826, !- Hour 12 + 0.745600222800647, !- Hour 13 + 0.677836691410393, !- Hour 14 + 0.610073160020138, !- Hour 15 + 0.578154825026511, !- Hour 16 + 0.558218451749735, !- Hour 17 + 0.546236490032885, !- Hour 18 + 0.518345705196183, !- Hour 19 + 0.510391293636256, !- Hour 20 + 0.526300116756109, !- Hour 21 + 0.546236490032885, !- Hour 22 + 0.438600212089077, !- Hour 23 + 0.239236479321316; !- Hour 24 + + Schedule:Day:Hourly, + ClothesDryerWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.121951219512195, !- Hour 1 + 0.0731707317073171, !- Hour 2 + 0.0487804878048781, !- Hour 3 + 0.024390243902439, !- Hour 4 + 0.0487804878048781, !- Hour 5 + 0.0731707317073171, !- Hour 6 + 0.195121951219512, !- Hour 7 + 0.390243902439024, !- Hour 8 + 0.59509731460951, !- Hour 9 + 0.8389997536339, !- Hour 10 + 0.960950973146095, !- Hour 11 + 1, !- Hour 12 + 0.912170485341217, !- Hour 13 + 0.829268292682927, !- Hour 14 + 0.746366100024637, !- Hour 15 + 0.707317073170732, !- Hour 16 + 0.682926829268293, !- Hour 17 + 0.668268046316827, !- Hour 18 + 0.634146341463415, !- Hour 19 + 0.624414880512441, !- Hour 20 + 0.643877802414388, !- Hour 21 + 0.668268046316827, !- Hour 22 + 0.536585365853659, !- Hour 23 + 0.292682926829268; !- Hour 24 + + Schedule:Day:Hourly, + ClothesDryerVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + SinksWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.178431090172197, !- Hour 1 + 0.0855612360359615, !- Hour 2 + 0.0641394243627467, !- Hour 3 + 0.0641394243627467, !- Hour 4 + 0.0855612360359615, !- Hour 5 + 0.228457320962002, !- Hour 6 + 0.535419281173493, !- Hour 7 + 0.785298413808711, !- Hour 8 + 0.828142037155143, !- Hour 9 + 0.778115806365338, !- Hour 10 + 0.685371962886004, !- Hour 11 + 0.628163124652828, !- Hour 12 + 0.613923920422985, !- Hour 13 + 0.571080297076553, !- Hour 14 + 0.521054066286749, !- Hour 15 + 0.542475877959965, !- Hour 16 + 0.606741312979612, !- Hour 17 + 0.82095942971177, !- Hour 18 + 0.942307692307692, !- Hour 19 + 0.870985660501574, !- Hour 20 + 0.713850371345691, !- Hour 21 + 0.606741312979612, !- Hour 22 + 0.499758265270435, !- Hour 23 + 0.342622976114552; !- Hour 24 + + Schedule:Day:Hourly, + SinksWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.18935544263172, !- Hour 1 + 0.0907996790585718, !- Hour 2 + 0.0680663278951591, !- Hour 3 + 0.0680663278951591, !- Hour 4 + 0.0907996790585718, !- Hour 5 + 0.242444503878042, !- Hour 6 + 0.568200053490238, !- Hour 7 + 0.833377908531693, !- Hour 8 + 0.878844610858518, !- Hour 9 + 0.825755549612196, !- Hour 10 + 0.727333511634127, !- Hour 11 + 0.666622091468307, !- Hour 12 + 0.651511099224392, !- Hour 13 + 0.606044396897566, !- Hour 14 + 0.552955335651244, !- Hour 15 + 0.575688686814656, !- Hour 16 + 0.643888740304894, !- Hour 17 + 0.871222251939021, !- Hour 18 + 1, !- Hour 19 + 0.924311313185344, !- Hour 20 + 0.757555496121958, !- Hour 21 + 0.643888740304894, !- Hour 22 + 0.53035571008291, !- Hour 23 + 0.363599893019524; !- Hour 24 + + Schedule:Day:Hourly, + SinksVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + ShowersWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.0847763225038272, !- Hour 1 + 0.0384986108748656, !- Hour 2 + 0.0269887169019672, !- Hour 3 + 0.0384986108748656, !- Hour 4 + 0.10795486760787, !- Hour 5 + 0.408799682485684, !- Hour 6 + 0.93333333333333, !- Hour 7 + 0.92563361115836, !- Hour 8 + 0.752112037194534, !- Hour 9 + 0.590100357203606, !- Hour 10 + 0.47436638884164, !- Hour 11 + 0.374111243408743, !- Hour 12 + 0.269966547598798, !- Hour 13 + 0.231388558144809, !- Hour 14 + 0.200510290865794, !- Hour 15 + 0.208210013040766, !- Hour 16 + 0.239088280319782, !- Hour 17 + 0.308544537052787, !- Hour 18 + 0.335533253954754, !- Hour 19 + 0.335533253954754, !- Hour 20 + 0.331643703577706, !- Hour 21 + 0.323943981402733, !- Hour 22 + 0.231388558144809, !- Hour 23 + 0.165821851788853; !- Hour 24 + + Schedule:Day:Hourly, + ShowersWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.0908317741112434, !- Hour 1 + 0.0412485116516414, !- Hour 2 + 0.0289164823949651, !- Hour 3 + 0.0412485116516414, !- Hour 4 + 0.115665929579861, !- Hour 5 + 0.437999659806089, !- Hour 6 + 1, !- Hour 7 + 0.991750297669672, !- Hour 8 + 0.805834325565572, !- Hour 9 + 0.632250382718149, !- Hour 10 + 0.508249702330328, !- Hour 11 + 0.400833475080796, !- Hour 12 + 0.289249872427284, !- Hour 13 + 0.24791631229801, !- Hour 14 + 0.214832454499064, !- Hour 15 + 0.223082156829393, !- Hour 16 + 0.256166014628338, !- Hour 17 + 0.330583432556557, !- Hour 18 + 0.359499914951522, !- Hour 19 + 0.359499914951522, !- Hour 20 + 0.355332539547542, !- Hour 21 + 0.347082837217214, !- Hour 22 + 0.24791631229801, !- Hour 23 + 0.177666269773771; !- Hour 24 + + Schedule:Day:Hourly, + ShowersVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + BathsWeekday, !- Name + Fraction, !- Schedule Type Limits Name + 0.0549341075342269, !- Hour 1 + 0.027467053767114, !- Hour 2 + 0.027467053767114, !- Hour 3 + 0.027467053767114, !- Hour 4 + 0.0549341075342269, !- Hour 5 + 0.137335268835568, !- Hour 6 + 0.329675803375743, !- Hour 7 + 0.412076964677084, !- Hour 8 + 0.467011072211311, !- Hour 9 + 0.412076964677084, !- Hour 10 + 0.329675803375743, !- Hour 11 + 0.247203483904022, !- Hour 12 + 0.219736430136909, !- Hour 13 + 0.164802322602681, !- Hour 14 + 0.164802322602681, !- Hour 15 + 0.164802322602681, !- Hour 16 + 0.274741695841516, !- Hour 17 + 0.329675803375743, !- Hour 18 + 0.549483391683034, !- Hour 19 + 0.714285714285714, !- Hour 20 + 0.714285714285714, !- Hour 21 + 0.549483391683034, !- Hour 22 + 0.467011072211311, !- Hour 23 + 0.274741695841516; !- Hour 24 + + Schedule:Day:Hourly, + BathsWeekend, !- Name + Fraction, !- Schedule Type Limits Name + 0.0769077505479179, !- Hour 1 + 0.038453875273959, !- Hour 2 + 0.038453875273959, !- Hour 3 + 0.038453875273959, !- Hour 4 + 0.0769077505479179, !- Hour 5 + 0.192269376369795, !- Hour 6 + 0.461546124726041, !- Hour 7 + 0.576907750547918, !- Hour 8 + 0.653815501095836, !- Hour 9 + 0.576907750547918, !- Hour 10 + 0.461546124726041, !- Hour 11 + 0.346084877465631, !- Hour 12 + 0.307631002191672, !- Hour 13 + 0.230723251643754, !- Hour 14 + 0.230723251643754, !- Hour 15 + 0.230723251643754, !- Hour 16 + 0.384638374178123, !- Hour 17 + 0.461546124726041, !- Hour 18 + 0.769276748356246, !- Hour 19 + 1, !- Hour 20 + 1, !- Hour 21 + 0.769276748356246, !- Hour 22 + 0.653815501095836, !- Hour 23 + 0.384638374178123; !- Hour 24 + + Schedule:Day:Hourly, + BathsVacation, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + DHWDistDay, !- Name + Fraction, !- Schedule Type Limits Name + 0.142553149370226, !- Hour 1 + 0.0764866759550322, !- Hour 2 + 0.0516611840277747, !- Hour 3 + 0.0584039294664903, !- Hour 4 + 0.121469841058603, !- Hour 5 + 0.366180268451559, !- Hour 6 + 0.833258955739606, !- Hour 7 + 0.999999987228391, !- Hour 8 + 0.995483090581232, !- Hour 9 + 0.916474762598139, !- Hour 10 + 0.800898393293271, !- Hour 11 + 0.682564390940485, !- Hour 12 + 0.590066600109555, !- Hour 13 + 0.522371887032053, !- Hour 14 + 0.466005974303267, !- Hour 15 + 0.46573704253214, !- Hour 16 + 0.527514234916123, !- Hour 17 + 0.637905701335668, !- Hour 18 + 0.727588642310272, !- Hour 19 + 0.732551127624518, !- Hour 20 + 0.681468471942116, !- Hour 21 + 0.610804704600985, !- Hour 22 + 0.464292318119835, !- Hour 23 + 0.299867724445383; !- Hour 24 + + Schedule:Day:Hourly, + WinterLoadDay, !- Name + Fraction, !- Schedule Type Limits Name + 0, !- Hour 1 + 0, !- Hour 2 + 0, !- Hour 3 + 0, !- Hour 4 + 0, !- Hour 5 + 0, !- Hour 6 + 0, !- Hour 7 + 0, !- Hour 8 + 0, !- Hour 9 + 0, !- Hour 10 + 0, !- Hour 11 + 0, !- Hour 12 + 0, !- Hour 13 + 0, !- Hour 14 + 0, !- Hour 15 + 0, !- Hour 16 + 0, !- Hour 17 + 0, !- Hour 18 + 0, !- Hour 19 + 0, !- Hour 20 + 0, !- Hour 21 + 0, !- Hour 22 + 0, !- Hour 23 + 0; !- Hour 24 + + Schedule:Day:Hourly, + SummerLoadDay, !- Name + Fraction, !- Schedule Type Limits Name + 1, !- Hour 1 + 1, !- Hour 2 + 1, !- Hour 3 + 1, !- Hour 4 + 1, !- Hour 5 + 1, !- Hour 6 + 1, !- Hour 7 + 1, !- Hour 8 + 1, !- Hour 9 + 1, !- Hour 10 + 1, !- Hour 11 + 1, !- Hour 12 + 1, !- Hour 13 + 1, !- Hour 14 + 1, !- Hour 15 + 1, !- Hour 16 + 1, !- Hour 17 + 1, !- Hour 18 + 1, !- Hour 19 + 1, !- Hour 20 + 1, !- Hour 21 + 1, !- Hour 22 + 1, !- Hour 23 + 1; !- Hour 24 + + Schedule:Week:Compact, + RefrigeratorWeek, !- Name + For: AllDays, !- DayType List 1 + RefrigeratorDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + MiscPlugLoadWeek, !- Name + For: AllDays, !- DayType List 1 + MiscPlugLoadDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + CookingRangeWeek, !- Name + For: AllDays, !- DayType List 1 + CookingRangeDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + DishwasherWeek, !- Name + For: Weekdays, !- DayType List 1 + DishwasherWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + DishwasherVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + DishwasherWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + ClothesWasherWeek, !- Name + For: Weekdays, !- DayType List 1 + ClothesWasherWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + ClothesWasherVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + ClothesWasherWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + dhw_profile_week, !- Name + AllDays, !- DayType List 1 + dhw_profile_day; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + ClothesDryerWeek, !- Name + For: Weekdays, !- DayType List 1 + ClothesDryerWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + ClothesDryerVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + ClothesDryerWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + SinksWeek, !- Name + For: Weekdays, !- DayType List 1 + SinksWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + SinksVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + SinksWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + ShowersWeek, !- Name + For: Weekdays, !- DayType List 1 + ShowersWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + ShowersVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + ShowersWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + BathsWeek, !- Name + For: Weekdays, !- DayType List 1 + BathsWeekday, !- Schedule:Day Name 1 + For: CustomDay1, !- DayType List 2 + BathsVacation, !- Schedule:Day Name 2 + For: AllOtherDays, !- DayType List 3 + BathsWeekend; !- Schedule:Day Name 3 + + Schedule:Week:Compact, + DHWDistWeek, !- Name + For: AllDays, !- DayType List 1 + DHWDistDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + OccupancyWeek, !- Name + AllDays, !- DayType List 1 + OccupancyDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + LightingProfileWeek, !- Name + For: AllDays, !- DayType List 1 + LightingDay; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + LightingProfileWeek_EELighting, !- Name + For: AllDays, !- DayType List 1 + LightingDay_EELighting; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + LightingProfileWeek_EELighting_interior_controls, !- Name + For: AllDays, !- DayType List 1 + LightingDay_EELighting_OccSensors; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + LightingProfileWeek_EELighting_garage_controls, !- Name + For: AllDays, !- DayType List 1 + LightingDay_EELighting_Garage_OccSensors; !- Schedule:Day Name 1 + + Schedule:Week:Compact, + ExteriorLightingProfileWeek, !- Name + For: AllDays, !- DayType List 1 + ExteriorLightingDay; !- Schedule:Day Name 1 + +!- =========== ALL OBJECTS IN CLASS: SCHEDULE:YEAR =========== + + Schedule:Year, + Occupancy, !- Name + Fraction, !- Schedule Type Limits Name + OccupancyWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + InteriorLighting, !- Name + Fraction, !- Schedule Type Limits Name + LightingProfileWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + InteriorLightingHE, !- Name + Fraction, !- Schedule Type Limits Name + LightingProfileWeek_EELighting, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + InteriorLightingHE_OS, !- Name + Fraction, !- Schedule Type Limits Name + LightingProfileWeek_EELighting_interior_controls, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + InteriorLightingHE_VS, !- Name + Fraction, !- Schedule Type Limits Name + LightingProfileWeek_EELighting_garage_controls, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + ExteriorLighting, !- Name + Fraction, !- Schedule Type Limits Name + ExteriorLightingProfileWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + Refrigerator, !- Name + Fraction, !- Schedule Type Limits Name + RefrigeratorWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + MiscPlugLoad, !- Name + Fraction, !- Schedule Type Limits Name + MiscPlugLoadWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + CookingRange, !- Name + Fraction, !- Schedule Type Limits Name + CookingRangeWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + dhw_sch, !- Name + fraction, !- Schedule Type Limits Name + dhw_profile_week, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + Dishwasher, !- Name + Fraction, !- Schedule Type Limits Name + DishwasherWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + ClothesWasher, !- Name + Fraction, !- Schedule Type Limits Name + ClothesWasherWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + ClothesDryer, !- Name + Fraction, !- Schedule Type Limits Name + ClothesDryerWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + Sinks, !- Name + Fraction, !- Schedule Type Limits Name + SinksWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + Showers, !- Name + Fraction, !- Schedule Type Limits Name + ShowersWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + Baths, !- Name + Fraction, !- Schedule Type Limits Name + BathsWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + + Schedule:Year, + DHWDist, !- Name + Fraction, !- Schedule Type Limits Name + DHWDistWeek, !- Schedule:Week Name 1 + 1, !- Start Month 1 + 1, !- Start Day 1 + 12, !- End Month 1 + 31; !- End Day 1 + +!- =========== ALL OBJECTS IN CLASS: SCHEDULE:COMPACT =========== + + Schedule:Compact, + activity_sch, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,117.28; !- Field 3 + + Schedule:Compact, + inf_sch, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + + Schedule:Compact, + zone_control_type, !- Name + control_type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until 24:00,4; !- Field 3 + +!- New shading schedules per IECC 2012...ref Bob email dtd. 3rd November... + + Schedule:Compact, + shading_2012iecc, !- Name + fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until 24:00,0; !- Field 3 + +!- Shade-drapes schedule changed per IECC 2009 + + Schedule:Compact, + shading_2009iecc, !- Name + any number, !- Schedule Type Limits Name + Through: 5/30, !- Field 1 + For: AllDays, !- Field 2 + Until 24:00,0.85, !- Field 3 + Through: 8/31, !- Field 5 + For: AllDays, !- Field 6 + Until 24:00,0.7, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,0.85; !- Field 11 + + Schedule:Compact, + dhw_setpt, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until 24:00,48; !- Field 3 + +!- =========== ALL OBJECTS IN CLASS: SCHEDULE:CONSTANT =========== + + Schedule:Constant,DWWaterTempSchedule,Temperature,48.8888888888889; + + Schedule:Constant,CWWaterTempSchedule,Temperature,48.8888888888889; + + Schedule:Constant,SinkSensSchedule,Fraction,0.687777777777778; + + Schedule:Constant,SinkLatSchedule,Fraction,0.312222222222222; + + Schedule:Constant,ShowerSensSchedule,Fraction,0.51280276816609; + + Schedule:Constant,ShowerLatSchedule,Fraction,0.48719723183391; + + Schedule:Constant,BathSensSchedule,Fraction,1; + + Schedule:Constant,BathLatSchedule,Fraction,0; + + Schedule:Constant,SSBWaterTempSchedule,Temperature,40.5555555555556; + + Schedule:Constant,WaterHeaterSP1Schedule,Temperature,48.8888888888889; + + Schedule:Constant,WaterHeaterSP2Schedule,Temperature,40.5555555555556; + + Schedule:Constant,DHWSupplySetpoint,Temperature,48.8888888888889; + +!- Material properties for the consolidated insulation-framing objects defined in consolidated.materials.template... +!- Sheathing insulation and framing material: R0 + + Material, + sheathing_consol_layer, !- Name + Rough, !- Roughness + 0.0127, !- Thickness {m} + 0.0940184, !- Conductivity {W/m-K} + 685.008, !- Density {kg/m3} + 1172.332; !- Specific Heat {J/kg-K} + +!- Ceiling insulation and framing material: R38; Insulation Grade: 1; + + Material, + ceil_consol_layer, !- Name + Rough, !- Roughness + 0.34039219657243, !- Thickness {m} + 0.0617176, !- Conductivity {W/m-K} + 41.9286, !- Density {kg/m3} + 776.25126; !- Specific Heat {J/kg-K} + +!- floor insulation and framing material: R19; Insulation Grade: 1; + + Material, + floor_consol_layer, !- Name + Rough, !- Roughness + 0.1397, !- Thickness {m} + 0.0491038947368421, !- Conductivity {W/m-K} + 55.074, !- Density {kg/m3} + 916.9311; !- Specific Heat {J/kg-K} + +!- bsmtwall insulation and framing material: R0.0001 + + Material, + bsmtwall_consol_layer, !- Name + Rough, !- Roughness + 0.000254, !- Thickness {m} + 10.84384, !- Conductivity {W/m-K} + 120.801, !- Density {kg/m3} + 1036.25775; !- Specific Heat {J/kg-K} + +!- crawlwall insulation and framing material: R0.0001 + + Material, + crawlwall_consol_layer, !- Name + Rough, !- Roughness + 0.000254, !- Thickness {m} + 10.84384, !- Conductivity {W/m-K} + 120.801, !- Density {kg/m3} + 1036.25775; !- Specific Heat {J/kg-K} + +!- Exterior wall consolidated layer properties based on construction... +!- Default is wood-framed wall +!- Assembly: Wood_R13_R0_no_3.5_na_16_Sh_n_G; Framing Fraction: 0.25; Insulation Grade: 1; + + Construction, + Exterior Wall, !- Name + syn_stucco, !- Outside Layer + sheathing_consol_layer, !- Layer 2 + OSB_7/16in, !- Layer 3 + wall_consol_layer, !- Layer 4 + Drywall_1/2in; !- Layer 5 + +!- wall insulation and framing material: R13 + + Material, + wall_consol_layer, !- Name + Rough, !- Roughness + 0.0889, !- Thickness {m} + 0.0579573076923077, !- Conductivity {W/m-K} + 120.801, !- Density {kg/m3} + 1036.25775; !- Specific Heat {J/kg-K} + +!- =========== ALL OBJECTS IN CLASS: MATERIAL =========== + + WindowMaterial:Glazing, + Clear Acrylic Plastic, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.92, !- Solar Transmittance at Normal Incidence + 0.05, !- Front Side Solar Reflectance at Normal Incidence + 0.05, !- Back Side Solar Reflectance at Normal Incidence + 0.92, !- Visible Transmittance at Normal Incidence + 0.05, !- Front Side Visible Reflectance at Normal Incidence + 0.05, !- Back Side Visible Reflectance at Normal Incidence + 0.00, !- Infrared Transmittance at Normal Incidence + 0.90, !- Front Side Infrared Hemispherical Emissivity + 0.90, !- Back Side Infrared Hemispherical Emissivity + 0.90; !- Conductivity {W/m-K} + + WindowMaterial:Glazing, + Diffusing Acrylic Plastic, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.0022, !- Thickness {m} + 0.90, !- Solar Transmittance at Normal Incidence + 0.08, !- Front Side Solar Reflectance at Normal Incidence + 0.08, !- Back Side Solar Reflectance at Normal Incidence + 0.90, !- Visible Transmittance at Normal Incidence + 0.08, !- Front Side Visible Reflectance at Normal Incidence + 0.08, !- Back Side Visible Reflectance at Normal Incidence + 0.00, !- Infrared Transmittance at Normal Incidence + 0.90, !- Front Side Infrared Hemispherical Emissivity + 0.90, !- Back Side Infrared Hemispherical Emissivity + 0.90; !- Conductivity {W/m-K} + + Material, + Very High Reflectivity Surface, !- Name + Smooth, !- Roughness + 0.0005, !- Thickness {m} + 237, !- Conductivity {W/m-K} + 2702, !- Density {kg/m3} + 903, !- Specific Heat {J/kg-K} + 0.90, !- Thermal Absorptance + 0.05, !- Solar Absorptance + 0.05; !- Visible Absorptance + + Material, + GypsumBoard-5/16in, !- Name + Rough, !- Roughness + 7.93953E-03, !- Thickness {m} + 0.1586200, !- Conductivity {W/m-K} + 640, !- Density {kg/m3} + 1129.6, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.4, !- Solar Absorptance + 0.1; !- Visible Absorptance + + Material, + CopperPipe, !- Name + MediumRough, !- Roughness + 1.90500386169072E-02, !- Thickness {m} + 401, !- Conductivity {W/m-K} + 2243.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material, + F08 Metal surface, !- Name + Smooth, !- Roughness + 0.0008, !- Thickness {m} + 45.28, !- Conductivity {W/m-K} + 7824, !- Density {kg/m3} + 500; !- Specific Heat {J/kg-K} + + Material, + Concrete_4in, !- Name + Rough, !- Roughness + 0.1014984, !- Thickness {m} + 1.312098, !- Conductivity {W/m-K} + 2242.8, !- Density {kg/m3} + 465.2; !- Specific Heat {J/kg-K} + + Material, + Asphalt_shingle, !- Name + MediumRough, !- Roughness + 6.33985285170672E-03, !- Thickness {m} + 0.08186, !- Conductivity {W/m-K} + 1121.2917044623, !- Density {kg/m3} + 1255.20000949809, !- Specific Heat {J/kg-K} + , !- Thermal Absorptance + 0.75; !- Solar Absorptance + + Material, + Wood_shingle, !- Name + MediumSmooth, !- Roughness + 1.27000257446048E-02, !- Thickness {m} + 0.11388, !- Conductivity {W/m-K} + 426.090847695673, !- Density {kg/m3} + 1631.76001234752; !- Specific Heat {J/kg-K} + + Material, + Slate_shingle, !- Name + MediumSmooth, !- Roughness + 1.27000257446048E-02, !- Thickness {m} + 1.44219, !- Conductivity {W/m-K} + 1601.845292089, !- Density {kg/m3} + 1255.20000949809; !- Specific Heat {J/kg-K} + + Material, + cement_stucco, !- Name + MediumSmooth, !- Roughness + 1.905E-02, !- Thickness {m} + 0.721, !- Conductivity {W/m-K} + 1865.58, !- Density {kg/m3} + 878.640006648665; !- Specific Heat {J/kg-K} + + Material, + syn_stucco, !- Name + MediumSmooth, !- Roughness + 0.3048E-02, !- Thickness {m} + 8.65E-02, !- Conductivity {W/m-K} + 400, !- Density {kg/m3} + 878.640006648665; !- Specific Heat {J/kg-K} + + Material, + Drywall_1/2in, !- Name + MediumSmooth, !- Roughness + 1.27000257446048E-02, !- Thickness {m} + 0.16009, !- Conductivity {W/m-K} + 800.922646044499, !- Density {kg/m3} + 1087.84000823168; !- Specific Heat {J/kg-K} + + Material, + OSB_5/8in, !- Name + MediumSmooth, !- Roughness + 0.015875032180756, !- Thickness {m} + 0.1163, !- Conductivity {W/m-K} + 544.627399310259, !- Density {kg/m3} + 1213.36000918149; !- Specific Heat {J/kg-K} + + Material, + OSB_7/16in, !- Name + MediumSmooth, !- Roughness + 0.0111125, !- Thickness {m} + 0.1163, !- Conductivity {W/m-K} + 544.627399310259, !- Density {kg/m3} + 1213.36000918149; !- Specific Heat {J/kg-K} + + Material, + Blown_R30, !- Name + MediumRough, !- Roughness + 0.212598430964684, !- Thickness {m} + 0.04119, !- Conductivity {W/m-K} + 9.61107175253399, !- Density {kg/m3} + 836.800006332062; !- Specific Heat {J/kg-K} + + Material, + Blown_R30_top, !- Name + MediumRough, !- Roughness + 0.117348237880148, !- Thickness {m} + 0.04119, !- Conductivity {W/m-K} + 9.61107175253399, !- Density {kg/m3} + 836.800006332062, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Plywood_3/4in, !- Name + Rough, !- Roughness + 0.01905, !- Thickness {m} + 0.1154577, !- Conductivity {W/m-K} + 544.68, !- Density {kg/m3} + 674.54, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Batt_R19, !- Name + MediumRough, !- Roughness + 2.54000514892096E-02, !- Thickness {m} + 3.47522010738099E-03, !- Conductivity {W/m-K} + 9.61107175253399, !- Density {kg/m3} + 836.800006332062, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Lumber_2x4, !- Name + Rough, !- Roughness + 0.0890016, !- Thickness {m} + 0.1154577, !- Conductivity {W/m-K} + 512.64, !- Density {kg/m3} + 767.58, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Carpet_n_pad, !- Name + MediumSmooth, !- Roughness + 2.54000514892096E-02, !- Thickness {m} + 6.01314018580031E-02, !- Conductivity {W/m-K} + 32.03690584178, !- Density {kg/m3} + 836.800006332062, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Batt_R13, !- Name + MediumRough, !- Roughness + 0.0889, !- Thickness {m} + 0.03876, !- Conductivity {W/m-K} + 9.61107175253399, !- Density {kg/m3} + 836.800006332062, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + OSB_1/2in, !- Name + MediumSmooth, !- Roughness + 1.27000257446048E-02, !- Thickness {m} + 0.1163, !- Conductivity {W/m-K} + 544.627399310259, !- Density {kg/m3} + 1213.36000918149, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + soil_12in, !- Name + Rough, !- Roughness + 0.3048, !- Thickness {m} + 1.731, !- Conductivity {W/m-K} + 1842.3, !- Density {kg/m3} + 232.6, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + door_const, !- Name + Smooth, !- Roughness + 0.031702180114817, !- Thickness {m} + 0.0720096, !- Conductivity {W/m-K} + 512.64, !- Density {kg/m3} + 767.58; !- Specific Heat {J/kg-K} + + Material, + Gyp_board_1/2in, !- Name + Rough, !- Roughness + 0.01271016, !- Thickness {m} + 0.1586200, !- Conductivity {W/m-K} + 640, !- Density {kg/m3} + 1129.6, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.4, !- Solar Absorptance + 0.1; !- Visible Absorptance + + Material, + Std Wood 6inch, !- Name + MediumSmooth, !- Roughness + 0.15, !- Thickness {m} + 0.12, !- Conductivity {W/m-K} + 540.0000, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Construction, + InteriorFurnishings, !- Name + Std Wood 6inch; !- Outside Layer + + Construction, + ceiling-floor-layer, !- Name + Lumber_2x4; !- Outside Layer + +!- =========== ALL OBJECTS IN CLASS: MATERIAL:NOMASS =========== + + Material:NoMass, + Manf_wall_airgap, !- Name + Smooth, !- Roughness + 0.12; !- Thermal Resistance {m2-K/W} + + Material:NoMass, + Bldg_paper_felt, !- Name + Smooth, !- Roughness + 1.05666113069662E-02; !- Thermal Resistance {m2-K/W} + + Material:NoMass, + R_high, !- Name + MediumRough, !- Roughness + 177; !- Thermal Resistance {m2-K/W} + +!- =========== ALL OBJECTS IN CLASS: MATERIAL:AIRGAP =========== + + Material:AirGap, + Air_4_in_vert, !- Name + 0.158499169604493; !- Thermal Resistance {m2-K/W} + + Material:AirGap, + 3/4in_air_space, !- Name + 0.08513; !- Thermal Resistance {m2-K/W} + + Material:AirGap, + 3/4in_Reflective_air_space, !- Name + 0.246554; !- Thermal Resistance {m2-K/W} + +!- =========== ALL OBJECTS IN CLASS: CONSTRUCTION =========== + + Construction, + Exterior Floor, !- Name + floor_consol_layer, !- Outside Layer + Plywood_3/4in, !- Layer 2 + Carpet_n_pad; !- Layer 3 + + Construction, + Interior Floor, !- Name + Plywood_3/4in, !- Outside Layer + Carpet_n_pad; !- Layer 2 + + Construction, + Interior Ceiling, !- Name + ceil_consol_layer, !- Outside Layer + Drywall_1/2in; !- Layer 2 + + Construction, + attic floor, !- Name + Drywall_1/2in, !- Outside Layer + ceil_consol_layer; !- Layer 2 + + Construction, + fndn_roof, !- Name + Carpet_n_pad, !- Outside Layer + Plywood_3/4in, !- Layer 2 + ceil_consol_layer; !- Layer 3 + + Construction, + interiorwall, !- Name + Drywall_1/2in, !- Outside Layer + OSB_5/8in, !- Layer 2 + Drywall_1/2in; !- Layer 3 + + Construction, + Interior Wall, !- Name + Drywall_1/2in, !- Outside Layer + Air_4_in_vert, !- Layer 2 + Drywall_1/2in; !- Layer 3 + + Construction, + Exterior Roof, !- Name + Asphalt_shingle, !- Outside Layer + OSB_1/2in; !- Layer 2 + + Construction, + Exterior Window, !- Name + Glass; !- Outside Layer + + Construction, + Interior Window, !- Name + Glass; !- Outside Layer + + Construction, + Exterior Door, !- Name + door_const; !- Outside Layer + + Construction, + Interior Door, !- Name + door_const; !- Outside Layer + + Construction, + Gable_end, !- Name + cement_stucco, !- Outside Layer + Bldg_paper_felt, !- Layer 2 + OSB_5/8in, !- Layer 3 + Air_4_in_vert, !- Layer 4 + Drywall_1/2in; !- Layer 5 + + Construction, + crawl_floor, !- Name + R_high, !- Outside Layer + soil_12in; !- Layer 2 + + Construction, + window_w_blinds, !- Name + Glass, !- Outside Layer + int_blind; !- Layer 2 + + Construction, + Insulated Pipe, !- Name + Pipe Insulation, !- Outside Layer + CopperPipe; !- Layer 2 + + Construction, + Plain Pipe, !- Name + CopperPipe; !- Outside Layer + + Construction, + TDD Pipe, !- Name + Very High Reflectivity Surface; !- Outside Layer + + Construction, + TDD Dome, !- Name + Clear Acrylic Plastic; !- Outside Layer + + Construction, + TDD Diffuser, !- Name + Diffusing Acrylic Plastic; !- Outside Layer + + Construction, + crawl wall, !- Name + Concrete_4in; !- Outside Layer + +!- Window Glass properties based on IECC window U requirement... +!----------------------------------------------------------------------- + + WindowMaterial:SimpleGlazingSystem, + Glass, !- Name + 2.27144, !- U-Factor {W/m2-K} + 0.3344, !- Solar Heat Gain Coefficient + 0.88; !- Visible Transmittance + +!----------------------------------------------------------------------- +!- =========== ALL OBJECTS IN CLASS: WINDOWMATERIAL:BLIND =========== +!*** Properties for blinds taken from E+ dataset for 'Blinds with Medium Reflectivity Slats'*** +! + + WindowMaterial:Blind, + int_blind, !- Name + Horizontal, !- Slat Orientation + 0.025, !- Slat Width {m} + 0.01875, !- Slat Separation {m} + 0.001, !- Slat Thickness {m} + 45.0, !- Slat Angle {deg} + 221, !- Slat Conductivity {W/m-K} + 0.0, !- Slat Beam Solar Transmittance + 0.5, !- Front Side Slat Beam Solar Reflectance + 0.5, !- Back Side Slat Beam Solar Reflectance + 0.0, !- Slat Diffuse Solar Transmittance + 0.5, !- Front Side Slat Diffuse Solar Reflectance + 0.5, !- Back Side Slat Diffuse Solar Reflectance + 0.0, !- Slat Beam Visible Transmittance + 0.5, !- Front Side Slat Beam Visible Reflectance + 0.5, !- Back Side Slat Beam Visible Reflectance + 0.0, !- Slat Diffuse Visible Transmittance + 0.5, !- Front Side Slat Diffuse Visible Reflectance + 0.5, !- Back Side Slat Diffuse Visible Reflectance + 0.0, !- Slat Infrared Hemispherical Transmittance + 0.9, !- Front Side Slat Infrared Hemispherical Emissivity + 0.9, !- Back Side Slat Infrared Hemispherical Emissivity + 0.050, !- Blind to Glass Distance {m} + 0.5, !- Blind Top Opening Multiplier + 0.5, !- Blind Bottom Opening Multiplier + 0.5, !- Blind Left Side Opening Multiplier + 0.5, !- Blind Right Side Opening Multiplier + , !- Minimum Slat Angle {deg} + ; !- Maximum Slat Angle {deg} + +!- =========== ALL OBJECTS IN CLASS: WINDOWPROPERTY:SHADINGCONTROL =========== +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:CONTROL =========== + + GroundHeatTransfer:Control, + gtp_control, !- Name + no, !- Run Basement Preprocessor + yes; !- Run Slab Preprocessor + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:MATERIALS =========== + + GroundHeatTransfer:Slab:Materials, + 2, !- NMAT: Number of materials + 0.16, !- ALBEDO: Surface Albedo: No Snow + 0.4, !- ALBEDO: Surface Albedo: Snow + 0.9, !- EPSLW: Surface Emissivity: No Snow + 0.9, !- EPSLW: Surface Emissivity: Snow + 0.75, !- Z0: Surface Roughness: No Snow {cm} + 0.05, !- Z0: Surface Roughness: Snow {cm} + 6, !- HIN: Indoor HConv: Downward Flow {W/m2-K} + 9; !- HIN: Indoor HConv: Upward {W/m2-K} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:MATLPROPS =========== + + GroundHeatTransfer:Slab:MatlProps, + 2300, !- RHO: Slab Material density {kg/m3} + 1200, !- RHO: Soil Density {kg/m3} + 650, !- CP: Slab CP {J/kg-K} + 1200, !- CP: Soil CP {J/kg-K} + 0.9, !- TCON: Slab k {W/m-K} + 1; !- TCON: Soil k {W/m-K} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:BOUNDCONDS =========== + + GroundHeatTransfer:Slab:BoundConds, + FALSE, !- EVTR: Is surface evapotranspiration modeled + TRUE, !- FIXBC: is the lower boundary at a fixed temperature + 10, !- TDEEPin {C} + FALSE; !- USRHflag: Is the ground surface h specified by the user? + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:BLDGPROPS =========== + + GroundHeatTransfer:Slab:BldgProps, + 10, !- IYRS: Number of years to iterate + 0, !- Shape: Slab shape + 4, !- HBLDG: Building height {m} + 22.22, !- TIN1: January Indoor Average Temperature Setpoint {C} + 22.22, !- TIN2: February Indoor Average Temperature Setpoint {C} + 22.22, !- TIN3: March Indoor Average Temperature Setpoint {C} + 22.22, !- TIN4: April Indoor Average Temperature Setpoint {C} + 22.22, !- TIN5: May Indoor Average Temperature Setpoint {C} + 23.88, !- TIN6: June Indoor Average Temperature Setpoint {C} + 23.88, !- TIN7: July Indoor Average Temperature Setpoint {C} + 23.88, !- TIN8: August Indoor Average Temperature Setpoint {C} + 23.88, !- TIN9: September Indoor Average Temperature Setpoint {C} + 22.22, !- TIN10: October Indoor Average Temperature Setpoint {C} + 22.22, !- TIN11: November Indoor Average Temperature Setpoint {C} + 22.22, !- TIN12: December Indoor Average Temperature Setpoint {C} + 0, !- TINAmp: Daily Indoor sine wave variation amplitude {deltaC} + 0.1; !- ConvTol: Convergence Tolerance + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:INSULATION =========== + + GroundHeatTransfer:Slab:Insulation, + 0, !- RINS: R value of under slab insulation {m2-K/W} + 0, !- DINS: Width of strip of under slab insulation {m} + 0, !- RVINS: R value of vertical insulation {m2-K/W} + 0.6, !- ZVINS: Depth of vertical insulation {m} + 0; !- IVINS: Flag: Is there vertical insulation + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:SLAB:EQUIVALENTSLAB =========== + + GroundHeatTransfer:Slab:EquivalentSlab, + 2.59994805991784, !- APRatio: The area to perimeter ratio for this slab {m} + 0.1, !- SLABDEPTH: Thickness of slab on grade {m} + 15, !- CLEARANCE: Distance from edge of slab to domain edge {m} + 15; !- ZCLEARANCE: Distance from bottom of slab to domain bottom {m} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:SIMPARAMETERS =========== + + GroundHeatTransfer:Basement:SimParameters, + 0.1, !- F: Multiplier for the ADI solution + 15; !- IYRS: Maximum number of yearly iterations: + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:MATLPROPS =========== + + GroundHeatTransfer:Basement:MatlProps, + 6, !- NMAT: Number of materials in this domain + 2243, !- Density for Foundation Wall {kg/m3} + 2243, !- density for Floor Slab {kg/m3} + 311, !- density for Ceiling {kg/m3} + 1500, !- density for Soil {kg/m3} + 2000, !- density for Gravel {kg/m3} + 449, !- density for Wood {kg/m3} + 880, !- Specific heat for foundation wall {J/kg-K} + 880, !- Specific heat for floor slab {J/kg-K} + 1530, !- Specific heat for ceiling {J/kg-K} + 840, !- Specific heat for soil {J/kg-K} + 720, !- Specific heat for gravel {J/kg-K} + 1530, !- Specific heat for wood {J/kg-K} + 1.4, !- Thermal conductivity for foundation wall {W/m-K} + 1.4, !- Thermal conductivity for floor slab {W/m-K} + 0.09, !- Thermal conductivity for ceiling {W/m-K} + 1.1, !- thermal conductivity for soil {W/m-K} + 1.9, !- thermal conductivity for gravel {W/m-K} + 0.12; !- thermal conductivity for wood {W/m-K} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:INSULATION =========== +!- $r_bsmtwall_SI = $r_bsmtwall/5.6786; +!- 0.0001; + + GroundHeatTransfer:Basement:Insulation, + 1.76099742894375e-05, !- REXT: R Value of any exterior insulation {m2-K/W} + True; !- INSFULL: Flag: Is the wall fully insulated? + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:SURFACEPROPS =========== + + GroundHeatTransfer:Basement:SurfaceProps, + 0.16, !- ALBEDO: Surface albedo for No snow conditions + 0.4, !- ALBEDO: Surface albedo for snow conditions + 0.94, !- EPSLN: Surface emissivity No Snow + 0.86, !- EPSLN: Surface emissivity with Snow + 6, !- VEGHT: Surface roughness No snow conditions {cm} + 0.25, !- VEGHT: Surface roughness Snow conditions {cm} + False; !- PET: Flag, Potential evapotranspiration on? + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:BLDGDATA =========== + + GroundHeatTransfer:Basement:BldgData, + 0.200000006162114, !- DWALL: Wall thickness {m} + 0.243828108701145, !- DSLAB: Floor slab thickness {m} + 0.3, !- DGRAVXY: Width of gravel pit beside basement wall {m} + 0.2, !- DGRAVZN: Gravel depth extending above the floor slab {m} + 0.1; !- DGRAVZP: Gravel depth below the floor slab {m} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:INTERIOR =========== + + GroundHeatTransfer:Basement:Interior, + True, !- COND: Flag: Is the basement conditioned? + 0.92, !- HIN: Downward convection only heat transfer coefficient {W/m2-K} + 4.04, !- HIN: Upward convection only heat transfer coefficient {W/m2-K} + 3.08, !- HIN: Horizontal convection only heat transfer coefficient {W/m2-K} + 6.13, !- HIN: Downward combined (convection and radiation) heat transfer coefficient {W/m2-K} + 9.26, !- HIN: Upward combined (convection and radiation) heat transfer coefficient {W/m2-K} + 8.29; !- HIN: Horizontal combined (convection and radiation) heat transfer coefficient {W/m2-K} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:COMBLDG =========== + + GroundHeatTransfer:Basement:ComBldg, + 21, !- January average temperature {C} + 21, !- February average temperature {C} + 21, !- March average temperature {C} + 21, !- April average temperature {C} + 24, !- May average temperature {C} + 24, !- June average temperature {C} + 24, !- July average temperature {C} + 24, !- August average temperature {C} + 24, !- September average temperature {C} + 24, !- October average temperature {C} + 21, !- November average temperature {C} + 21, !- December average temperature {C} + 21; !- Daily variation sine wave amplitude {deltaC} + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:EQUIVSLAB =========== + + GroundHeatTransfer:Basement:EquivSlab, + 2.59994805991784, !- APRatio: The area to perimeter ratio for this slab {m} + True; !- EquivSizing: Flag + +!- =========== ALL OBJECTS IN CLASS: GROUNDHEATTRANSFER:BASEMENT:EQUIVAUTOGRID =========== + + GroundHeatTransfer:Basement:EquivAutoGrid, + 15, !- CLEARANCE: Distance from outside of wall to edge of 3-D ground domain {m} + 0.1, !- SlabDepth: Thickness of the floor slab {m} + 1.21914054350572; !- BaseDepth: Depth of the basement wall below grade {m} + +!- Process internal gains from the appliances.template.. + + ElectricEquipment, + dishwasher1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + DishWasher, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 65.698787492023, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.15, !- Fraction Latent + 0.6, !- Fraction Radiant + 0.25, !- Fraction Lost + dishwasher; !- End-Use Subcategory + + ElectricEquipment, + refrigerator1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + Refrigerator, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 91.0575745202123, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 1, !- Fraction Radiant + 0, !- Fraction Lost + refrigerator; !- End-Use Subcategory + + ElectricEquipment, + clotheswasher1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + ClothesWasher, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 28.4784377542718, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.8, !- Fraction Radiant + 0.2, !- Fraction Lost + clotheswasher; !- End-Use Subcategory + + ElectricEquipment, + electric_dryer1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + ClothesDryer, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 213.064557285022, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.05, !- Fraction Latent + 0.15, !- Fraction Radiant + 0.8, !- Fraction Lost + electric_dryer; !- End-Use Subcategory + + ElectricEquipment, + electric_range1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + CookingRange, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 248.154224774405, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.3, !- Fraction Latent + 0.4, !- Fraction Radiant + 0.3, !- Fraction Lost + electric_range; !- End-Use Subcategory + + ElectricEquipment, + television1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + InteriorLighting, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 0, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 1, !- Fraction Radiant + 0, !- Fraction Lost + television; !- End-Use Subcategory + + ElectricEquipment, + electric_mels1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + MiscPlugLoad, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 567.464237516869, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.06, !- Fraction Latent + 0.69, !- Fraction Radiant + 0.25, !- Fraction Lost + electric_mels; !- End-Use Subcategory + + ElectricEquipment, + IECC_Adj1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + MiscPlugLoad, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 1.54356736989469, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0624390461422629, !- Fraction Latent + 0.41190936353998, !- Fraction Radiant + 0.251045347957769, !- Fraction Lost + IECC_adj; !- End-Use Subcategory + +!- HVAC System definition from hvac.afn.tmpl... +!- =========== ALL OBJECTS IN CLASS: SCHEDULE:COMPACT =========== + + Schedule:Constant,boiler_setpt,Temperature,80; + + Schedule:Constant,Compressor Setpoint,Temperature,50; + + Schedule:Compact, + dhw_setpt_hpwh, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until 24:00,44; !- Field 3 + + Schedule:Constant,DOAShightemp,Temperature,200; + + Schedule:Constant,DOASlowtemp,Temperature,-60; + + Schedule:Compact, + Supply-Air-Temp-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,12; !- Field 3 + + Schedule:Compact, + always_avail, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + + Schedule:Compact, + always_off, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0; !- Field 3 + + Schedule:Compact, + heating_sch_HRef, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,20; !- Field 3 + + Schedule:Compact, + cooling_sch_HRef, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,25.55; !- Field 3 + + Schedule:Compact, + heating_sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,22.2222222222223; !- Field 3 + + Schedule:Compact, + cooling_sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,23.888888888889; !- Field 3 + + Schedule:Compact, + fan_cycle, !- Name + any number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0; !- Field 3 + + ThermostatSetpoint:DualSetpoint, + thermostat_living Dual SP Control, !- Name + heating_sch, !- Heating Setpoint Temperature Schedule Name + cooling_sch; !- Cooling Setpoint Temperature Schedule Name + +!- HPWH curves taken from E+ example file. +!- Heating Capacity as a Function of Temperature Curve (Air Wet-bulb T, Condenser Water Inlet T) +!- Colmac HPA 2000 Air Source Heat Pump Water Heater +!- Rating point: 29.4 C (85 F) Entering Air Dry-bulb Temperature +!- 22.2 C (72 F) Entering Air Wet-bulb Temperature +!- 56.7 C (132.2 F) Entering Condenser Water Temperature +!- Capacity = 17028.6 W (58117 BTUH) water heating capacity +!- COP = 3.37 W/W (12.21 BTUH/W) water heating efficiency +! + + Curve:Biquadratic, + HPWH-Htg-Cap-fT, !- Name + 0.563, !- Coefficient1 Constant + 0.0437, !- Coefficient2 x + 0.000039, !- Coefficient3 x**2 + 0.0055, !- Coefficient4 y + -.000148, !- Coefficient5 y**2 + -.000145, !- Coefficient6 x*y + 0, !- Minimum Value of x + 100, !- Maximum Value of x + 0, !- Minimum Value of y + 100, !- Maximum Value of y + 0; !- Minimum Curve Output + + Curve:Biquadratic, + HPWH-Htg-COP-fT, !- Name + 1.1332, !- Coefficient1 Constant + 0.063, !- Coefficient2 x + -.0000979, !- Coefficient3 x**2 + -.00972, !- Coefficient4 y + -.0000214, !- Coefficient5 y**2 + -.000686, !- Coefficient6 x*y + 0, !- Minimum Value of x + 100, !- Maximum Value of x + 0, !- Minimum Value of y + 100; !- Maximum Value of y + + Curve:Quadratic, + HPWH-COP-fPLR, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + + Curve:Biquadratic, + HPWHHeatingCapFTemp, !- Name + 0.369827, !- Coefficient1 Constant + 0.043341, !- Coefficient2 x + -0.00023, !- Coefficient3 x**2 + 0.000466, !- Coefficient4 y + 0.000026, !- Coefficient5 y**2 + -0.00027, !- Coefficient6 x*y + 0.0, !- Minimum Value of x + 40.0, !- Maximum Value of x + 20.0, !- Minimum Value of y + 90.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPWHHeatingCOPFTemp, !- Name + 1.19713, !- Coefficient1 Constant + 0.077849, !- Coefficient2 x + -0.0000016, !- Coefficient3 x**2 + -0.02675, !- Coefficient4 y + 0.000296, !- Coefficient5 y**2 + -0.00112, !- Coefficient6 x*y + 0.0, !- Minimum Value of x + 40.0, !- Maximum Value of x + 20.0, !- Minimum Value of y + 90.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPACCoolCapFT, !- Name + 0.766956, !- Coefficient1 Constant + 0.0107756, !- Coefficient2 x + -0.0000414703, !- Coefficient3 x**2 + 0.00134961, !- Coefficient4 y + -0.000261144, !- Coefficient5 y**2 + 0.000457488, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 21.11111, !- Minimum Value of y + 46.11111; !- Maximum Value of y + + Curve:Biquadratic, + HPACCOOLEIRFT, !- Name + 0.297145, !- Coefficient1 Constant + 0.0430933, !- Coefficient2 x + -0.000748766, !- Coefficient3 x**2 + 0.00597727, !- Coefficient4 y + 0.000482112, !- Coefficient5 y**2 + -0.000956448, !- Coefficient6 x*y + 12.77778, !- Minimum Value of x + 23.88889, !- Maximum Value of x + 21.11111, !- Minimum Value of y + 46.11111; !- Maximum Value of y + + Curve:Cubic, + HPACHeatCapFT, !- Name + 0.758746, !- Coefficient1 Constant + 0.027626, !- Coefficient2 x + 0.000148716, !- Coefficient3 x**2 + 0.0000034992, !- Coefficient4 x**3 + -20.0, !- Minimum Value of x + 20.0; !- Maximum Value of x + + Curve:Cubic, + HPACHeatCapFFF, !- Name + 0.84, !- Coefficient1 Constant + 0.16, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 x**3 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Cubic, + HPACHeatEIRFT, !- Name + 1.19248, !- Coefficient1 Constant + -0.0300438, !- Coefficient2 x + 0.00103745, !- Coefficient3 x**2 + -0.000023328, !- Coefficient4 x**3 + -20.0, !- Minimum Value of x + 20.0; !- Maximum Value of x + + Curve:Quadratic, + HPACCoolCapFFF, !- Name + 0.8, !- Coefficient1 Constant + 0.2, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Quadratic, + HPACCOOLEIRFFF, !- Name + 1.156, !- Coefficient1 Constant + -0.1816, !- Coefficient2 x + 0.0256, !- Coefficient3 x**2 + 0.5, !- Minimum Value of x + 1.5; !- Maximum Value of x + + Curve:Quadratic, + HPACCOOLPLFFPLR, !- Name + 0.85, !- Coefficient1 Constant + 0.15, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Quadratic, + HPACHeatEIRFFF, !- Name + 1.3824, !- Coefficient1 Constant + -0.4336, !- Coefficient2 x + 0.0512, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Biquadratic, + Defrost_EIR_FT, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 100, !- Maximum Value of x + 0, !- Minimum Value of y + 100; !- Maximum Value of y + +! This is a dummy waste heat function of temp curve required for the +! multispeed coils. The curve is set as a constant curve that would yield +! a factor of 1 at all temperatures for simplicity. +! However, this curve is not used if the fuel type is electricity (which is +! what we limit ourselves to in terms of multispeed DX equipment) per +! the E+ version 8.0 I/O reference Page 1301. + + Curve:Biquadratic, + dummy-waste-heat-curve, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 1, !- Minimum Curve Output + 1, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +!- These coefficients were taken directly from the report below. For further details users may need +!- to refer this report. +!- D. Cutler, J. Winkler, N. Kruis, and C. Christensen +!- National Renewable Energy Laboratory +!- M. Brandemuehl +!- University of Colorado +! +!- Improved Modeling of Residential Air Conditioners and Heat Pumps for Energy Calculations +! +!- Technical Report +!- NREL/TP-5500-56354 +!- January 2013 +! +! +!- Air Conditioner Performance Curves were taken from: Tables 9, 10, 16 and 17: +!- ************ Single Speed Cooling ********** + + Curve:Biquadratic, + ACCoolingCAPFTemp, !- Name + 1.5509, !- Coefficient1 Constant + -0.07505, !- Coefficient2 x + 0.0031, !- Coefficient3 x**2 + 0.0024, !- Coefficient4 y + -0.00005, !- Coefficient5 y**2 + -0.00043, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + ACCoolingEIRFTemp, !- Name + -0.30428, !- Coefficient1 Constant + 0.11805, !- Coefficient2 x + -0.00342, !- Coefficient3 x**2 + -0.00626, !- Coefficient4 y + 0.0007, !- Coefficient5 y**2 + -0.00047, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACCoolingCAPFFF, !- Name + 0.718605468, !- Coefficient1 Constant + 0.410099989, !- Coefficient2 x + -0.128705457, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACCoolingEIRFFF, !- Name + 1.32299905, !- Coefficient1 Constant + -0.477711207, !- Coefficient2 x + 0.154712157, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default from +!- Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + ACCoolingPLFFPLR, !- Name + 0.90, !- Coefficient1 Constant + 0.10, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- Heat Pump Performance Curves were taken from: Tables 14, 15, 18 and 19: +!- ************ Single Speed Cooling ********** + + Curve:Biquadratic, + HPCoolingCAPFTemp, !- Name + 1.55736, !- Coefficient1 Constant + -0.074448, !- Coefficient2 x + 0.003099, !- Coefficient3 x**2 + 0.00146, !- Coefficient4 y + -0.000041, !- Coefficient5 y**2 + -0.000427, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPCoolingEIRFTemp, !- Name + -0.350448, !- Coefficient1 Constant + 0.11681, !- Coefficient2 x + -0.0034, !- Coefficient3 x**2 + -0.001226, !- Coefficient4 y + 0.000601, !- Coefficient5 y**2 + -0.000467, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPCoolingCAPFFF, !- Name + 0.718664047, !- Coefficient1 Constant + 0.41797409, !- Coefficient2 x + -0.136638137, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPCoolingEIRFFF, !- Name + 1.143487507, !- Coefficient1 Constant + -0.13943972, !- Coefficient2 x + -0.004047787, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default curve +!- from Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + HPCOOLPLFFPLR, !- Name + 0.90, !- Coefficient1 Constant + 0.10, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- ************ Single Speed Heating ********** + + Curve:Biquadratic, + HPHeatingCAPFTemp, !- Name + 0.876825, !- Coefficient1 Constant + -0.002955, !- Coefficient2 x + -0.000058, !- Coefficient3 x**2 + 0.025335, !- Coefficient4 y + 0.000196, !- Coefficient5 y**2 + -0.000043, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPHeatingEIRFTemp, !- Name + 0.704658, !- Coefficient1 Constant + 0.008767, !- Coefficient2 x + 0.000625, !- Coefficient3 x**2 + -0.009037, !- Coefficient4 y + 0.000738, !- Coefficient5 y**2 + -0.001025, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHeatingCAPFFF, !- Name + 0.694045465, !- Coefficient1 Constant + 0.474207981, !- Coefficient2 x + -0.168253446, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHeatingEIRFFF, !- Name + 2.185418751, !- Coefficient1 Constant + -1.942827919, !- Coefficient2 x + 0.757409168, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default curve +!- from Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + HPHeatPLFFPLR, !- Name + 0.90, !- Coefficient1 Constant + 0.10, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- *************** Low Speed Heating ************ + + Curve:Biquadratic, + HPLowStageHeatingCAPFTemp, !- Name + 0.84613, !- Coefficient1 Constant + -0.002279, !- Coefficient2 x + -0.000047, !- Coefficient3 x**2 + 0.026703, !- Coefficient4 y + 0.000201, !- Coefficient5 y**2 + -0.000079, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPLowStageHeatingEIRFTemp, !- Name + 0.551837, !- Coefficient1 Constant + 0.02038, !- Coefficient2 x + 0.000546, !- Coefficient3 x**2 + -0.009638, !- Coefficient4 y + 0.000785, !- Coefficient5 y**2 + -0.00125, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPLowStageHeatingCAPFFF, !- Name + 0.741466907, !- Coefficient1 Constant + 0.378645444, !- Coefficient2 x + -0.119754733, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPLowStageHeatingEIRFFF, !- Name + 2.153618211, !- Coefficient1 Constant + -1.737190609, !- Coefficient2 x + 0.584269478, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- *************** High Speed Heating ************ + + Curve:Biquadratic, + HPHighStageHeatingCAPFTemp, !- Name + 0.818223, !- Coefficient1 Constant + 0.001981, !- Coefficient2 x + -0.000203, !- Coefficient3 x**2 + 0.028703, !- Coefficient4 y + 0.000207, !- Coefficient5 y**2 + -0.000071, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPHighStageHeatingEIRFTemp, !- Name + 0.81584, !- Coefficient1 Constant + -0.00615, !- Coefficient2 x + 0.001021, !- Coefficient3 x**2 + -0.001301, !- Coefficient4 y + 0.001083, !- Coefficient5 y**2 + -0.001487, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHighStageHeatingCAPFFF,!- Name + 0.76634609, !- Coefficient1 Constant + 0.32840943, !- Coefficient2 x + -0.094701495, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHighStageHeatingEIRFFF,!- Name + 2.001041353, !- Coefficient1 Constant + -1.58869128, !- Coefficient2 x + 0.587593517, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default curve +!- from Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + HP2StageHeatingPLFFPLR, !- Name + 0.93, !- Coefficient1 Constant + 0.07, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- **************** Low Speed Cooling ********* + + Curve:Biquadratic, + HPLowStageCoolingCAPFTemp, !- Name + 1.658788, !- Coefficient1 Constant + -0.083453, !- Coefficient2 x + 0.003424, !- Coefficient3 x**2 + 0.002433, !- Coefficient4 y + -0.000045, !- Coefficient5 y**2 + -0.000534, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPLowStageCoolingEIRFTemp, !- Name + -0.582916, !- Coefficient1 Constant + 0.158101, !- Coefficient2 x + -0.004398, !- Coefficient3 x**2 + -0.020335, !- Coefficient4 y + 0.00108, !- Coefficient5 y**2 + -0.00064, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPLowStageCoolingCAPFFF, !- Name + 0.655239515, !- Coefficient1 Constant + 0.511655216, !- Coefficient2 x + -0.166894731, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPLowStageCoolingEIRFFF, !- Name + 1.639108268, !- Coefficient1 Constant + -0.998953996, !- Coefficient2 x + 0.359845728, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- **************** High Speed Cooling ********* + + Curve:Biquadratic, + HPHighStageCoolingCAPFTemp, !- Name + 1.472738, !- Coefficient1 Constant + -0.067222, !- Coefficient2 x + 0.00292, !- Coefficient3 x**2 + 0.000052, !- Coefficient4 y + -0.00003, !- Coefficient5 y**2 + -0.000359, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HPHighStageCoolingEIRFTemp, !- Name + -0.488196, !- Coefficient1 Constant + 0.099162, !- Coefficient2 x + -0.00237, !- Coefficient3 x**2 + 0.019503, !- Coefficient4 y + 0.00043, !- Coefficient5 y**2 + -0.001097, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHighStageCoolingCAPFFF,!- Name + 0.618281092, !- Coefficient1 Constant + 0.569060264, !- Coefficient2 x + -0.187341356, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + HPHighStageCoolingEIRFFF,!- Name + 1.570774717, !- Coefficient1 Constant + -0.914152018, !- Coefficient2 x + 0.343377302, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default curve +!- from Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + HP2StageCoolingPLFFPLR, !- Name + 0.93, !- Coefficient1 Constant + 0.07, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- ************ Low Speed Cooling ********** + + Curve:Biquadratic, + ACLowStageCoolingCAPFTemp, !- Name + 1.66458, !- Coefficient1 Constant + -0.08039, !- Coefficient2 x + 0.0033, !- Coefficient3 x**2 + 0.00124, !- Coefficient4 y + -0.00003, !- Coefficient5 y**2 + -0.00052, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + ACLowStageCoolingEIRFTemp, !- Name + -0.42738, !- Coefficient1 Constant + 0.14191, !- Coefficient2 x + -0.00412, !- Coefficient3 x**2 + -0.01406, !- Coefficient4 y + 0.00083, !- Coefficient5 y**2 + -0.00043, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACLowStageCoolingCAPFFF, !- Name + 0.65673024, !- Coefficient1 Constant + 0.516470835, !- Coefficient2 x + -0.172887149, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACLowStageCoolingEIRFFF, !- Name + 1.562945114, !- Coefficient1 Constant + -0.791859997, !- Coefficient2 x + 0.230030877, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- ************ High Speed Cooling ********** + + Curve:Biquadratic, + ACHighStageCoolingCAPFTemp, !- Name + 1.36788, !- Coefficient1 Constant + -0.06257, !- Coefficient2 x + 0.0028, !- Coefficient3 x**2 + 0.00504, !- Coefficient4 y + -0.00007, !- Coefficient5 y**2 + -0.00045, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + ACHighStageCoolingEIRFTemp, !- Name + 0.04232, !- Coefficient1 Constant + 0.07892, !- Coefficient2 x + -0.00238, !- Coefficient3 x**2 + -0.00304, !- Coefficient4 y + 0.00053, !- Coefficient5 y**2 + -0.00032, !- Coefficient6 x*y + 0, !- Minimum Value of x + 50, !- Maximum Value of x + 0, !- Minimum Value of y + 50, !- Maximum Value of y + 0, !- Minimum Curve Output + 5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACHighStageCoolingCAPFFF,!- Name + 0.690334551, !- Coefficient1 Constant + 0.464383753, !- Coefficient2 x + -0.154507638, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + ACHighStageCoolingEIRFFF,!- Name + 1.31565404, !- Coefficient1 Constant + -0.482467162, !- Coefficient2 x + 0.166239001, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0, !- Minimum Curve Output + 2, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +!- Part Load Fraction curve as a function of Part Load Ratio is default from +!- Table 6. BEopt AC Rated Value Inputs of NREL report NREL/TP-5500-56354 + + Curve:Quadratic, + AC2StageCoolingPLFFPLR, !- Name + 0.93, !- Coefficient1 Constant + 0.07, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + +!- =========== ALL OBJECTS IN CLASS: CURVE:QUADRATIC =========== +!- NREL benchmark Cool-PLF-fPLR + + Curve:Quadratic, + Cool-PLF-fPLR, !- Name + 0.80141423, !- Coefficient1 Constant + 0.23744685, !- Coefficient2 x + -0.0393773, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1, !- Maximum Value of x + 0.7, !- Minimum Curve Output + 1; !- Maximum Curve Output + +!- =========== ALL OBJECTS IN CLASS: CURVE:CUBIC =========== + + Curve:Cubic, + Fan-EIR-fPLR, !- Name + 0.00000000, !- Coefficient1 Constant + 1.00000000, !- Coefficient2 x + 0.00000000, !- Coefficient3 x**2 + 0.00000000, !- Coefficient4 x**3 + 0, !- Minimum Value of x + 1, !- Maximum Value of x + 0, !- Minimum Curve Output + 1; !- Maximum Curve Output + + Curve:Cubic, + ConstantCubic, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 x**3 + -100, !- Minimum Value of x + 100; !- Maximum Value of x + +!- =========== ALL OBJECTS IN CLASS: CURVE:BIQUADRATIC =========== +!- NREL benchmark Cool-CAP-FT + + Curve:Biquadratic, + Cool-Cap-fT, !- Name + 1.26489391, !- Coefficient1 Constant + -0.035054982, !- Coefficient2 x + 0.00211086, !- Coefficient3 x**2 + -0.001526886, !- Coefficient4 y + -0.0000070308, !- Coefficient5 y**2 + -0.0004691844, !- Coefficient6 x*y + -100, !- Minimum Value of x + 100, !- Maximum Value of x + -100, !- Minimum Value of y + 100; !- Maximum Value of y + +!- NREL benchmark Cool-EIR-FT + + Curve:Biquadratic, + Cool-EIR-fT, !- Name + 0.38402403, !- Coefficient1 Constant + 0.029696724, !- Coefficient2 x + -0.0011329308, !- Coefficient3 x**2 + 0.006490674, !- Coefficient4 y + 0.0002626992, !- Coefficient5 y**2 + -0.0001207224, !- Coefficient6 x*y + -100, !- Minimum Value of x + 100, !- Maximum Value of x + -100, !- Minimum Value of y + 100; !- Maximum Value of y + +!- =========== ALL OBJECTS IN CLASS: AIRFLOWNETWORK:SIMULATIONCONTROL =========== + + AirflowNetwork:SimulationControl, + House AirflowNetwork, !- Name + MultizoneWithoutDistribution, !- AirflowNetwork Control + SurfaceAverageCalculation, !- Wind Pressure Coefficient Type + , !- Height Selection for Local Wind Pressure Calculation + LOWRISE, !- Building Type + 500, !- Maximum Number of Iterations {dimensionless} + , !- Initialization Type + 0.001, !- Relative Airflow Convergence Tolerance {dimensionless} + 0.00001, !- Absolute Airflow Convergence Tolerance {kg/s} + 0, !- Convergence Acceleration Limit {dimensionless} + 0, !- Azimuth Angle of Long Axis of Building {deg} + 0.75, !- Ratio of Building Width Along Short Axis to Width Along Long Axis + , !- Height Dependence of External Node Temperature + , !- Solver + Yes, !- Allow Unsupported Zone Equipment + No; !- Do Distribution Duct Sizing Calculation + +!- =========== ALL OBJECTS IN CLASS: AVAILABILITYMANAGER:SCHEDULED =========== + + AvailabilityManager:Scheduled, + System availability, !- Name + always_avail; !- Schedule Name + +!- =========== ALL OBJECTS IN CLASS: AVAILABILITYMANAGERASSIGNMENTLIST =========== + + AvailabilityManagerAssignmentList, + availability list, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + System availability; !- Availability Manager 1 Name + +!- =========== ALL OBJECTS IN CLASS: AIRFLOWNETWORK:MULTIZONE:SURFACE:EFFECTIVELEAKAGEAREA =========== + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + ZoneLeak_LongWall, !- Name + 0.00906699938827827, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + ZoneLeak_ShortWall, !- Name + 0.0068002495412087, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + ZoneLeak_Ceiling, !- Name + 0.031838398981432, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + ZoneLeak_Floor, !- Name + 0.00001, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + AtticVent, !- Name + 0.37, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Surface:EffectiveLeakageArea, + CrawlVent, !- Name + 0.37, !- Effective Leakage Area {m2} + 1.15, !- Discharge Coefficient {dimensionless} + 4, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + +!- =========== ALL OBJECTS IN CLASS: AIRFLOWNETWORK:DISTRIBUTION:COMPONENT:LEAKAGERATIO =========== + + AirflowNetwork:Distribution:Component:LeakageRatio, + SupplyLeak, !- Name + 0.1485, !- Effective Leakage Ratio {dimensionless} + 0.70092, !- Maximum Flow Rate {m3/s} + 25, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:Distribution:Component:LeakageRatio, + ReturnLeak, !- Name + 0.1485, !- Effective Leakage Ratio {dimensionless} + 0.70092, !- Maximum Flow Rate {m3/s} + 25, !- Reference Pressure Difference {Pa} + 0.65; !- Air Mass Flow Exponent {dimensionless} + + AirflowNetwork:MultiZone:Zone, + crawlspace_unit1, !- Zone Name + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + BGWall_upper_ldf, !- Surface Name + CrawlVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + BGWall_upper_ldb, !- Surface Name + CrawlVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + BGWall_upper_sdl, !- Surface Name + CrawlVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + BGWall_upper_sdr, !- Surface Name + CrawlVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + +!- =========== ALL OBJECTS IN CLASS: SIZING:ZONE =========== + + Sizing:Zone, + living_unit1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ_DSOA_living_unit1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + 0.000762, !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + 0.002032, !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + 0.1415762, !- Heating Maximum Air Flow {m3/s} + 0.3, !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + , !- Account for Dedicated Outdoor Air System + , !- Dedicated Outdoor Air System Control Strategy + , !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + , !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + Sensible Load Only No Latent Load, !- Zone Load Sizing Method + HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method + , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir} + HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method + , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.005; !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir} + +!- =========== ALL OBJECTS IN CLASS: ZONECONTROL:THERMOSTAT =========== + + ZoneControl:Thermostat, + Zone Thermostat_unit1, !- Name + living_unit1, !- Zone or ZoneList Name + zone_control_type, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + thermostat_living Dual SP Control; !- Control 1 Name + + AirflowNetwork:MultiZone:Zone, + living_unit1, !- Zone Name + NoVent, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + 0, !- Minimum Venting Open Factor {dimensionless} + 0.0, !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100.0, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + 0.0, !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000.0; !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + +!- =========== ALL OBJECTS IN CLASS: ZONEINFILTRATION:EFFECTIVELEAKAGEAREA =========== +!- For multifamily buildings, we assume that the blower door test +!- is conducted separately for each apartment. The Sherman-Grimsrud +!- infiltration model uses Effective Leakage Area coupled with +!- the outdoor air temperature to calculate the infiltration load. +!- While this approach is correct for the singlefamily prototype, +!- it may overstate infiltration loads for the multifamily prototype +!- as the apartments have shared walls with zones on both sides being +!- pressurized in reality. To account for this reduced leakage in +!- multifamily buildings, the ELA for each unit is adjusted based on +!- the ratio of exterior surface to total surface area. +!- ZoneInfiltration:EffectiveLeakageArea, +!- Living_ShermanGrimsrud_unit1, !- Name +!- living_unit1, !- Zone Name +!- always_avail, !- Schedule Name +!- 953.073946993799, !- Effective Air Leakage Area {cm2} +!- 0.00029, !- Stack Coefficient +!- 0.000231; !- Wind Coefficient +!- =========== ALL OBJECTS IN CLASS: ZONEINFILTRATION:EFFECTIVELEAKAGEAREA =========== +!- ZoneInfiltration:EffectiveLeakageArea, +!- AtticVent_unit1, !- Name +!- attic_unit1, !- Zone Name +!- always_avail, !- Schedule Name +!- 0.37, !- Effective Air Leakage Area {cm2} # 1/300 for ceiling area converted to sq. cm +!- 0.00029, !- Stack Coefficient +!- 0.000231; !- Wind Coefficient + + AirflowNetwork:MultiZone:Zone, + attic_unit1, !- Zone Name + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + Roof_front_unit1, !- Surface Name + AtticVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + 0, !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + Roof_back_unit1, !- Surface Name + AtticVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + Roof_right_unit1, !- Surface Name + AtticVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + Roof_left_unit1, !- Surface Name + AtticVent, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + Constant, !- Ventilation Control Mode + , !- Ventilation Control Zone Temperature Setpoint Schedule Name + , !- Minimum Venting Open Factor {dimensionless} + , !- Indoor and Outdoor Temperature Difference Lower Limit For Maximum Venting Open Factor {deltaC} + 100, !- Indoor and Outdoor Temperature Difference Upper Limit for Minimum Venting Open Factor {deltaC} + , !- Indoor and Outdoor Enthalpy Difference Lower Limit For Maximum Venting Open Factor {deltaJ/kg} + 300000, !- Indoor and Outdoor Enthalpy Difference Upper Limit for Minimum Venting Open Factor {deltaJ/kg} + inf_sch; !- Venting Availability Schedule Name + + AirflowNetwork:MultiZone:Surface, + Floor_unit1, !- Surface Name + ZoneLeak_Floor, !- Leakage Component Name + , !- External Node Name + 1.0, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + +!- =========== ALL OBJECTS IN CLASS: ZONEINFILTRATION:EFFECTIVELEAKAGEAREA =========== +!- ZoneInfiltration:EffectiveLeakageArea, +!- CrawlVent_unit1, !- Name +!- crawlspace_unit1, !- Zone Name +!- always_avail, !- Schedule Name +!- 0.37, !- Effective Air Leakage Area {cm2} # Set same as attic vent +!- 0.00029, !- Stack Coefficient +!- 0.000231; !- Wind Coefficient + + AirflowNetwork:MultiZone:Surface, + ceiling_unit1, !- Surface Name + ZoneLeak_Ceiling, !- Leakage Component Name + , !- External Node Name + 1.0, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_ldf_1.unit1, !- Surface Name + ZoneLeak_LongWall, !- Leakage Component Name + , !- External Node Name + 1.0, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_ldb_1.unit1, !- Surface Name + ZoneLeak_LongWall, !- Leakage Component Name + , !- External Node Name + 1.0, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_sdl_1.unit1, !- Surface Name + ZoneLeak_ShortWall, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_sdr_1.unit1, !- Surface Name + ZoneLeak_ShortWall, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_ldf_2.unit1, !- Surface Name + ZoneLeak_LongWall, !- Leakage Component Name + , !- External Node Name + 1.0, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_ldb_2.unit1, !- Surface Name + ZoneLeak_LongWall, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_sdr_2.unit1, !- Surface Name + ZoneLeak_ShortWall, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + + AirflowNetwork:MultiZone:Surface, + Wall_sdl_2.unit1, !- Surface Name + ZoneLeak_ShortWall, !- Leakage Component Name + , !- External Node Name + 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} + NoVent; !- Ventilation Control Mode + +! AirflowNetwork:MultiZone:Surface, +! Wall_sdr_2.unit1, !- Surface Name +! Zone Exhaust Fan_unit1, !- Leakage Component Name +! , !- External Node Name +! 1, !- Window/Door Opening Factor, or Crack Factor {dimensionless} +! Constant; !- Ventilation Control Mode +!- =========== ALL OBJECTS IN CLASS: AIRFLOWNETWORK:MULTIZONE:COMPONENT:ZONEEXHAUSTFAN =========== +! +! AirflowNetwork:MultiZone:Component:ZoneExhaustFan, +! Zone Exhaust Fan_unit1, !- Name +! 0.01, !- Air Mass Flow Coefficient When the Zone Exhaust Fan is Off at Reference Conditions {kg/s} +! 0.667; !- Air Mass Flow Exponent When the Zone Exhaust Fan is Off {dimensionless} +!- =========== ALL OBJECTS IN CLASS: ZONEHVAC:OUTDOORAIRUNIT =========== + + ZoneVentilation:DesignFlowRate, + Ventilation_unit1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + always_avail, !- Schedule Name + Flow/Zone, !- Design Flow Rate Calculation Method + 0, !- Design Flow Rate {m3/s} + , !- Flow Rate per Floor Area {m3/s-m2} + , !- Flow Rate per Person {m3/s-person} + , !- Air Changes per Hour {1/hr} + Exhaust, !- Ventilation Type + 0, !- Fan Pressure Rise {Pa} + 0.6, !- Fan Total Efficiency + 1, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0, !- Velocity Term Coefficient + 0, !- Velocity Squared Term Coefficient + -100, !- Minimum Indoor Temperature {C} + , !- Minimum Indoor Temperature Schedule Name + 100, !- Maximum Indoor Temperature {C} + , !- Maximum Indoor Temperature Schedule Name + -100, !- Delta Temperature {deltaC} + , !- Delta Temperature Schedule Name + -100, !- Minimum Outdoor Temperature {C} + , !- Minimum Outdoor Temperature Schedule Name + 100, !- Maximum Outdoor Temperature {C} + , !- Maximum Outdoor Temperature Schedule Name + 40; !- Maximum Wind Speed {m/s} + +!- =========== ALL OBJECTS IN CLASS: DESIGNSPECIFICATION:OUTDOORAIR =========== + + DesignSpecification:OutdoorAir, + SZ_DSOA_living_unit1, !- Name + Flow/Zone, !- Outdoor Air Method + 0, !- Outdoor Air Flow per Person {m3/s-person} + , !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0283168464628752; !- Outdoor Air Flow per Zone {m3/s} + +!- =========== ALL OBJECTS IN CLASS: FAN:ONOFF =========== +! Fan:ZoneExhaust, +! Zone Exhaust Fan_unit1, !- Name +! always_avail, !- Availability Schedule Name +! 0.6, !- Fan Total Efficiency +! 0.00001, !- Pressure Rise {Pa} +! 0.000001, !- Maximum Flow Rate {m3/s} +! Zone Exhaust Node_unit1, !- Air Inlet Node Name +! zone exhaust fan outlet nodes_unit1, !- Air Outlet Node Name +! Ventilation, !- End-Use Subcategory +! , !- Flow Fraction Schedule Name +! Decoupled; !- System Availability Manager Coupling Mode +!- =========== ALL OBJECTS IN CLASS: OUTDOORAIR:NODE =========== + + OutdoorAir:Node, + outside air inlet node_unit1, !- Name + 0.914355407629293; !- Height Above Ground {m} + + OutdoorAir:NodeList, + outdoor air node_unit1; !- Node or NodeList Name 1 + + NodeList, + Zone Inlet Nodes_unit1, !- Name + Zone Inlet Node_unit1, !- Node 1 Name + OA Inlet Node_unit1; !- Node 2 Name + +! Fan:ZoneExhaust, !- Zone Equipment 2 Object Type +! Zone Exhaust Fan_unit1, !- Zone Equipment 2 Name +! 3, !- Zone Equipment 2 Cooling Sequence +! 3, !- Zone Equipment 2 Heating or No-Load Sequence +! , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name +! , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + !- =========== ALL OBJECTS IN CLASS: ZONEHVAC:ENERGYRECOVERYVENTILATOR =========== + + ZoneHVAC:EnergyRecoveryVentilator, + ERV_unit1, !- Name + always_avail, !- Availability Schedule Name + OA_Heat_Recovery_Unit1, !- Heat Exchanger Name + 0.0283168464628752, !- Supply Air Flow Rate {m3/s} + 0.0283168464628752, !- Exhaust Air Flow Rate {m3/s} + OASupplyFan_unit1, !- Supply Air Fan Name + OAExhaustFan_unit1; !- Exhaust Air Fan Name + + Fan:OnOff, + OASupplyFan_unit1, !- Name + always_off, !- Availability Schedule Name + 0.6, !- Fan Total Efficiency + 454.045717061016, !- Pressure Rise {Pa} + 0.0283168464628752, !- Maximum Flow Rate {m3/s} + 1, !- Motor Efficiency + 0, !- Motor In Airstream Fraction + OA fan inlet node_unit1, !- Air Inlet Node Name + OA inlet node_unit1, !- Air Outlet Node Name + , !- Fan Power Ratio Function of Speed Ratio Curve Name + , !- Fan Efficiency Ratio Function of Speed Ratio Curve Name + Ventilation; !- End-Use Subcategory + + Fan:OnOff, + OAExhaustFan_unit1, !- Name + always_off, !- Availability Schedule Name + 0.6, !- Fan Total Efficiency + 454.045717061016, !- Pressure Rise {Pa} + 0.0283168464628752, !- Maximum Flow Rate {m3/s} + 1, !- Motor Efficiency + 0, !- Motor In Airstream Fraction + ERVexhaustnode_unit1, !- Air Inlet Node Name + exhaust outlet node_unit1, !- Air Outlet Node Name + , !- Fan Power Ratio Function of Speed Ratio Curve Name + , !- Fan Efficiency Ratio Function of Speed Ratio Curve Name + Ventilation; !- End-Use Subcategory + + !- =========== ALL OBJECTS IN CLASS: HEATEXCHANGER:AIRTOAIR:SENSIBLEANDLATENT =========== + + HeatExchanger:AirToAir:SensibleAndLatent, + OA_Heat_Recovery_Unit1, !- Name + always_off, !- Availability Schedule Name + 0.0283168464628752, !- Nominal Supply Air Flow Rate {m3/s} + 0.65, !- Sensible Effectiveness at 100% Heating Air Flow {dimensionless} + 0, !- Latent Effectiveness at 100% Heating Air Flow {dimensionless} + 0.65, !- Sensible Effectiveness at 75% Heating Air Flow {dimensionless} + 0, !- Latent Effectiveness at 75% Heating Air Flow {dimensionless} + 0.65, !- Sensible Effectiveness at 100% Cooling Air Flow {dimensionless} + 0, !- Latent Effectiveness at 100% Cooling Air Flow {dimensionless} + 0.65, !- Sensible Effectiveness at 75% Cooling Air Flow {dimensionless} + 0, !- Latent Effectiveness at 75% Cooling Air Flow {dimensionless} + outdoor air node_unit1, !- Supply Air Inlet Node Name + OA fan inlet node_unit1, !- Supply Air Outlet Node Name + Zone Exhaust Node_unit1, !- Exhaust Air Inlet Node Name + ERVexhaustnode_unit1, !- Exhaust Air Outlet Node Name + 0, !- Nominal Electric Power {W} + No, !- Supply Air Outlet Temperature Control + Plate, !- Heat Exchanger Type + None, !- Frost Control Type + -16.8333337792644, !- Threshold Temperature {C} + 0.083, !- Initial Defrost Time Fraction {dimensionless} + 2.15999989700318E-02, !- Rate of Defrost Time Fraction Increase {1/K} + No; !- Economizer Lockout + +!- DHW pipe network... + + Material, + Pipe Insulation, !- Name + VeryRough, !- Roughness + 0.0127032520325203, !- Thickness {m} + 0.03317175, !- Conductivity {W/m-K} + 91.0, !- Density {kg/m3} + 836.0, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.5; !- Visible Absorptance + + !- =========== ALL OBJECTS IN CLASS: PEOPLE =========== + + People, + people_unit1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + Occupancy, !- Number of People Schedule Name + People, !- Number of People Calculation Method + 3, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0, !- Fraction Radiant + autocalculate, !- Sensible Heat Fraction + activity_sch, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged; !- Mean Radiant Temperature Calculation Type + + !- =========== ALL OBJECTS IN CLASS: LIGHTS =========== + + Lights, + Living Hardwired Lighting1, !- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + InteriorLightingHE, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 1.91387072900558, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Return Air Fraction + 0.6, !- Fraction Radiant + 0.2, !- Fraction Visible + 0; !- Fraction Replaceable + + Lights, + Living Plug-in Lighting1,!- Name + living_unit1, !- Zone or ZoneList or Space or SpaceList Name + InteriorLightingHE, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 0.478467682251396, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Return Air Fraction + 0.6, !- Fraction Radiant + 0.2, !- Fraction Visible + 0; !- Fraction Replaceable + + !- =========== ALL OBJECTS IN CLASS: EXTERIOR:LIGHTS =========== + + Exterior:Lights, + Exterior-Lights_unit1, !- Name + ExteriorLighting, !- Schedule Name + 78.6575342465753, !- Design Level {W} + , !- Control Option + Exterior-Lights; !- End-Use Subcategory + + Exterior:Lights, + Garage-Lights_unit1, !- Name + InteriorLightingHE, !- Schedule Name + 13.0293159609121, !- Design Level {W} + , !- Control Option + Garage-Lights; !- End-Use Subcategory + + Branch, + Mains Inlet Branch_unit1,!- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Mains Pressure_unit1, !- Component 1 Name + Mains Inlet Node_unit1, !- Component 1 Inlet Node Name + Mains Pressure Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + DHW Supply Outlet Branch_unit1, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + DHW Supply Outlet Pipe_unit1, !- Component 1 Name + DHW Supply Outlet Pipe Inlet Node_unit1, !- Component 1 Inlet Node Name + DHW Supply Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + DHW Demand Inlet Branch_unit1, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + DHW Demand Inlet Pipe_unit1, !- Component 1 Name + DHW Demand Inlet Node_unit1, !- Component 1 Inlet Node Name + DHW Demand Inlet Pipe Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Water Sink Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + DHW Sinks_unit1, !- Component 1 Name + Water Sink Inlet Node_unit1, !- Component 1 Inlet Node Name + Water Sink outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Water Shower Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + DHW Showers_unit1, !- Component 1 Name + Water Shower Inlet Node_unit1, !- Component 1 Inlet Node Name + Water Shower Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Water ClothesWasher Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + DHW ClothesWasher_unit1, !- Component 1 Name + Water ClothesWasher Inlet Node_unit1, !- Component 1 Inlet Node Name + Water ClothesWasher Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Water Dishwasher Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + DHW DishWasher_unit1, !- Component 1 Name + Water DishWasher Inlet Node_unit1, !- Component 1 Inlet Node Name + Water DishWasher outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Water Bath Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + DHW Baths_unit1, !- Component 1 Name + Water Bath Inlet Node_unit1, !- Component 1 Inlet Node Name + Water bath Outlet Node_unit1; !- Component 1 Outlet Node Name + + Branch, + Mains Makeup Branch_unit1, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Mains Makeup Pipe_unit1, !- Component 1 Name + Mains Makeup Pipe Inlet Node_unit1, !- Component 1 Inlet Node Name + Mains Makeup Node_unit1; !- Component 1 Outlet Node Name + + !- =========== ALL OBJECTS IN CLASS: BRANCHLIST =========== + + BranchList, + DHW Supply Branches_unit1, !- Name + Mains Inlet Branch_unit1,!- Branch 1 Name + Water Heater Branch_unit1, !- Branch 2 Name + DHW Supply Outlet Branch_unit1; !- Branch 3 Name + + BranchList, + DHW Demand Branches_unit1, !- Name + DHW Demand Inlet Branch_unit1, !- Branch 1 Name + Water Sink Branch_unit1, !- Branch 2 Name + Water Shower Branch_unit1, !- Branch 3 Name + Water ClothesWasher Branch_unit1, !- Branch 4 Name + Water Dishwasher Branch_unit1, !- Branch 5 Name + Water Bath Branch_unit1, !- Branch 6 Name + Mains Makeup Branch_unit1; !- Branch 7 Name + + !- =========== ALL OBJECTS IN CLASS: CONNECTOR:SPLITTER =========== + + Connector:Splitter, + DHW Demand Splitter_unit1, !- Name + DHW Demand Inlet Branch_unit1, !- Inlet Branch Name + Water Sink Branch_unit1, !- Outlet Branch 1 Name + Water Shower Branch_unit1, !- Outlet Branch 2 Name + Water ClothesWasher Branch_unit1, !- Outlet Branch 3 Name + Water Dishwasher Branch_unit1, !- Outlet Branch 4 Name + Water Bath Branch_unit1; !- Outlet Branch 5 Name + + Connector:Splitter, + DHW Supply Splitter_unit1, !- Name + Mains Inlet Branch_unit1,!- Inlet Branch Name + Water Heater Branch_unit1; !- Outlet Branch 1 Name + + !- =========== ALL OBJECTS IN CLASS: CONNECTOR:MIXER =========== + + Connector:Mixer, + DHW Demand Mixer_unit1, !- Name + Mains Makeup Branch_unit1, !- Outlet Branch Name + Water Sink Branch_unit1, !- Inlet Branch 1 Name + Water Shower Branch_unit1, !- Inlet Branch 2 Name + Water ClothesWasher Branch_unit1, !- Inlet Branch 3 Name + Water Dishwasher Branch_unit1, !- Inlet Branch 4 Name + Water Bath Branch_unit1; !- Inlet Branch 5 Name + + Connector:Mixer, + DHW Supply Mixer_unit1, !- Name + DHW Supply Outlet Branch_unit1, !- Outlet Branch Name + Water Heater Branch_unit1; !- Inlet Branch 1 Name + + !- =========== ALL OBJECTS IN CLASS: CONNECTORLIST =========== + + ConnectorList, + DHW Demand Connectors_unit1, !- Name + Connector:Splitter, !- Connector 1 Object Type + DHW Demand Splitter_unit1, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + DHW Demand Mixer_unit1; !- Connector 2 Name + + ConnectorList, + DHW Supply Connectors_unit1, !- Name + Connector:Splitter, !- Connector 1 Object Type + DHW Supply Splitter_unit1, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + DHW Supply Mixer_unit1; !- Connector 2 Name + + !- =========== ALL OBJECTS IN CLASS: PUMP:VARIABLESPEED =========== + + Pump:VariableSpeed, + Mains Pressure_unit1, !- Name + Mains Inlet Node_unit1, !- Inlet Node Name + Mains Pressure Outlet Node_unit1, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 1, !- Design Pump Head {Pa} + 0, !- Design Power Consumption {W} + 1, !- Motor Efficiency + 0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + + !- Definition of the DHW system... + !- =========== ALL OBJECTS IN CLASS: WATERHEATER:MIXED =========== + + WaterHeater:Mixed, + Water Heater_unit1, !- Name + 0.196841372, !- Tank Volume {m3} + dhw_setpt, !- Setpoint Temperature Schedule Name + 2, !- Deadband Temperature Difference {deltaC} + 50, !- Maximum Temperature Limit {C} + Cycle, !- Heater Control Type + autosize, !- Heater Maximum Capacity {W} + 0, !- Heater Minimum Capacity {W} + 0, !- Heater Ignition Minimum Flow Rate {m3/s} + , !- Heater Ignition Delay {s} + electricity, !- Heater Fuel Type + 1, !- Heater Thermal Efficiency + , !- Part Load Factor Curve Name + , !- Off Cycle Parasitic Fuel Consumption Rate {W} + , !- Off Cycle Parasitic Fuel Type + , !- Off Cycle Parasitic Heat Fraction to Tank + , !- On Cycle Parasitic Fuel Consumption Rate {W} + , !- On Cycle Parasitic Fuel Type + , !- On Cycle Parasitic Heat Fraction to Tank + Zone, !- Ambient Temperature Indicator + , !- Ambient Temperature Schedule Name + living_unit1, !- Ambient Temperature Zone Name + , !- Ambient Temperature Outdoor Air Node Name + 1.27317402855191, !- Off Cycle Loss Coefficient to Ambient Temperature {W/K} + 1, !- Off Cycle Loss Fraction to Zone + 1.27317402855191, !- On Cycle Loss Coefficient to Ambient Temperature {W/K} + 1, !- On Cycle Loss Fraction to Zone + 0, !- Peak Use Flow Rate {m3/s} + , !- Use Flow Rate Fraction Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Water Heater use inlet node_unit1, !- Use Side Inlet Node Name + Water Heater use outlet node_unit1, !- Use Side Outlet Node Name + 1, !- Use Side Effectiveness + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + 1, !- Source Side Effectiveness + autosize, !- Use Side Design Flow Rate {m3/s} + 0, !- Source Side Design Flow Rate {m3/s} + 1.5; !- Indirect Water Heating Recovery Time {hr} + + !- =========== ALL OBJECTS IN CLASS: WATERHEATER:SIZING =========== + + WaterHeater:Sizing, + Water Heater_unit1, !- WaterHeater Name + ResidentialHUD-FHAMinimum, !- Design Mode + , !- Time Storage Can Meet Peak Draw {hr} + , !- Time for Tank Recovery {hr} + , !- Nominal Tank Volume for Autosizing Plant Connections {m3} + 3, !- Number of Bedrooms + 3; !- Number of Bathrooms + + Branch, + Water Heater Branch_unit1, !- Name + , !- Pressure Drop Curve Name + WaterHeater:Mixed, !- Component 1 Object Type + Water Heater_unit1, !- Component 1 Name + Water Heater Use Inlet Node_unit1, !- Component 1 Inlet Node Name + Water Heater Use Outlet Node_unit1; !- Component 1 Outlet Node Name + + !- =========== ALL OBJECTS IN CLASS: PLANTEQUIPMENTLIST =========== + + PlantEquipmentList, + DHW Plant Equipment_unit1, !- Name + WaterHeater:Mixed, !- Equipment 1 Object Type + Water Heater_unit1; !- Equipment 1 Name + + !- =========== ALL OBJECTS IN CLASS: SIZING:PLANT =========== + + Sizing:Plant, + DHW Loop_unit1, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 48.8888888888889, !- Design Loop Exit Temperature {C} + 5.55555555555556; !- Loop Design Temperature Difference {deltaC} + + !- =========== ALL OBJECTS IN CLASS: PLANTLOOP =========== + + PlantLoop, + DHW Loop_unit1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + DHW Loop Operation_unit1,!- Plant Equipment Operation Scheme Name + DHW Supply Outlet Node_unit1, !- Loop Temperature Setpoint Node Name + 100, !- Maximum Loop Temperature {C} + 0, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Mains Inlet Node_unit1, !- Plant Side Inlet Node Name + DHW Supply Outlet Node_unit1, !- Plant Side Outlet Node Name + DHW Supply Branches_unit1, !- Plant Side Branch List Name + DHW Supply Connectors_unit1, !- Plant Side Connector List Name + DHW Demand Inlet Node_unit1, !- Demand Side Inlet Node Name + Mains Makeup Node_unit1, !- Demand Side Outlet Node Name + DHW Demand Branches_unit1, !- Demand Side Branch List Name + DHW Demand Connectors_unit1, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + + !- =========== ALL OBJECTS IN CLASS: PIPE:ADIABATIC =========== + + Pipe:Adiabatic, + DHW Supply Outlet Pipe_unit1, !- Name + DHW Supply Outlet Pipe Inlet Node_unit1, !- Inlet Node Name + DHW Supply Outlet Node_unit1; !- Outlet Node Name + + Pipe:Adiabatic, + Mains Makeup Pipe_unit1, !- Name + Mains Makeup Pipe Inlet Node_unit1, !- Inlet Node Name + Mains Makeup Node_unit1; !- Outlet Node Name + + !- =========== ALL OBJECTS IN CLASS: PIPE:INDOOR =========== + + Pipe:Adiabatic, + DHW Demand Inlet Pipe_unit1, !- Name + DHW Demand Inlet Node_unit1, !- Inlet Node Name + DHW Demand Inlet Pipe Outlet Node_unit1; !- Outlet Node Name + + !- =========== ALL OBJECTS IN CLASS: PLANTEQUIPMENTOPERATION:HEATINGLOAD =========== + + PlantEquipmentOperation:HeatingLoad, + DHW Control Scheme_unit1,!- Name + 0.0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + DHW Plant Equipment_unit1; !- Range 1 Equipment List Name + + !- =========== ALL OBJECTS IN CLASS: PLANTEQUIPMENTOPERATIONSCHEMES =========== + + PlantEquipmentOperationSchemes, + DHW Loop Operation_unit1,!- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + DHW Control Scheme_unit1,!- Control Scheme 1 Name + always_avail; !- Control Scheme 1 Schedule Name + + !- =========== ALL OBJECTS IN CLASS: SETPOINTMANAGER:SCHEDULED =========== + + SetpointManager:Scheduled, + DHW Loop Setpoint Manager_unit1, !- Name + Temperature, !- Control Variable + DHWSupplySetpoint, !- Schedule Name + DHW Supply Outlet Node_unit1; !- Setpoint Node or NodeList Name + + !- =========== ALL OBJECTS IN CLASS: WATERUSE:EQUIPMENT =========== + + WaterUse:Equipment, + Clothes Washer_unit1, !- Name + Domestic Hot Water, !- End-Use Subcategory + 1.6219189818e-06, !- Peak Flow Rate {m3/s} + ClothesWasher, !- Flow Rate Fraction Schedule Name + CWWaterTempSchedule; !- Target Temperature Schedule Name + + WaterUse:Equipment, + Dishwasher_unit1, !- Name + Domestic Hot Water, !- End-Use Subcategory + 6.36685353e-07, !- Peak Flow Rate {m3/s} + Dishwasher, !- Flow Rate Fraction Schedule Name + DWWaterTempSchedule; !- Target Temperature Schedule Name + + WaterUse:Equipment, + Sinks_unit1, !- Name + Domestic Hot Water, !- End-Use Subcategory + 7.1934e-05, !- Peak Flow Rate {m3/s} + BA_sink_sch, !- Flow Rate Fraction Schedule Name + SSBWaterTempSchedule; !- Target Temperature Schedule Name + + WaterUse:Equipment, + Showers_unit1, !- Name + Domestic Hot Water, !- End-Use Subcategory + 0.000141975, !- Peak Flow Rate {m3/s} + BA_shower_sch, !- Flow Rate Fraction Schedule Name + SSBWaterTempSchedule; !- Target Temperature Schedule Name + + WaterUse:Equipment, + Baths_unit1, !- Name + Domestic Hot Water, !- End-Use Subcategory + 0.00027764, !- Peak Flow Rate {m3/s} + BA_bath_sch, !- Flow Rate Fraction Schedule Name + SSBWaterTempSchedule; !- Target Temperature Schedule Name + + !- =========== ALL OBJECTS IN CLASS: WATERUSE:CONNECTIONS =========== + + WaterUse:Connections, + DHW Sinks_unit1, !- Name + Water Sink Inlet Node_unit1, !- Inlet Node Name + Water Sink Outlet Node_unit1, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + None, !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Sinks_unit1; !- Water Use Equipment 1 Name + + WaterUse:Connections, + DHW Showers_unit1, !- Name + Water Shower Inlet Node_unit1, !- Inlet Node Name + Water Shower Outlet Node_unit1, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + None, !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Showers_unit1; !- Water Use Equipment 1 Name + + WaterUse:Connections, + DHW ClothesWasher_unit1, !- Name + Water ClothesWasher Inlet Node_unit1, !- Inlet Node Name + Water ClothesWasher Outlet Node_unit1, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + None, !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Clothes Washer_unit1; !- Water Use Equipment 1 Name + + WaterUse:Connections, + DHW DishWasher_unit1, !- Name + Water DishWasher Inlet Node_unit1, !- Inlet Node Name + Water DishWasher Outlet Node_unit1, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + None, !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Dishwasher_unit1; !- Water Use Equipment 1 Name + + WaterUse:Connections, + DHW Baths_unit1, !- Name + Water Bath Inlet Node_unit1, !- Inlet Node Name + Water Bath Outlet Node_unit1, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + None, !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Baths_unit1; !- Water Use Equipment 1 Name + + Output:VariableDictionary,IDF; + +!- =========== ALL OBJECTS IN CLASS: OUTPUT:CONSTRUCTIONS =========== + + Output:Constructions,Constructions,Materials; + +!- =========== ALL OBJECTS IN CLASS: OUTPUT:TABLE:SUMMARYREPORTS =========== + + Output:Table:SummaryReports, + InputVerificationandResultsSummary, !- Report 1 Name + EquipmentSummary, !- Report 2 Name + ClimaticDataSummary, !- Report 3 Name + EnvelopeSummary, !- Report 4 Name + AllSummary; !- Report 5 Name + +!- =========== ALL OBJECTS IN CLASS: OUTPUTCONTROL:TABLE:STYLE =========== + + OutputControl:Table:Style, + CommaAndHTML, !- Column Separator + JtoKWH; !- Unit Conversion + + Output:Table:Monthly, + FanSplit, !- Name + 3, !- Digits After Decimal + Air System Cooling Coil Total Cooling Energy, !- Variable or Meter 1 Name + HoursNonZero, !- Aggregation Type for Variable or Meter 1 + Air System Fan Electricity Energy, !- Variable or Meter 2 Name + SumOrAverageDuringHoursShown, !- Aggregation Type for Variable or Meter 2 + Air System Heating Coil Total Heating Energy, !- Variable or Meter 3 Name + HoursNonZero, !- Aggregation Type for Variable or Meter 3 + Air System Fan Electricity Energy, !- Variable or Meter 4 Name + SumOrAverageDuringHoursShown, !- Aggregation Type for Variable or Meter 4 + Air System Fan Electricity Energy, !- Variable or Meter 5 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 5 + + Output:Table:Monthly, + CoilLoads, !- Name + 2, !- Digits After Decimal + Heating Coil Heating Rate, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Heating Coil Air Heating Rate, !- Variable or Meter 2 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + Cooling Coil Total Cooling Rate, !- Variable or Meter 3 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 3 + + Output:Table:Monthly, + Water Heater: Loads, !- Name + 2, !- Digits After Decimal + Water Heater Total Demand Rate, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Water Heater Total Demand Energy, !- Variable or Meter 2 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + Water Heater Heating Rate, !- Variable or Meter 3 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + Water Heater Heating Energy, !- Variable or Meter 4 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 4 + + Output:Table:Monthly, + Heating and Cooling Loads, !- Name + 2, !- Digits After Decimal + Zone Air System Sensible Cooling Energy, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Zone Air System Sensible Heating Energy, !- Variable or Meter 2 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 2 + + Output:Table:Monthly, + Lighting Loads, !- Name + 2, !- Digits After Decimal + Zone Lights Electric Consumption, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Exterior Lights Electric Consumption, !- Variable or Meter 2 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 2 + + Output:Table:Monthly, + InternalGains, !- Name + 2, !- Digits After Decimal + Zone People Total Heat Gain, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Zone Lights Total Heat Gain, !- Variable or Meter 2 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + Zone Electric Equipment Total Heat Gain, !- Variable or Meter 3 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + Zone Gas Equipment Total Heat Gain, !- Variable or Meter 4 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + Zone Other Equipment Total Heat Gain, !- Variable or Meter 5 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + Zone Total Internal Total Heat Gain, !- Variable or Meter 6 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 6 + +! GPARM parameters as run: +! ID = US+SF+CZ4A+hp+crawlspace+IECC_2006 +! weatherfile = USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw +! climate_zone = 4 +! moisture_regime = A +! humidity_designation = +! tropical_designation = +! bldg_type = Single-Family +! fndn_type = crawlspace +! system_tag = Heat Pump +! code = IECC_2006 +! permits = 21280.7599039262 +! vent_fan_efficacy = 1.4 +! cfm25 = 18.75 +! afn_control = MultizoneWithDistribution +! is_duct_base = no +! leakage_ratio = 0.297 +! dhw_type = storage +! TEMPLATE_PATH = template/v9.5 +! Default values: +! ach50 = 8 +! afue = 1 +! heating_coil = +! heating_fuel = electricity +! hspf = +! leakage_ratio = 0.297 +! seer = +! system = heatpump +! ua_si = 1.27317402855191 +! GPARM computed values: +! cfa_per_unit = 2376 +! efficacy_ratio_cfl = 0.272727272727273 +! efficacy_ratio_inc = 1 +! efficacy_ratio_led = 0.230769230769231 +! efficacy_ratio_lf = 0.170454545454545 +! ela = 147.726757237553 +! f_cfl_hw = 0.21 +! f_inc_hw = 0.66 +! f_led_hw = 0 +! f_lf_hw = 0.13 +! gtp_filename = +! internal_gains = 86760.8 +! internal_gains_W = 1059.19523390956 +! internal_gains_kWhyr = 9278.55024904776 +! long_dim = +! ltg_exterior = 344.52 +! ltg_exterior_benchmark = 344.52 +! ltg_garage = 40 +! ltg_garage_benchmark = 40 +! ltg_hardwired = 1297.4336 +! ltg_hw_benchmark = 1297.4336 +! ltg_plugin = 324.3584 +! ltg_plugin_benchmark = 324.3584 +! n_bedrooms = 3 +! n_ppl = 3 +! short_dim = +! window_area = 355.236927696469 +! Code requirements: IECC_2006 +! r_bsmtwall = 13 +! r_ceiling = 38 +! r_crawlwall = 10 +! r_floor = 19 +! r_masswall = 5 +! r_sheathing = 0 +! r_slab = 10 +! r_wall = 13 +! shgc_skylight = 0.4 +! shgc_window = 0.4 +! u_skylight = 0.6 +! u_window = 0.4 +! GPARM parameters as run: +! ID = US+SF+CZ4A+hp+crawlspace+IECC_2006 +! weatherfile = USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw +! climate_zone = 4 +! moisture_regime = A +! humidity_designation = +! tropical_designation = +! bldg_type = Single-Family +! fndn_type = crawlspace +! system_tag = Heat Pump +! code = IECC_2006 +! permits = 21280.7599039262 +! vent_fan_efficacy = 1.4 +! cfm25 = 18.75 +! afn_control = MultizoneWithDistribution +! is_duct_base = no +! leakage_ratio = 0.297 +! dhw_type = storage +! TEMPLATE_PATH = template/v9.5 +! ===================================================== +! Report on template variables +! +! ----------------------------- +! Variables changed in template: +! ----------------------------- +! +! ERRNO: 'Inappropriate ioctl for device' --> '' +! EXTENDED_OS_ERROR: 'Inappropriate ioctl for device' --> '' +! OS_ERROR: 'Inappropriate ioctl for device' --> '' +! climate_zone: 'Climate Zone 4' --> '4' +! dhw_type: '' --> 'storage' +! fndn_type: 'Crawlspace' --> 'crawlspace' +! humidity_designation: 'Not Warm-Humid' --> '' +! moisture_regime: 'Moist' --> 'A' +! tropical_designation: 'Not Tropical' --> '' +! +! --------------------------------- +! New variables created in template: +! --------------------------------- +! +! BGWall_const: 'Crawl Wall' +! LPD_hardwired: '1.91387072900558' +! LPD_plugin: '0.478467682251396' +! SAF: '0.853879696' +! SAF_ext: '0.853879696' +! SAF_gar: '0.853879696' +! S_overhang: '0.0152439024390244' +! S_overhang_pf: '0.01' +! ach50: '8' +! afue: '1' +! aspect_ratio: '1.33333333333333' +! atticvent: '0.37' +! atticvent_cm2: '3700' +! bare_masonry: 'no' +! base_watts: '400' +! bath_gpm: '4.4' +! bath_peak_flow: '0.00027764' +! bldg_azimuth: '0' +! branch_tag: 'AirLoopHVAC:UnitaryHeatPump:AirToAir' +! ceil_area: '110.408921933086' +! ceil_insulation: 'fiberglass_blown' +! ceiling_framing_fraction: '0.07' +! ceiling_ht: '2.59146341463415' +! cfa_per_unit: '2376' +! cfa_per_unit_sqmt: '220.817843866171' +! cfa_total: '2376' +! cfa_total_sqmt: '220.817843866171' +! clotheswasher_peak_flow: '1.6219189818e-06' +! concrete_density: '135' +! cond_crawlspace: 'no' +! conv_accel_limit: '0' +! cooling_setpt: '75' +! cop_cooling: '4.06853019625951' +! cop_heating: '3.69308080013886' +! crawlvent: '0.37' +! daily_bath_gal: '6' +! daily_shower_gal: '23.9' +! daily_sink_gal: '21.1' +! dday_sched_type: 'annual' +! dhw_heater_control: 'Cycle' +! dhw_heater_eff: '1' +! dhw_multiplier: '1' +! dhw_pipe_const: 'Insulated pipe' +! dhw_pipe_loc_unit: 'living_unit1' +! dhw_savings_factor: '0' +! dhw_savings_mult: '1' +! dhw_setpt_sch: 'dhw_setpt' +! dhw_source_fuel: 'electricity' +! dhw_tank_loss_SI: '0.44830071427884' +! dhw_tank_size: '52' +! dhw_tank_size_SI: '0.196841372' +! dishwasher_peak_flow: '6.36685353e-07' +! door_area: '3.71747211895911' +! door_ht: '2.13414634146341' +! door_ldb_l: '1.74190122145513' +! door_t: '0.031702180114817' +! duct_loc: 'attic' +! ef: '0.9203' +! efficacy_ratio_cfl: '0.272727272727273' +! efficacy_ratio_inc: '1' +! efficacy_ratio_led: '0.230769230769231' +! efficacy_ratio_lf: '0.170454545454545' +! ela: '147.726757237553' +! ela_ceil: '0.031838398981432' +! ela_floor: '0.031838398981432' +! ela_longdim_wall: '0.00906699938827827' +! ela_shortdim_wall: '0.0068002495412087' +! ela_sqcm: '953.073946993799' +! ela_sqm: '0.0953073946993799' +! erv: 'no' +! estar_appl: 'none' +! ext_ltg_control: '' +! ext_ltg_sch: 'ExteriorLighting' +! ext_wall_type: 'wood_framed' +! f_cfl_ext: '0.21' +! f_cfl_gar: '0.21' +! f_cfl_hw: '0.21' +! f_inc_ext: '0.66' +! f_inc_gar: '0.66' +! f_inc_hw: '0.66' +! f_led_ext: '0' +! f_led_gar: '0' +! f_led_hw: '0' +! f_lf_ext: '0.13' +! f_lf_gar: '0.13' +! f_lf_hw: '0.13' +! facade_watts: '63.975' +! fan_eff: '0.58' +! fan_power_per_ton: '112' +! fan_total_eff: '0.50054' +! floor_area: '110.408921933086' +! fndn_type_unit: 'crawlspace_unit1' +! fndn_zone: 'crawlspace' +! fndn_zone_unit: 'crawlspace_unit1' +! force_other_fndn_R0: 'yes' +! foundn_depth: '0.609756097560976' +! fraction_ceil_under_attic: '0.7' +! framing: 'hardwood' +! furred_framing_fraction: '0.25' +! gain_ppl: '2120.48051567536' +! gar_ltg_sch: 'InteriorLightingHE' +! garage_area: '400' +! grout_cell_spacing: '96' +! gtp_filename: '' +! gtp_ref_floor: 'Ground' +! gtp_ref_floor_obj: '' +! gtp_ref_wall: 'Ground' +! gtp_ref_wall_obj: '' +! has_ext_ltg_control: 'no' +! has_occ_sensors: 'no' +! has_ventilation: 'yes' +! heat_avail_sched: 'always_avail' +! heating_coil: 'electric' +! heating_fuel: 'electricity' +! heating_setpt: '72' +! hers_dhw_gains_W: '1.04420541093893' +! hourly_output: 'No' +! house: 'sitebuilt' +! hrv: 'no' +! hrv_aval: 'always_off' +! hrv_sensible_eff: '0.65' +! hspf: '8.2' +! hvac_type: 'heatpump' +! hw_ltg_sch: 'InteriorLightingHE' +! iecc_mels_adj_W_m2: '1.54356736989469' +! iecc_mels_adj_kWhyr: '1515.4067333724' +! ins_sheathing: 'eps' +! insulation_loc: 'exterior' +! is_HRef: 'no' +! is_HRtd: 'no' +! is_ISRD: 'yes' +! long_dim: '12.1330909462833' +! longdim_wall_area: '31.4424612937218' +! ltg_exterior: '344.52' +! ltg_exterior_W: '78.6575342465753' +! ltg_exterior_benchmark: '344.52' +! ltg_garage: '40' +! ltg_garage_W: '13.0293159609121' +! ltg_garage_benchmark: '40' +! ltg_hardwired: '1297.4336' +! ltg_hw_benchmark: '1297.4336' +! ltg_plugin: '324.3584' +! ltg_plugin_benchmark: '324.3584' +! max_dhw_temp: '50' +! max_supply: '0.70092' +! misc_eqpmt2_type: 'ElectricEquipment' +! motor_eff: '0.863' +! my_coil_type: 'Coil:Cooling:DX:SingleSpeed' +! my_coil_type_heating: 'Coil:Heating:DX:SingleSpeed' +! n_bedrooms: '3' +! n_doors: '1' +! n_ppl: '3' +! n_stories_per_unit: '2' +! n_units: '1' +! n_units_modeled: '1' +! option: '' +! p: '18766' +! parkinglot_watts: '793.72' +! pipe_ins_R: '2' +! pipe_ins_k_SI: '0.03317175' +! pipe_ins_thickness_SI: '0.0127032520325203' +! plugin_ltg_sch: 'InteriorLightingHE' +! plugload_usage_factor: '0.67553' +! prototype: 'singlefamily' +! r_bsmtwall: '0.0001' +! r_ceiling: '38' +! r_crawlwall: '0' +! r_duct: '8' +! r_fiberglass_blown: '2.5' +! r_floor: '19' +! r_masswall: '5' +! r_returnduct: '8' +! r_sheathing: '0' +! r_slab: '0' +! r_wall: '13' +! re: '1' +! return_duct_loc: 'crawlspace' +! return_duct_loc_unit: 'crawlspace_unit1' +! roof_const: 'Gable_end' +! roof_pitch: '0.333333333333333' +! roof_pk_ht: '1.51663636828541' +! roof_surface: 'Wall' +! runbsmt: 'no' +! runslab: 'yes' +! seer: '14' +! semi_conditioned: 'no' +! sensitivity_analysis: 'no' +! shading_frac: '0' +! shgc_skylight: '0.4' +! shgc_window: '0.4' +! short_dim: '9.09981820971244' +! shortdim_wall_area: '23.5818459702914' +! shower_gpm: '2.25' +! shower_peak_flow: '0.000141975' +! sink_gpm: '1.14' +! sink_peak_flow: '7.1934e-05' +! source_inlet_node: '' +! source_outlet_node: '' +! stack_coeff: '0.00029' +! statfile: 'USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.stat' +! style_ceiling: 'attic' +! style_roof: 'gable' +! supply_duct_loc: 'attic' +! supply_duct_loc_unit: 'attic_unit1' +! supply_leak_ratio_of_total: '0.5' +! system: 'heatpump' +! temp_vent_cms: '0' +! thermostat_setpt: 'iecc' +! total_area: '330.506150989138' +! u_door: '0.4' +! u_duct_SI: '0.709825' +! u_returnduct_SI: '0.709825' +! u_skylight: '0.6' +! u_window: '0.4' +! ua: '2.4173755280115' +! ua_si: '1.27317402855191' +! unit_id: '1' +! vent_cfm: '60' +! vent_clearance: '0.152439024390244' +! vent_cms: '0.0283168464628752' +! vent_fan_prs: '454.045717061016' +! vent_fan_total_eff: '0.6' +! vent_sch: 'always_avail' +! wall_framing_fraction: '0.25' +! wall_ht: '8.5' +! waterheater_loc_unit: 'living_unit1' +! weatherdir: './tools/epw/' +! wind_coeff: '0.000231' +! window_dist: 'equal' +! window_ht: '1.52439024390244' +! window_ldb_l: '2.70719591738945' +! window_ldf_l: '2.70719591738945' +! window_sdl_l: '2.70719591738945' +! window_sdr_l: '2.70719591738945' +! wwr: '0.15' +! +! ===================================================== + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly; + + Output:Variable,*,Site Outdoor Air Relative Humidity,hourly; + + Output:Variable,*,Zone Air Temperature,hourly; + + Output:Variable,*,Zone Air Relative Humidity,hourly; + + Output:Variable,*,Fan Electricity Rate,hourly; + + Output:Variable,*,Zone VRF Air Terminal Cooling Electricity Rate,hourly; + + Output:Variable,*,Zone VRF Air Terminal Total Cooling Rate,hourly; + + Output:Variable,*,Zone VRF Air Terminal Heating Electricity Rate,hourly; + + Output:Variable,*,Zone VRF Air Terminal Total Heating Rate,hourly; + + Output:Variable,*,VRF Heat Pump Total Cooling Rate,hourly; + + Output:Variable,*,VRF Heat Pump Total Heating Rate,hourly; + + Output:Variable,*,VRF Heat Pump Cooling Electricity Rate,hourly; + + Output:Variable,*,VRF Heat Pump Heating Electricity Rate,hourly; + + Output:Variable,*,VRF Heat Pump Cooling COP,hourly; + + Output:Variable,*,VRF Heat Pump Heating COP,hourly; + + Output:Variable,*,VRF Heat Pump COP,hourly; + + Output:Variable,*,VRF Heat Pump Compressor Electricity Rate,hourly; + + Output:Variable,*,VRF Heat Pump Outdoor Unit Fan Power,hourly; + + Output:Variable,*,VRF Heat Pump Compressor Rotating Speed,hourly; + + Output:Variable,*,VRF Heat Pump Indoor Unit Evaporating Temperature,hourly; + + Output:Variable,*,VRF Heat Pump Outdoor Unit Condensing Temperature,hourly; + + Output:Variable,*,VRF Heat Pump Indoor Unit Condensing Temperature,hourly; + + Output:Variable,*,VRF Heat Pump Outdoor Unit Evaporating Temperature,hourly; + + Output:Variable,*,VRF Heat Pump Cooling Capacity at Max Compressor Speed,hourly; + + Output:Variable,*,VRF Heat Pump Heating Capacity at Max Compressor Speed,hourly; + + Output:Variable,*,VRF Heat Pump Outdoor Unit Evaporator Heat Extract Rate,hourly; + + Output:Variable,*,VRF Heat Pump Outdoor Unit Condenser Heat Release Rate,hourly; + + Output:Variable,*,VRF Heat Pump Defrost Electricity Rate,hourly; + + Output:Variable,*,VRF Heat Pump Defrost Electricity Energy,hourly; + + Output:Variable,*,VRF Heat Pump Part Load Ratio,hourly; + + Output:Variable,*,VRF Heat Pump Runtime Fraction,hourly; + + Output:Variable,*,VRF Heat Pump Cycling Ratio,hourly; + + Output:Variable,*,VRF Heat Pump Operating Mode,hourly; + + Output:Variable,*,VRF Heat Pump Condenser Inlet Temperature,hourly; + + Output:Variable,*,VRF Heat Pump Crankcase Heater Electricity Rate,hourly; + + Output:Variable,*,VRF Heat Pump Terminal Unit Cooling Load Rate,hourly; + + Output:Variable,*,VRF Heat Pump Terminal Unit Heating Load Rate,hourly; + + Output:Variable,*,VRF Heat Pump Indoor Unit Piping Correction for Cooling,hourly; + + Output:Variable,*,VRF Heat Pump Indoor Unit Piping Correction for Heating,hourly; + + Output:Variable,TU1 Inlet Node,System Node Temperature,hourly; + + Output:Variable,TU1 Inlet Node,System Node Mass Flow Rate,hourly; + + Output:Variable,TU1 Inlet Node,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,TU1 Inlet Node,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,TU1 Outlet Node,System Node Temperature,hourly; + + Output:Variable,TU1 Outlet Node,System Node Mass Flow Rate,hourly; + + Output:Variable,TU1 Outlet Node,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,TU1 Outlet Node,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,Outside Air Inlet Node 1,System Node Temperature,hourly; + + Output:Variable,Outside Air Inlet Node 1,System Node Mass Flow Rate,hourly; + + Output:Variable,Outside Air Inlet Node 1,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,Outside Air Inlet Node 1,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Inlet Node,System Node Temperature,hourly; + + Output:Variable,TU1 VRF DX CCoil Inlet Node,System Node Mass Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Inlet Node,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Inlet Node,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Outlet Node,System Node Temperature,hourly; + + Output:Variable,TU1 VRF DX CCoil Outlet Node,System Node Mass Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Outlet Node,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX CCoil Outlet Node,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX HCoil Outlet Node,System Node Temperature,hourly; + + Output:Variable,TU1 VRF DX HCoil Outlet Node,System Node Mass Flow Rate,hourly; + + Output:Variable,TU1 VRF DX HCoil Outlet Node,System Node Standard Density Volume Flow Rate,hourly; + + Output:Variable,TU1 VRF DX HCoil Outlet Node,System Node Current Density Volume Flow Rate,hourly; + + Output:Variable,*,Zone Predicted Sensible Load to Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone Predicted Sensible Load to Heating Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone Predicted Sensible Load to Cooling Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Sensible Load to Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Sensible Load to Heating Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Sensible Load to Cooling Setpoint Heat Transfer Rate,hourly; + + Output:Variable,*,Zone Predicted Moisture Load Moisture Transfer Rate,hourly; + + Output:Variable,*,Zone Predicted Moisture Load to Humidifying Setpoint Moisture Transfer Rate,hourly; + + Output:Variable,*,Zone Predicted Moisture Load to Dehumidifying Setpoint Moisture Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Moisture Load Moisture Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Moisture Load to Humidifying Setpoint Moisture Transfer Rate,hourly; + + Output:Variable,*,Zone System Predicted Moisture Load to Dehumidifying Setpoint Moisture Transfer Rate,hourly; + + Output:Variable,*,Cooling Coil Total Cooling Rate,hourly; + + Output:Variable,*,Cooling Coil Runtime Fraction,hourly; + + Output:Variable,*,Cooling Coil VRF Evaporating Temperature,hourly; + + Output:Variable,*,Cooling Coil VRF Super Heating Degrees,hourly; + + Output:Variable,*,Heating Coil Heating Rate,hourly; + + Output:Variable,*,Heating Coil Runtime Fraction,hourly; + + Output:Variable,*,Heating Coil VRF Condensing Temperature,hourly; + + Output:Variable,*,Heating Coil VRF Subcooling Degrees,hourly; + + Output:Variable,*,Heating Coil Electricity Rate,hourly; + + Output:Diagnostics, + DisplayAdvancedReportVariables, !- Key 1 + DisplayZoneAirHeatBalanceOffBalance; !- Key 2 + diff --git a/weather/USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw b/weather/USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw new file mode 100644 index 00000000000..b00438dc843 --- /dev/null +++ b/weather/USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw @@ -0,0 +1,8768 @@ +LOCATION,New York-John F Kennedy Intl AP,NY,USA,TMY3,744860,40.65,-73.80,-5.0,5.0 +DESIGN CONDITIONS,1,Climate Design Data 2009 ASHRAE Handbook,,Heating,1,-10.7,-8.2,-20.8,0.6,-8.9,-18.7,0.7,-6.6,14.2,-3.2,12.9,-2.5,7.5,320,Cooling,7,7.4,32.1,23.1,30.3,22.3,28.7,21.9,25,29.1,24.3,27.7,23.7,26.8,5.6,230,23.8,18.7,27,23.2,18,26.1,22.6,17.3,25.5,75.7,29.1,73.1,28.1,70.4,26.5,769,Extremes,12.2,11,9.6,28,-13.7,35.6,2.9,1.7,-15.8,36.8,-17.5,37.8,-19.1,38.7,-21.3,39.9 +TYPICAL/EXTREME PERIODS,6,Summer - Week Nearest Max Temperature For Period,Extreme,7/ 6,7/12,Summer - Week Nearest Average Temperature For Period,Typical,6/22,6/28,Winter - Week Nearest Min Temperature For Period,Extreme,2/ 3,2/ 9,Winter - Week Nearest Average Temperature For Period,Typical,1/27,2/ 2,Autumn - Week Nearest Average Temperature For Period,Typical,10/13,10/19,Spring - Week Nearest Average Temperature For Period,Typical,4/19,4/25 +GROUND TEMPERATURES,3,.5,,,,6.02,2.12,1.06,1.98,7.24,13.14,18.69,22.71,23.88,21.99,17.45,11.72,2,,,,9.53,5.87,4.13,4.07,6.85,10.88,15.22,18.94,20.86,20.51,17.94,14.00,4,,,,11.81,8.98,7.24,6.70,7.73,10.07,12.99,15.86,17.78,18.24,17.14,14.84 +HOLIDAYS/DAYLIGHT SAVINGS,No,0,0,0 +COMMENTS 1,Custom/User Format -- WMO#744860; NREL TMY Data Set (2008); Period of Record 1973-2005 (Generally) +COMMENTS 2, -- Ground temps produced with a standard soil diffusivity of 2.3225760E-03 {m**2/day} +DATA PERIODS,1,1,Data,Sunday, 1/ 1,12/31 +1999,1,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-9.4,65,101800,0,0,243,0,0,0,0,0,0,0,260,7.2,8,7,16.0,4267,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-8.9,68,101800,0,0,247,0,0,0,0,0,0,0,270,5.2,8,8,16.0,4267,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-9.4,62,101800,0,0,261,0,0,0,0,0,0,0,260,6.7,10,10,16.0,3048,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.0,56,101800,0,0,263,0,0,0,0,0,0,0,270,7.2,10,10,16.0,3658,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-9.4,59,101800,0,0,251,0,0,0,0,0,0,0,270,9.3,8,8,16.0,3353,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-9.4,62,101800,0,0,249,0,0,0,0,0,0,0,260,6.7,8,8,16.0,3048,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-8.9,68,101800,0,0,239,0,0,0,0,0,0,0,250,6.2,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-9.4,59,101900,46,931,240,5,98,3,916,5596,613,114,260,8.8,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,102000,246,1415,239,131,345,70,13276,24133,9047,1302,270,9.3,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-13.3,38,102100,426,1415,239,270,577,95,27359,50197,12162,1684,290,10.3,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-13.3,35,102100,553,1415,246,346,501,149,35825,47721,17080,2953,260,9.8,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-14.4,33,102100,618,1415,252,264,139,203,28573,13896,22473,4862,280,8.8,8,8,16.0,1676,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,102200,617,1415,250,390,347,239,40681,34857,25414,5549,290,9.3,8,8,16.0,1829,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.2,46,102300,549,1415,248,74,0,74,8824,0,8824,3264,300,7.7,8,8,16.0,1829,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.6,32,102300,420,1415,238,207,260,129,21659,23342,14697,2645,290,9.8,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-18.9,24,102500,238,1415,233,72,54,62,7787,4179,7079,1516,330,7.7,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-16.7,35,102700,40,861,229,5,53,4,753,2368,632,81,330,9.3,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-18.9,30,102800,0,0,222,0,0,0,0,0,0,0,320,10.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-18.9,31,103000,0,0,224,0,0,0,0,0,0,0,320,9.3,9,5,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-18.9,33,103100,0,0,218,0,0,0,0,0,0,0,320,11.3,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-23.9,23,103200,0,0,200,0,0,0,0,0,0,0,320,10.8,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-23.9,26,103300,0,0,197,0,0,0,0,0,0,0,330,7.2,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.0,-23.3,29,103400,0,0,199,0,0,0,0,0,0,0,330,9.3,2,1,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.6,-21.7,36,103500,0,0,199,0,0,0,0,0,0,0,320,8.8,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.1,-21.1,39,103500,0,0,198,0,0,0,0,0,0,0,320,7.7,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.7,-21.1,42,103500,0,0,202,0,0,0,0,0,0,0,340,5.2,4,4,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.7,-20.6,44,103600,0,0,193,0,0,0,0,0,0,0,340,2.6,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.7,-20.0,46,103600,0,0,197,0,0,0,0,0,0,0,330,2.6,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-12.2,-19.4,51,103600,0,0,196,0,0,0,0,0,0,0,300,2.6,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.7,-19.4,49,103600,0,0,202,0,0,0,0,0,0,0,310,3.6,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.7,-19.4,49,103700,0,0,202,0,0,0,0,0,0,0,290,2.1,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.1,-18.9,49,103700,46,932,206,5,78,4,900,4200,700,1100,330,3.1,4,4,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.6,-18.9,47,103700,246,1415,206,148,276,100,15100,19000,11800,21200,330,3.6,4,3,16.0,7620,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-18.9,40,103700,427,1415,219,194,188,137,20900,17100,15700,30700,310,3.6,8,7,16.0,7620,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-19.4,36,103700,554,1415,218,314,360,172,33100,35400,19200,36900,0,0.0,6,6,16.0,7620,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-18.3,37,103600,620,1415,221,380,519,152,39900,50800,17600,30700,280,2.6,5,5,16.0,7620,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.8,35,103500,619,1415,233,331,281,208,34900,28300,22400,46600,260,2.6,8,8,16.0,7620,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.8,35,103500,552,1415,245,221,118,175,24000,11500,19400,40800,250,2.1,10,10,16.0,1981,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-18.3,33,103400,423,1415,229,85,0,85,9700,0,9700,33000,200,2.1,7,7,16.0,4267,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.8,35,103300,241,1415,233,76,87,62,8400,6300,7300,13200,70,1.5,8,8,16.0,2591,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-18.3,32,103200,42,884,246,4,22,4,600,800,600,700,110,2.6,10,10,16.0,2591,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-20.0,26,103200,0,0,235,0,0,0,0,0,0,0,60,3.6,8,8,16.0,2438,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-19.4,27,103200,0,0,247,0,0,0,0,0,0,0,90,3.1,10,10,16.0,1829,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-19.4,26,103100,0,0,249,0,0,0,0,0,0,0,60,4.1,10,10,16.0,1829,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-18.3,29,103000,0,0,251,0,0,0,0,0,0,0,60,5.7,10,10,16.0,1829,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-18.3,29,102900,0,0,251,0,0,0,0,0,0,0,60,4.6,10,10,16.0,1829,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-17.8,30,102800,0,0,251,0,0,0,0,0,0,0,70,4.1,10,10,16.0,1829,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.6,35,102800,0,0,255,0,0,0,0,0,0,0,60,6.2,10,10,16.0,853,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102500,0,0,258,0,0,0,0,0,0,0,50,7.2,10,10,16.0,853,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-8.3,62,102300,0,0,267,0,0,0,0,0,0,0,60,6.2,10,10,16.0,732,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-5.0,72,102100,0,0,277,0,0,0,0,0,0,0,70,5.7,10,10,16.0,610,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101800,0,0,296,0,0,0,0,0,0,0,90,10.8,10,10,16.0,427,9,999999999,179,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101600,0,0,303,0,0,0,0,0,0,0,90,12.4,10,10,16.0,305,9,999999999,179,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.0,3.0,93,101300,0,0,307,0,0,0,0,0,0,0,90,11.3,10,10,8.0,210,9,999999999,189,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,101200,0,0,316,0,0,0,0,0,0,0,90,12.4,10,10,6.4,183,9,999999999,189,0.0880,0,88,0.160,1.0,1.0 +1999,1,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,100900,46,932,328,1,0,1,100,0,100,400,100,13.4,10,10,3.2,183,9,999999999,189,0.0880,0,88,0.160,1.0,1.0 +1999,1,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,100600,247,1415,331,26,0,26,3100,0,3100,10500,100,14.9,10,10,3.2,183,9,999999999,179,0.0880,0,88,0.160,3.0,1.0 +1999,1,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,100500,427,1415,341,48,0,48,5800,0,5800,20700,120,14.4,10,10,3.2,213,9,999999999,170,0.0880,0,88,0.160,5.0,1.0 +1999,1,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.0,11.0,94,100600,555,1415,353,64,0,64,7700,0,7700,28900,110,3.6,10,10,3.2,180,9,999999999,170,0.0880,0,88,0.160,37.0,1.0 +1999,1,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,100300,622,1415,345,68,0,68,8300,0,8300,31600,10,3.1,10,10,2.4,244,9,999999999,160,0.0880,0,88,0.160,21.0,1.0 +1999,1,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,100000,621,1415,342,77,0,77,9300,0,9300,35300,60,6.7,10,10,0.8,274,9,999999999,150,0.0880,0,88,0.160,20.0,1.0 +1999,1,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,99900,555,1415,342,63,0,63,7600,0,7600,28500,60,6.2,10,10,3.2,366,9,999999999,150,0.0880,0,88,0.160,5.0,1.0 +1999,1,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,99800,426,1415,343,43,0,43,5200,0,5200,18700,80,3.6,10,10,3.6,91,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,99900,245,1415,343,54,0,54,6100,0,6100,18900,220,3.6,10,10,0.3,61,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100000,45,908,316,3,0,3,400,0,400,1200,340,8.2,10,10,1.6,122,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,100200,0,0,318,0,0,0,0,0,0,0,290,6.7,10,10,8.0,152,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.6,86,100200,0,0,327,0,0,0,0,0,0,0,270,6.2,10,10,16.0,488,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,100400,0,0,324,0,0,0,0,0,0,0,260,8.2,10,10,16.0,671,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,100500,0,0,285,0,0,0,0,0,0,0,260,8.8,3,3,16.0,77777,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,100600,0,0,262,0,0,0,0,0,0,0,240,6.7,0,0,16.0,77777,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,100800,0,0,252,0,0,0,0,0,0,0,250,8.8,0,0,16.0,77777,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.2,80,100800,0,0,249,0,0,0,0,0,0,0,260,8.2,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.3,76,100900,0,0,245,0,0,0,0,0,0,0,270,8.8,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.5,-4.4,72,101000,0,0,243,0,0,0,0,0,0,0,270,9.8,0,0,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,101100,0,0,239,0,0,0,0,0,0,0,270,11.3,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-8.3,57,101200,0,0,235,0,0,0,0,0,0,0,270,8.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,101300,0,0,230,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.7,48,101400,0,0,227,0,0,0,0,0,0,0,280,10.3,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,101500,0,0,223,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,101600,46,932,231,4,41,3,600,1900,500,600,270,8.8,2,2,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.8,44,101700,247,1415,230,105,145,79,11200,10600,9400,16900,280,9.3,1,1,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.7,48,101800,428,1415,231,284,520,126,29000,45900,15000,24300,270,9.3,1,1,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.7,46,101800,557,1415,233,378,690,106,39100,64800,13400,20300,270,8.8,1,1,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.2,44,101700,624,1415,232,387,537,149,40700,52600,17400,30000,270,9.8,2,1,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.1,46,101700,624,1415,238,308,203,218,33200,20300,24200,52300,270,7.7,2,2,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,101700,558,1415,243,364,627,116,37300,58600,14100,21900,270,8.2,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-14.4,33,101700,429,1415,239,261,614,74,27000,54400,10400,13900,260,8.2,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-14.4,34,101700,248,1415,238,118,353,56,12300,24900,7900,10100,270,7.7,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-14.4,36,101800,47,932,236,6,60,5,900,2700,800,1000,270,7.7,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,101900,0,0,234,0,0,0,0,0,0,0,270,9.8,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,101900,0,0,232,0,0,0,0,0,0,0,280,8.2,2,2,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.9,41,102000,0,0,232,0,0,0,0,0,0,0,280,8.8,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.6,37,102000,0,0,219,0,0,0,0,0,0,0,280,9.3,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,102100,0,0,218,0,0,0,0,0,0,0,280,9.3,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.6,41,102100,0,0,216,0,0,0,0,0,0,0,280,9.3,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-15.6,43,102200,0,0,214,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-15.6,43,102200,0,0,214,0,0,0,0,0,0,0,270,7.7,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-15.0,48,102300,0,0,213,0,0,0,0,0,0,0,270,7.7,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-15.0,50,102300,0,0,211,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-15.0,50,102300,0,0,211,0,0,0,0,0,0,0,270,6.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-15.0,52,102400,0,0,209,0,0,0,0,0,0,0,280,5.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-15.0,52,102500,0,0,209,0,0,0,0,0,0,0,280,5.7,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-14.4,55,102500,0,0,219,0,0,0,0,0,0,0,300,4.6,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,102500,46,931,221,5,118,2,900,6700,600,800,300,4.6,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-13.9,53,102600,248,1415,214,140,421,66,14400,29600,9200,12200,280,5.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-13.9,46,102600,429,1415,219,270,564,98,27300,49100,12400,17300,300,5.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,102600,559,1415,223,372,690,98,38600,65200,12700,19100,310,5.7,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-13.9,39,102500,626,1415,225,436,772,93,45900,75100,12600,19200,310,6.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-13.9,36,102400,627,1415,228,415,622,138,42400,59300,16100,26500,310,5.2,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-13.9,34,102400,561,1415,230,358,704,78,37800,67200,11100,15800,330,4.1,0,0,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-15.0,31,102500,433,1415,239,251,528,89,25700,46400,11400,16100,310,4.6,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,102500,252,1415,237,128,419,52,12900,30300,7500,9100,320,4.1,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.0,34,102500,49,955,235,5,7,5,600,300,600,1000,300,4.6,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-14.4,40,102600,0,0,232,0,0,0,0,0,0,0,320,2.6,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,102700,0,0,234,0,0,0,0,0,0,0,340,3.6,4,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-14.4,41,102700,0,0,230,0,0,0,0,0,0,0,340,3.1,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-14.4,40,102700,0,0,232,0,0,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102700,0,0,233,0,0,0,0,0,0,0,280,4.1,3,3,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,102700,0,0,221,0,0,0,0,0,0,0,360,1.5,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,102700,0,0,221,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-11.1,62,102700,0,0,219,0,0,0,0,0,0,0,270,3.6,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-12.8,50,102700,0,0,220,0,0,0,0,0,0,0,280,4.1,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-11.7,61,102700,0,0,217,0,0,0,0,0,0,0,260,3.6,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-11.7,64,102700,0,0,215,0,0,0,0,0,0,0,250,3.6,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-11.7,67,102700,0,0,214,0,0,0,0,0,0,0,240,3.6,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-12.8,61,102700,0,0,217,0,0,0,0,0,0,0,240,3.6,1,1,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-11.7,67,102700,0,0,223,0,0,0,0,0,0,0,250,3.6,3,3,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-11.1,68,102700,46,931,216,5,93,3,900,5300,600,1100,240,4.6,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-12.8,50,102700,248,1415,220,131,331,72,13200,23200,9100,13400,230,6.2,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102700,431,1415,222,270,558,100,27400,48500,12500,17600,230,6.7,0,0,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102600,560,1415,246,346,483,154,35800,46100,17400,30700,220,5.7,8,8,16.0,3048,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-13.3,40,102400,628,1415,262,239,84,202,26300,8300,22600,57000,220,6.2,10,10,16.0,3048,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-12.8,40,102300,629,1415,265,154,0,154,17600,0,17600,62000,210,6.2,10,10,16.0,2743,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,102200,564,1415,268,102,0,102,11900,0,11900,43000,200,6.7,10,10,16.0,2286,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-9.4,47,102100,436,1415,274,53,0,53,6300,0,6300,22700,210,7.7,10,10,16.0,2286,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-11.7,37,102000,256,1415,274,50,0,50,5700,0,5700,18200,210,8.2,10,10,16.0,2438,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-10.0,43,102000,51,979,263,9,52,7,1200,2000,1000,1200,220,7.7,9,8,16.0,3048,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-9.4,47,102000,0,0,250,0,0,0,0,0,0,0,220,7.2,4,4,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,101900,0,0,253,0,0,0,0,0,0,0,220,6.7,5,5,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,101900,0,0,254,0,0,0,0,0,0,0,210,9.3,5,5,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,101800,0,0,266,0,0,0,0,0,0,0,220,8.2,8,8,16.0,1524,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.2,57,101800,0,0,263,0,0,0,0,0,0,0,210,8.2,8,8,16.0,7620,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.2,52,101700,0,0,268,0,0,0,0,0,0,0,230,7.7,8,8,16.0,2134,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.2,52,101700,0,0,268,0,0,0,0,0,0,0,230,6.7,8,8,16.0,1676,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.7,54,101600,0,0,282,0,0,0,0,0,0,0,240,6.7,10,10,16.0,1676,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.1,57,101600,0,0,283,0,0,0,0,0,0,0,240,5.7,10,10,16.0,1676,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.7,52,101500,0,0,284,0,0,0,0,0,0,0,250,5.7,10,10,16.0,1524,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.1,55,101500,0,0,285,0,0,0,0,0,0,0,240,4.6,10,10,16.0,1829,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.1,55,101600,0,0,285,0,0,0,0,0,0,0,250,5.7,10,10,16.0,2134,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,101600,0,0,276,0,0,0,0,0,0,0,240,5.7,10,9,16.0,2591,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,101700,0,0,281,0,0,0,0,0,0,0,260,6.2,9,9,16.0,1372,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,101800,46,931,281,3,27,3,500,1200,400,600,280,7.2,9,9,16.0,2743,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,102000,249,1415,275,96,97,79,10300,7100,9100,16900,310,8.2,8,8,16.0,1981,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,102200,432,1415,266,291,539,126,29800,47800,15100,24300,340,7.2,8,8,16.0,1189,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-11.2,38,101600,562,1415,252,391,763,87,41000,72600,12100,17300,320,6.2,5,5,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-16.7,22,102200,631,1415,245,418,700,104,43600,67800,13300,21200,300,8.2,3,3,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-15.0,26,102300,632,1415,247,415,604,144,43900,59400,17300,29000,300,6.2,3,3,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-16.7,22,102300,567,1415,235,393,770,83,40200,72500,11000,15600,280,7.2,0,0,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-17.8,20,102400,440,1415,244,289,697,71,30000,62400,10500,13500,290,8.2,3,3,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-17.2,22,102500,259,1415,243,133,421,56,13500,30700,7800,9700,280,8.2,3,3,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-13.9,34,102600,54,1002,230,3,0,3,400,0,400,1200,250,8.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-15.0,31,102700,0,0,229,0,0,0,0,0,0,0,270,7.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-15.0,31,102800,0,0,229,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.6,31,102900,0,0,227,0,0,0,0,0,0,0,290,6.7,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.6,32,102900,0,0,225,0,0,0,0,0,0,0,280,6.7,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-15.6,34,103000,0,0,223,0,0,0,0,0,0,0,300,6.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.6,35,103100,0,0,221,0,0,0,0,0,0,0,280,6.7,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.6,37,103100,0,0,219,0,0,0,0,0,0,0,300,6.2,0,0,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.0,39,103200,0,0,230,0,0,0,0,0,0,0,300,5.2,3,3,16.0,7620,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,103200,0,0,231,0,0,0,0,0,0,0,320,6.2,5,5,16.0,7620,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,103200,0,0,231,0,0,0,0,0,0,0,340,4.6,6,5,16.0,7620,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,103200,0,0,233,0,0,0,0,0,0,0,360,4.1,7,6,16.0,7620,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.0,43,103200,0,0,234,0,0,0,0,0,0,0,20,4.6,7,7,16.0,7620,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,103300,0,0,245,0,0,0,0,0,0,0,20,4.1,9,9,16.0,7620,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,103400,0,0,240,0,0,0,0,0,0,0,50,2.6,8,8,16.0,2743,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-14.4,41,103400,47,931,254,2,0,2,300,0,300,800,80,2.1,10,10,16.0,2438,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-14.4,40,103400,250,1415,249,52,0,52,5900,0,5900,18600,80,3.1,9,9,16.0,2134,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.8,44,103400,433,1415,244,166,81,141,18200,7500,15900,35800,110,1.5,9,7,16.0,4267,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.0,-8.0,65,103200,564,1415,266,96,0,96,11300,0,11300,41000,80,3.6,10,10,3.2,540,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-5.6,86,103100,633,1415,265,80,0,80,9600,0,9600,36700,60,3.6,10,10,0.8,152,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-4.4,91,102800,635,1415,269,77,0,77,9300,0,9300,35600,50,5.2,10,10,0.8,122,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-3.9,91,102700,571,1415,271,63,0,63,7600,0,7600,28700,60,4.1,10,10,0.4,91,9,999999999,110,0.0880,0,88,0.160,1.0,1.0 +1999,1,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-2.8,95,102600,444,1415,275,48,0,48,5800,0,5800,20900,40,3.6,10,10,0.8,122,9,999999999,120,0.0880,0,88,0.160,1.0,1.0 +1999,1,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-1.7,95,102400,263,1415,280,28,0,28,3300,0,3300,11400,40,3.1,10,10,0.8,122,9,999999999,120,0.0880,0,88,0.160,1.0,1.0 +1999,1,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.1,96,102300,57,1026,283,2,0,2,300,0,300,800,40,2.6,10,10,0.8,122,9,999999999,129,0.0880,0,88,0.160,1.0,1.0 +1999,1,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.1,96,102200,0,0,283,0,0,0,0,0,0,0,30,4.1,10,10,2.4,122,9,999999999,139,0.0880,0,88,0.160,1.0,1.0 +1999,1,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102000,0,0,286,0,0,0,0,0,0,0,30,4.6,10,10,1.2,122,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102000,0,0,286,0,0,0,0,0,0,0,20,3.1,10,10,1.2,122,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,101900,0,0,289,0,0,0,0,0,0,0,0,0.0,10,10,4.0,91,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101800,0,0,291,0,0,0,0,0,0,0,0,0.0,10,10,1.2,91,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,101700,0,0,296,0,0,0,0,0,0,0,200,4.6,10,10,4.0,91,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.8,100,101700,0,0,302,0,0,0,0,0,0,0,210,5.7,10,10,3.2,213,9,999999999,179,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,101500,0,0,298,0,0,0,0,0,0,0,200,6.2,10,10,9.6,213,9,999999999,179,0.0880,0,88,0.160,1.0,1.0 +1999,1,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,101400,0,0,301,0,0,0,0,0,0,0,190,4.6,10,10,11.2,213,9,999999999,189,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,101400,0,0,298,0,0,0,0,0,0,0,280,4.1,10,10,6.4,152,9,999999999,200,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101300,0,0,298,0,0,0,0,0,0,0,270,2.1,10,10,6.4,213,9,999999999,200,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,101100,0,0,298,0,0,0,0,0,0,0,290,1.5,10,10,9.6,213,9,999999999,209,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101100,0,0,292,0,0,0,0,0,0,0,200,1.5,10,10,8.0,213,9,999999999,220,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101000,0,0,295,0,0,0,0,0,0,0,0,0.0,10,10,6.4,213,9,999999999,220,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,100900,47,931,296,3,4,3,400,200,400,600,0,0.0,10,10,4.0,213,9,999999999,220,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.0,2.0,100,100900,251,1415,297,78,14,76,8600,500,8500,23800,0,0.0,10,10,4.0,210,9,999999999,209,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,100700,435,1415,319,139,13,135,15400,900,15100,45900,190,8.2,10,10,4.0,152,9,999999999,200,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,100600,566,1415,314,141,0,141,16000,0,16000,55100,190,4.1,10,10,0.4,90,9,999999999,200,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100400,636,1415,319,215,30,201,24100,2500,22900,74400,200,5.2,10,10,2.0,91,9,999999999,189,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100200,639,1415,328,148,0,148,17000,0,17000,60700,190,9.3,10,10,8.0,2438,9,999999999,189,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,100100,574,1415,330,205,65,179,22500,6300,20000,49500,190,10.8,10,9,16.0,2896,9,999999999,179,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,100200,448,1415,317,75,0,75,8700,0,8700,30600,270,6.2,10,9,2.4,213,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.0,7.0,100,100200,268,1415,325,32,0,32,3800,0,3800,12800,270,6.2,10,10,2.4,210,9,999999999,170,0.0880,0,88,0.160,1.0,1.0 +1999,1,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.6,65,100500,60,1049,316,5,0,5,600,0,600,2000,300,10.3,10,10,16.0,671,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,100600,0,0,296,0,0,0,0,0,0,0,310,11.8,10,10,16.0,1829,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,100900,0,0,288,0,0,0,0,0,0,0,300,11.8,10,10,16.0,1981,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,101100,0,0,283,0,0,0,0,0,0,0,300,12.9,10,10,16.0,2591,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.8,49,101200,0,0,273,0,0,0,0,0,0,0,300,9.8,9,9,16.0,2743,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-9.4,45,101300,0,0,269,0,0,0,0,0,0,0,320,9.8,9,9,16.0,3048,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101400,0,0,272,0,0,0,0,0,0,0,330,9.3,9,9,16.0,3048,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.1,66,101500,0,0,268,0,0,0,0,0,0,0,320,9.3,9,9,16.0,3048,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,101500,0,0,264,0,0,0,0,0,0,0,300,6.7,9,9,16.0,7010,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.3,59,101600,0,0,256,0,0,0,0,0,0,0,310,8.2,8,8,16.0,7010,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.8,65,101600,0,0,254,0,0,0,0,0,0,0,310,7.2,8,8,16.0,7010,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.8,65,101600,0,0,254,0,0,0,0,0,0,0,330,6.2,8,8,16.0,7010,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-7.8,68,101700,0,0,253,0,0,0,0,0,0,0,340,6.2,8,8,16.0,7010,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-8.3,65,101800,0,0,252,0,0,0,0,0,0,0,330,5.2,8,8,16.0,7010,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.9,65,101900,0,0,245,0,0,0,0,0,0,0,330,4.6,7,7,16.0,7010,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-8.3,71,102000,48,931,244,6,89,4,1000,4800,800,1100,330,4.1,7,7,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-7.2,72,102000,253,1415,249,156,310,101,16000,21700,12100,21400,340,4.1,7,7,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-7.8,68,102100,437,1415,249,249,326,148,26000,29700,16700,31200,350,5.2,7,7,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.0,56,102100,569,1415,247,160,24,151,18200,1800,17500,57900,300,4.1,7,7,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.7,44,102000,639,1415,246,455,670,151,46300,63800,17400,28800,290,3.1,6,6,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-12.2,40,101900,642,1415,243,421,604,146,44600,59600,17500,29500,270,4.1,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-12.8,40,101900,578,1415,241,371,705,82,39200,67700,11400,16700,250,4.6,4,4,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-12.8,38,101800,452,1415,241,274,599,82,28300,53700,11100,15300,250,4.6,3,3,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.7,44,101800,272,1415,240,154,517,54,15700,38700,8200,9500,230,3.1,3,3,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.7,46,101800,63,1073,238,13,110,9,1700,5200,1400,1800,220,6.7,3,3,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-13.3,42,101700,0,0,235,0,0,0,0,0,0,0,230,5.7,3,3,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-13.3,42,101700,0,0,225,0,0,0,0,0,0,0,250,4.1,0,0,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.2,46,101700,0,0,236,0,0,0,0,0,0,0,220,5.7,3,3,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.7,46,101700,0,0,256,0,0,0,0,0,0,0,220,7.2,10,9,16.0,2134,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9*9*9,-3.0,-11.1,49,101700,0,0,251,0,0,0,0,0,0,0,230,7.5,9,8,16.0,2134,9,999999999,50,0.0880,0,88,0.160,999.0,99.0 +1999,1,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.6,53,101700,0,0,250,0,0,0,0,0,0,0,230,7.7,8,8,16.0,2134,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,101500,0,0,241,0,0,0,0,0,0,0,230,6.7,5,5,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.6,53,101600,0,0,237,0,0,0,0,0,0,0,230,5.7,3,3,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.0,56,101600,0,0,242,0,0,0,0,0,0,0,230,6.7,6,5,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-10.0,54,101600,0,0,252,0,0,0,0,0,0,0,250,7.2,8,8,16.0,2134,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.0,59,101600,0,0,248,0,0,0,0,0,0,0,260,6.2,8,8,16.0,3353,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,101700,0,0,262,0,0,0,0,0,0,0,270,6.7,10,10,16.0,2591,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,101800,0,0,256,0,0,0,0,0,0,0,270,7.2,10,10,16.0,2743,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,101800,0,0,227,0,0,0,0,0,0,0,290,8.8,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,101900,49,931,227,6,110,4,1100,6300,800,1400,280,8.2,3,3,16.0,77777,9,999999999,30,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-14.4,41,102000,254,1414,230,156,378,88,15600,26700,10700,16900,270,9.8,3,3,16.0,77777,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.0,37,102100,439,1414,243,270,413,141,27300,36700,15800,27600,260,8.8,8,8,16.0,1341,9,999999999,40,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-16.1,32,102200,571,1414,236,192,43,175,21100,4200,19400,48500,300,8.2,5,5,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-17.2,31,102100,642,1414,233,178,12,173,20300,900,19800,68000,280,10.3,5,5,16.0,77777,9,999999999,50,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-17.8,27,102100,645,1414,233,314,191,227,33900,19200,25100,55000,280,11.3,4,4,16.0,77777,9,999999999,60,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-17.2,29,102200,582,1414,231,405,705,114,41800,66700,14200,22000,250,9.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-17.8,27,102200,456,1414,231,296,681,76,30800,61400,10900,14400,260,9.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-17.8,30,102300,276,1414,227,150,496,52,15300,37500,7900,9300,260,8.8,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-18.3,30,102300,66,1096,215,16,154,9,2000,8500,1500,2100,260,7.7,0,0,16.0,77777,9,999999999,80,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-17.8,33,102400,0,0,214,0,0,0,0,0,0,0,250,6.7,0,0,16.0,77777,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.0,-18.0,34,102400,0,0,221,0,0,0,0,0,0,0,240,7.2,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-18.9,31,102400,0,0,220,0,0,0,0,0,0,0,240,5.2,4,3,16.0,77777,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-16.1,41,102300,0,0,246,0,0,0,0,0,0,0,280,2.1,10,10,16.0,3048,9,999999999,100,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-16.7,35,102200,0,0,250,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1829,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,102200,0,0,256,0,0,0,0,0,0,0,180,4.1,10,10,16.0,2134,9,999999999,110,0.0880,0,88,0.160,0.0,1.0 +1999,1,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.8,42,102100,0,0,262,0,0,0,0,0,0,0,190,5.2,10,10,16.0,1829,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-8.9,51,101900,0,0,273,0,0,0,0,0,0,0,180,7.7,10,10,16.0,1829,9,999999999,120,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.3,67,101700,0,0,290,0,0,0,0,0,0,0,170,9.3,10,10,16.0,3048,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101500,0,0,306,0,0,0,0,0,0,0,180,10.8,10,10,16.0,3048,9,999999999,129,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101400,0,0,312,0,0,0,0,0,0,0,190,13.4,10,10,16.0,3353,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101400,0,0,300,0,0,0,0,0,0,0,250,5.2,10,10,16.0,2438,9,999999999,139,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,101400,0,0,291,0,0,0,0,0,0,0,230,3.6,10,10,16.0,1676,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,101400,0,0,293,0,0,0,0,0,0,0,250,3.1,10,10,16.0,2134,9,999999999,150,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101400,49,955,283,2,0,2,300,0,300,800,250,4.1,9,8,16.0,1981,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101400,256,1414,287,52,0,52,5900,0,5900,18700,220,4.6,9,8,16.0,2743,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101400,441,1414,284,159,50,143,17400,4600,15900,36500,240,4.1,8,7,16.0,7010,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,101500,574,1414,301,250,128,198,27000,12600,21800,46600,240,4.6,10,9,16.0,2286,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.2,50,101500,645,1414,290,221,30,207,24700,2600,23600,76500,240,4.6,7,5,16.0,7620,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,101400,649,1414,297,315,144,248,33700,14500,27100,60200,240,7.7,7,5,16.0,7620,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101500,586,1414,297,263,136,206,28300,13400,22700,48700,240,5.7,7,6,16.0,3658,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,101500,460,1414,296,167,76,142,18300,7100,16000,37100,220,4.1,5,4,16.0,7620,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,101600,280,1414,291,146,309,84,14700,23000,10200,15800,230,4.6,3,3,16.0,77777,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101700,69,1120,282,19,133,13,2300,6300,1900,2500,220,3.1,3,3,16.0,77777,9,999999999,160,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.6,73,101700,0,0,279,0,0,0,0,0,0,0,200,3.6,3,3,16.0,77777,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,101800,0,0,285,0,0,0,0,0,0,0,210,4.6,7,5,16.0,77777,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101800,0,0,300,0,0,0,0,0,0,0,230,3.6,9,8,16.0,2743,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.7,76,101800,0,0,304,0,0,0,0,0,0,0,180,3.1,9,9,16.0,2743,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,101800,0,0,290,0,0,0,0,0,0,0,190,3.6,8,7,16.0,7620,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,101800,0,0,285,0,0,0,0,0,0,0,180,4.1,9,4,16.0,7620,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101700,0,0,288,0,0,0,0,0,0,0,180,4.1,9,5,16.0,7620,9,999999999,170,0.0880,0,88,0.160,0.0,1.0 +1999,1,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,101600,0,0,281,0,0,0,0,0,0,0,190,2.6,8,4,16.0,7620,9,999999999,170,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,101700,0,0,279,0,0,0,0,0,0,0,190,3.1,7,4,16.0,7620,9,999999999,170,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101700,0,0,274,0,0,0,0,0,0,0,220,3.1,5,3,16.0,7620,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,101600,0,0,271,0,0,0,0,0,0,0,180,2.6,5,3,16.0,77777,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101600,0,0,284,0,0,0,0,0,0,0,190,4.1,8,7,16.0,7620,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,101600,0,0,306,0,0,0,0,0,0,0,190,3.1,10,10,16.0,1676,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,101600,0,0,309,0,0,0,0,0,0,0,180,3.6,10,10,16.0,1676,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,101600,50,955,311,3,0,3,400,0,400,1200,220,3.1,10,10,16.0,1524,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,101700,257,1414,318,69,0,69,7600,0,7600,22800,230,4.1,10,10,16.0,1981,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.7,65,101800,443,1414,307,138,6,136,15300,400,15200,46600,220,4.1,9,8,16.0,2286,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.7,65,101700,577,1414,307,154,0,154,17400,0,17400,59100,210,3.1,10,8,16.0,1829,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.2,65,101700,648,1414,310,172,6,169,19600,500,19400,67300,220,4.1,9,8,16.0,2134,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,101600,653,1414,313,184,6,181,20900,500,20600,70800,240,3.6,10,8,16.0,2438,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.8,61,101700,590,1414,318,86,0,86,10200,0,10200,38100,270,3.1,9,8,16.0,2743,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,101900,464,1414,305,124,12,120,14000,800,13700,44300,360,7.7,9,8,16.0,2743,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,102100,285,1414,297,66,0,66,7400,0,7400,23200,360,10.3,10,10,16.0,1311,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,102200,72,1143,272,6,0,6,700,0,700,2400,20,10.3,9,8,16.0,1189,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,102400,0,0,280,0,0,0,0,0,0,0,10,11.3,10,10,16.0,1158,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,102500,0,0,280,0,0,0,0,0,0,0,10,8.2,10,10,16.0,1067,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.1,63,102700,0,0,278,0,0,0,0,0,0,0,20,7.2,10,10,16.0,1006,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.0,-4.0,85,102800,0,0,274,0,0,0,0,0,0,0,10,6.7,10,10,12.9,540,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.0,-6.0,77,102900,0,0,268,0,0,0,0,0,0,0,10,7.7,10,10,11.3,660,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-5.6,82,103000,0,0,268,0,0,0,0,0,0,0,10,6.2,10,10,14.4,396,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-6.7,75,103000,0,0,266,0,0,0,0,0,0,0,30,10.8,10,10,16.0,549,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-6.7,82,103000,0,0,262,0,0,0,0,0,0,0,30,9.3,10,10,14.4,1006,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-7.2,83,103100,0,0,259,0,0,0,0,0,0,0,40,8.8,10,10,8.0,701,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-7.8,86,103100,0,0,255,0,0,0,0,0,0,0,30,7.7,10,10,6.4,701,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-8.9,83,103200,0,0,251,0,0,0,0,0,0,0,50,9.8,10,10,12.8,823,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-9.4,82,103200,0,0,249,0,0,0,0,0,0,0,30,8.2,10,10,12.8,762,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-10.0,82,103300,0,0,246,0,0,0,0,0,0,0,30,9.8,10,10,4.8,762,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-11.1,75,103300,0,0,245,0,0,0,0,0,0,0,40,8.2,10,10,14.4,762,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-12.2,71,103400,51,955,242,4,12,4,600,400,500,600,40,9.3,10,10,9.6,640,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-10.0,86,103400,259,1414,244,86,41,79,9500,3300,8900,18800,30,7.2,10,10,1.6,762,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-10.6,82,103500,446,1414,244,111,0,111,12500,0,12500,41100,30,6.7,10,10,4.0,823,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-8.9,86,103400,580,1414,249,64,0,64,7800,0,7800,29300,50,9.3,10,10,2.8,884,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-9.4,79,103400,652,1414,251,74,0,74,9000,0,9000,34600,60,10.3,10,10,12.8,701,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-8.9,83,103300,657,1414,251,83,0,83,10000,0,10000,38400,50,9.8,10,10,8.0,671,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-8.9,83,103300,594,1414,251,69,0,69,8300,0,8300,31600,50,9.8,10,10,8.0,549,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-8.3,87,103200,469,1414,252,49,0,49,5900,0,5900,21600,50,9.8,10,10,4.8,549,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-7.8,86,103200,289,1414,255,47,0,47,5400,0,5400,18100,40,7.7,10,10,8.0,488,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-7.8,86,103100,76,1167,255,7,0,7,900,0,900,2800,50,11.3,10,10,8.0,427,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-6.7,91,103100,0,0,257,0,0,0,0,0,0,0,40,8.8,10,10,11.2,427,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-6.1,91,103100,0,0,260,0,0,0,0,0,0,0,30,9.3,10,10,4.0,427,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-6.7,91,103000,0,0,257,0,0,0,0,0,0,0,20,6.7,10,10,4.0,457,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.0,-7.0,92,103000,0,0,256,0,0,0,0,0,0,0,20,6.7,10,10,4.0,450,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-6.1,96,102800,0,0,258,0,0,0,0,0,0,0,20,7.2,10,10,4.0,366,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-5.6,95,102600,0,0,261,0,0,0,0,0,0,0,30,6.2,10,10,6.4,305,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-3.9,95,102500,0,0,269,0,0,0,0,0,0,0,40,6.2,10,10,8.0,244,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-2.8,95,102300,0,0,275,0,0,0,0,0,0,0,40,9.3,10,10,8.0,244,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.2,91,102100,0,0,280,0,0,0,0,0,0,0,40,7.7,10,10,11.2,244,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-0.6,100,101900,0,0,284,0,0,0,0,0,0,0,50,6.2,10,10,9.6,183,9,999999999,200,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,101700,0,0,286,0,0,0,0,0,0,0,50,6.2,10,10,8.0,183,9,999999999,200,0.0890,0,88,0.160,1.0,1.0 +1999,1,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.0,0.0,93,101400,0,0,291,0,0,0,0,0,0,0,50,6.7,10,10,9.7,150,9,999999999,209,0.0890,0,88,0.160,1.0,1.0 +1999,1,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,101400,0,0,292,0,0,0,0,0,0,0,50,4.1,10,10,8.0,213,9,999999999,209,0.0890,0,88,0.160,3.0,1.0 +1999,1,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,101200,0,0,292,0,0,0,0,0,0,0,40,4.1,10,10,8.0,213,9,999999999,209,0.0890,0,88,0.160,5.0,1.0 +1999,1,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101100,52,978,292,2,0,2,300,0,300,800,20,5.2,10,10,1.2,122,9,999999999,200,0.0890,0,88,0.160,8.0,1.0 +1999,1,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.0,1.0,100,101000,262,1414,292,34,0,34,4000,0,4000,13400,20,5.1,10,10,4.4,90,9,999999999,200,0.0890,0,88,0.160,4.0,1.0 +1999,1,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.0,8.0,100,100700,448,1414,331,48,0,48,5800,0,5800,21000,170,8.2,10,10,4.8,240,9,999999999,189,0.0890,0,88,0.160,2.0,1.0 +1999,1,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.0,8.0,100,100700,583,1414,331,64,0,64,7800,0,7800,29300,180,6.7,10,10,4.0,120,9,999999999,189,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.0,7.0,100,100600,655,1414,325,74,0,74,9000,0,9000,34700,210,8.2,10,10,0.4,60,9,999999999,179,0.0890,0,88,0.160,1.0,1.0 +1999,1,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,100500,661,1414,298,202,12,196,22800,1000,22300,75200,250,5.7,10,10,0.4,91,9,999999999,179,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.0,2.0,100,100500,599,1414,297,166,12,161,18800,900,18400,62200,250,5.7,10,10,2.0,60,9,999999999,170,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,100500,473,1414,288,124,12,120,14000,800,13700,44800,260,6.7,8,8,16.0,1036,9,999999999,170,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,100600,294,1414,285,162,344,90,16400,26100,10900,17000,260,8.8,8,8,16.0,1524,9,999999999,160,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,100800,79,1190,295,16,54,14,2000,2000,1800,2300,250,10.3,10,10,16.0,792,9,999999999,160,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.7,77,100800,0,0,292,0,0,0,0,0,0,0,260,9.8,10,10,16.0,914,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101000,0,0,288,0,0,0,0,0,0,0,250,10.8,10,10,16.0,914,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-4.4,66,101000,0,0,285,0,0,0,0,0,0,0,250,10.8,10,10,16.0,762,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.1,63,101200,0,0,278,0,0,0,0,0,0,0,260,9.8,10,10,16.0,762,9,999999999,139,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.2,60,101300,0,0,275,0,0,0,0,0,0,0,260,10.8,10,10,16.0,975,9,999999999,139,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,101300,0,0,272,0,0,0,0,0,0,0,290,8.2,10,10,16.0,1067,9,999999999,129,0.0890,0,88,0.160,0.0,1.0 +1999,1,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.3,59,101400,0,0,269,0,0,0,0,0,0,0,270,6.7,10,10,16.0,1128,9,999999999,129,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-9.4,59,101400,0,0,247,0,0,0,0,0,0,0,260,8.8,7,7,16.0,1006,9,999999999,120,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-9.4,62,101500,0,0,236,0,0,0,0,0,0,0,270,7.2,3,3,16.0,77777,9,999999999,120,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.0,61,101600,0,0,224,0,0,0,0,0,0,0,260,7.7,0,0,16.0,77777,9,999999999,110,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.0,61,101700,0,0,234,0,0,0,0,0,0,0,250,6.7,3,3,16.0,77777,9,999999999,110,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.0,61,101700,0,0,252,0,0,0,0,0,0,0,260,8.2,9,9,16.0,7620,9,999999999,100,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-9.4,68,101700,0,0,236,0,0,0,0,0,0,0,270,7.2,5,5,16.0,77777,9,999999999,100,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.6,58,101700,0,0,246,0,0,0,0,0,0,0,280,5.7,8,8,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.0,59,101800,54,978,261,8,98,5,1200,5400,900,1300,270,4.6,10,10,16.0,3962,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-8.9,59,101800,264,1414,259,163,314,104,16600,22500,12400,22000,240,4.6,9,9,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,101800,451,1414,272,214,219,144,22400,20200,16000,30100,230,5.7,10,10,16.0,3962,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,101700,586,1414,268,192,37,177,21100,3600,19600,49600,210,5.2,9,9,16.0,3962,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,101600,659,1414,286,412,501,177,42900,49500,19700,36800,200,5.7,10,10,16.0,4267,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,101400,665,1414,294,285,120,229,31300,11900,25700,64900,180,5.2,10,10,16.0,3353,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101400,603,1414,299,406,599,150,42600,58300,17600,30100,190,5.7,9,9,16.0,3658,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101300,478,1414,279,303,636,87,31300,57800,11600,16400,210,4.1,2,2,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.7,76,101300,299,1414,283,172,545,56,17600,42500,8500,10100,190,4.6,3,3,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,101300,83,1213,299,27,226,14,3100,12700,2200,2900,180,5.2,9,9,16.0,3962,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,101300,0,0,280,0,0,0,0,0,0,0,190,5.7,5,5,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101300,0,0,278,0,0,0,0,0,0,0,190,5.7,5,5,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,101400,0,0,276,0,0,0,0,0,0,0,230,5.7,4,3,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,101400,0,0,274,0,0,0,0,0,0,0,240,4.1,4,3,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,101400,0,0,262,0,0,0,0,0,0,0,240,4.6,0,0,16.0,77777,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101600,0,0,280,0,0,0,0,0,0,0,250,7.2,5,4,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101600,0,0,271,0,0,0,0,0,0,0,250,5.2,5,2,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101600,0,0,273,0,0,0,0,0,0,0,250,5.2,6,3,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101700,0,0,269,0,0,0,0,0,0,0,230,6.2,6,3,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,101800,0,0,273,0,0,0,0,0,0,0,260,6.2,8,4,16.0,4267,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101900,0,0,276,0,0,0,0,0,0,0,250,5.2,8,4,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,102000,0,0,265,0,0,0,0,0,0,0,180,2.1,8,4,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.1,91,102100,0,0,260,0,0,0,0,0,0,0,210,3.6,8,4,16.0,4267,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,102200,0,0,268,0,0,0,0,0,0,0,250,4.1,5,3,16.0,7620,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,102300,55,1001,269,8,120,5,1300,7000,900,1700,260,3.6,2,2,16.0,3962,9,999999999,89,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.6,73,102400,266,1414,268,162,375,91,16200,27100,11000,17500,260,4.6,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,102500,454,1414,272,276,469,125,28400,42300,14800,24100,230,4.6,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,102600,590,1414,279,410,708,114,42400,67200,14200,22100,240,4.1,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,102500,663,1414,293,449,754,93,46200,72900,11800,18400,260,4.1,6,2,16.0,77777,9,999999999,110,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,102500,669,1414,299,481,814,94,49500,78800,12100,18600,250,3.1,6,3,16.0,77777,9,999999999,110,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.8,37,102400,608,1414,288,407,759,79,42200,72700,10800,15900,240,3.1,0,0,16.0,77777,9,999999999,120,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,102400,483,1414,287,309,648,87,32000,59100,11700,16400,230,2.6,0,0,16.0,77777,9,999999999,120,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,102400,303,1414,285,173,563,51,17800,44500,8200,9400,220,2.1,0,0,16.0,77777,9,999999999,120,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,102400,87,1237,277,28,221,15,3300,11100,2500,2800,0,0.0,2,1,16.0,7620,9,999999999,129,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,102500,0,0,277,0,0,0,0,0,0,0,0,0.0,2,2,16.0,7620,9,999999999,129,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,102500,0,0,278,0,0,0,0,0,0,0,120,1.5,8,5,16.0,77777,9,999999999,129,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102500,0,0,269,0,0,0,0,0,0,0,130,1.5,5,4,16.0,77777,9,999999999,139,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102500,0,0,275,0,0,0,0,0,0,0,0,0.0,7,5,16.0,77777,9,999999999,139,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,102500,0,0,275,0,0,0,0,0,0,0,110,1.5,7,6,14.4,7620,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,102400,0,0,274,0,0,0,0,0,0,0,50,2.1,9,5,11.2,4267,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,102400,0,0,270,0,0,0,0,0,0,0,80,2.1,5,3,11.2,4267,9,999999999,150,0.0890,0,88,0.160,0.0,1.0 +1999,1,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,102300,0,0,279,0,0,0,0,0,0,0,80,2.6,8,6,11.2,4267,9,999999999,160,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,3.3,96,102200,0,0,277,0,0,0,0,0,0,0,90,4.1,6,3,11.2,7620,9,999999999,160,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102100,0,0,287,0,0,0,0,0,0,0,110,4.6,7,5,16.0,77777,9,999999999,160,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102100,0,0,290,0,0,0,0,0,0,0,110,5.2,8,5,16.0,7620,9,999999999,170,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,102000,0,0,293,0,0,0,0,0,0,0,100,5.2,9,6,16.0,4267,9,999999999,170,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,102000,0,0,326,0,0,0,0,0,0,0,110,6.2,10,10,11.2,1128,9,999999999,179,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,101900,0,0,332,0,0,0,0,0,0,0,120,6.7,10,10,14.4,1128,9,999999999,179,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101800,56,1001,335,2,0,2,300,0,300,800,130,7.2,10,10,9.6,975,9,999999999,170,0.0900,0,88,0.160,1.0,1.0 +1999,1,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101700,269,1413,342,43,0,43,5000,0,5000,16400,130,7.7,10,10,4.8,884,9,999999999,170,0.0900,0,88,0.160,1.0,1.0 +1999,1,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101600,457,1413,339,48,0,48,5800,0,5800,21100,130,7.2,10,10,4.0,122,9,999999999,160,0.0900,0,88,0.160,2.0,1.0 +1999,1,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101400,593,1413,343,77,0,77,9200,0,9200,34700,140,9.8,10,10,16.0,853,9,999999999,160,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101300,667,1413,345,148,0,148,17100,0,17100,62100,140,10.8,10,10,14.4,1006,9,999999999,160,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101100,673,1413,348,131,0,131,15300,0,15300,56800,140,9.8,10,10,16.0,1524,9,999999999,150,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,100800,612,1413,348,69,0,69,8400,0,8400,31900,140,10.3,10,10,16.0,1067,9,999999999,150,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,11.0,100,100600,488,1413,349,54,0,54,6500,0,6500,23900,150,10.8,10,10,3.2,240,9,999999999,139,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,100300,308,1413,355,29,0,29,3500,0,3500,12100,150,14.9,10,10,4.8,244,9,999999999,139,0.0900,0,88,0.160,4.0,1.0 +1999,1,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,100300,91,1284,352,16,4,15,1800,0,1800,5500,160,11.8,10,10,12.8,884,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,10.0,94,100400,0,0,347,0,0,0,0,0,0,0,260,17.5,10,10,6.4,690,9,999999999,129,0.0900,0,88,0.160,8.0,1.0 +1999,1,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,100600,0,0,332,0,0,0,0,0,0,0,280,10.3,10,10,16.0,1524,9,999999999,120,0.0900,0,88,0.160,1.0,1.0 +1999,1,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,100600,0,0,327,0,0,0,0,0,0,0,280,4.6,10,10,16.0,2286,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,100700,0,0,320,0,0,0,0,0,0,0,250,8.8,10,10,16.0,3353,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,100900,0,0,283,0,0,0,0,0,0,0,250,7.2,3,3,16.0,7620,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100900,0,0,264,0,0,0,0,0,0,0,240,5.7,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101000,0,0,274,0,0,0,0,0,0,0,250,4.1,3,3,16.0,77777,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101000,0,0,268,0,0,0,0,0,0,0,220,4.1,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,101000,0,0,271,0,0,0,0,0,0,0,220,4.1,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101100,0,0,271,0,0,0,0,0,0,0,270,2.1,5,5,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,101000,0,0,268,0,0,0,0,0,0,0,230,3.6,5,5,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101100,0,0,268,0,0,0,0,0,0,0,230,4.1,3,3,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101100,0,0,270,0,0,0,0,0,0,0,210,4.6,6,4,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,101200,0,0,271,0,0,0,0,0,0,0,210,5.2,3,3,16.0,77777,9,999999999,60,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101300,58,1024,272,10,162,4,1500,9500,900,1500,240,4.1,5,5,16.0,77777,9,999999999,60,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.1,79,101300,271,1413,280,170,490,75,17300,36000,10400,13900,260,4.1,4,4,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-0.6,55,101300,460,1413,289,310,675,89,31800,60600,12000,16500,240,7.2,3,3,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.1,63,101300,597,1413,291,423,732,112,43700,69800,14100,22000,230,8.2,3,3,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,101300,671,1413,291,418,585,139,43100,56600,16100,27800,230,8.2,5,5,16.0,7620,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.8,41,101200,678,1413,296,452,635,146,46400,61400,16900,29100,250,9.3,4,4,16.0,77777,9,999999999,69,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-4.4,36,101200,617,1413,292,401,682,102,41900,65900,13000,20600,270,8.2,3,3,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-3.9,39,101200,493,1413,290,310,619,93,31900,56600,12100,17500,250,8.8,3,3,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-5.0,37,101300,313,1413,287,174,531,56,17900,42300,8500,10200,250,9.3,3,3,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-6.1,35,101300,96,1307,272,30,192,17,3300,9800,2600,3100,260,9.3,0,0,16.0,77777,9,999999999,80,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-5.6,39,101500,0,0,280,0,0,0,0,0,0,0,250,6.7,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.6,41,101500,0,0,277,0,0,0,0,0,0,0,240,5.7,5,3,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101600,0,0,262,0,0,0,0,0,0,0,230,5.7,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,101600,0,0,259,0,0,0,0,0,0,0,250,6.7,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-6.1,40,101600,0,0,272,0,0,0,0,0,0,0,250,6.7,3,2,16.0,77777,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-6.1,40,101600,0,0,275,0,0,0,0,0,0,0,260,6.7,5,3,16.0,77777,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-6.1,40,101600,0,0,277,0,0,0,0,0,0,0,260,7.2,5,4,16.0,7620,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-6.1,42,101600,0,0,277,0,0,0,0,0,0,0,260,4.6,6,5,16.0,7620,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-5.6,46,101700,0,0,277,0,0,0,0,0,0,0,250,4.6,7,6,16.0,7620,9,999999999,100,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,101800,0,0,279,0,0,0,0,0,0,0,250,3.1,8,8,16.0,7620,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.1,45,101800,0,0,272,0,0,0,0,0,0,0,260,5.2,9,5,16.0,4267,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-8.9,33,101800,0,0,274,0,0,0,0,0,0,0,280,6.2,7,5,16.0,4267,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-9.4,31,101800,0,0,273,0,0,0,0,0,0,0,270,5.2,7,5,16.0,4267,9,999999999,110,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-7.8,38,101800,0,0,275,0,0,0,0,0,0,0,260,4.6,7,6,16.0,4267,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,102000,60,1024,278,9,101,5,1300,5600,900,1300,270,4.6,7,7,16.0,4267,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-8.3,33,102000,274,1413,273,144,299,85,14500,22000,10200,16100,270,3.6,3,3,16.0,7620,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102000,464,1413,279,275,425,135,28200,38500,15500,26200,230,3.1,7,6,16.0,7620,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-4.4,46,102000,601,1413,287,372,482,166,38500,46800,18500,33700,260,2.1,8,7,16.0,7620,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,101900,675,1413,287,289,133,225,31300,13500,24800,55300,230,4.6,8,6,16.0,7620,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,101800,683,1413,281,244,30,229,27300,2700,26000,84500,230,5.2,4,3,16.0,7620,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,101800,622,1413,275,258,125,203,28000,12500,22400,48700,220,5.7,0,0,16.0,77777,9,999999999,120,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.1,53,101800,498,1413,277,310,450,151,31700,41600,16900,29800,230,4.6,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,101800,318,1413,275,184,560,57,18900,44900,8700,10400,240,3.1,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101900,100,1330,269,36,238,20,4000,12100,3000,3600,210,4.6,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101900,0,0,263,0,0,0,0,0,0,0,200,4.1,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101900,0,0,277,0,0,0,0,0,0,0,200,3.1,5,5,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,102000,0,0,262,0,0,0,0,0,0,0,210,3.1,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,102000,0,0,262,0,0,0,0,0,0,0,240,3.1,0,0,16.0,77777,9,999999999,129,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,102000,0,0,265,0,0,0,0,0,0,0,240,4.1,0,0,16.0,77777,9,999999999,139,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,102000,0,0,260,0,0,0,0,0,0,0,250,2.6,0,0,16.0,77777,9,999999999,139,0.0900,0,88,0.160,0.0,1.0 +1999,1,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,102100,0,0,256,0,0,0,0,0,0,0,210,2.1,0,0,16.0,77777,9,999999999,139,0.0900,0,88,0.160,0.0,1.0 +1999,1,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,102000,0,0,253,0,0,0,0,0,0,0,190,2.6,0,0,14.4,77777,9,999999999,139,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,102100,0,0,253,0,0,0,0,0,0,0,0,0.0,0,0,12.8,77777,9,999999999,139,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102100,0,0,259,0,0,0,0,0,0,0,0,0.0,3,3,8.0,77777,9,999999999,139,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-0.6,100,102100,0,0,258,0,0,0,0,0,0,0,50,2.1,4,4,6.4,77777,9,999999999,139,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102100,0,0,273,0,0,0,0,0,0,0,50,2.1,8,8,0.3,61,9,999999999,139,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-0.6,100,102100,0,0,284,0,0,0,0,0,0,0,60,1.5,10,10,0.3,61,9,999999999,150,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102200,0,0,287,0,0,0,0,0,0,0,70,2.1,10,10,0.3,30,9,999999999,150,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102200,62,1048,290,8,54,6,1000,2600,900,1200,30,2.6,10,10,0.3,30,9,999999999,150,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,102300,277,1413,296,126,156,95,13500,12000,11100,20400,30,2.6,10,10,0.4,15,9,999999999,150,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,3.3,100,102300,467,1413,296,165,37,153,18100,3500,16900,39500,70,2.6,9,9,0.3,61,9,999999999,160,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102200,605,1413,304,205,31,192,23000,2600,21900,70100,110,4.1,9,8,11.2,3962,9,999999999,160,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,102100,680,1413,305,357,272,225,37700,28000,24200,51700,110,4.6,6,6,16.0,7620,9,999999999,160,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.0,80,102100,687,1413,329,178,6,176,20500,500,20300,71600,100,4.1,10,10,16.0,1036,9,999999999,170,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,102100,627,1413,329,69,0,69,8400,0,8400,32100,90,5.2,10,10,16.0,1097,9,999999999,170,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,102000,503,1413,329,125,6,123,14200,400,14100,47000,90,5.7,10,10,16.0,914,9,999999999,170,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.6,86,102000,323,1413,327,49,0,49,5700,0,5700,19400,80,5.2,10,10,16.0,884,9,999999999,170,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,102100,105,1354,328,11,0,11,1300,0,1300,4300,80,3.1,10,10,9.6,823,9,999999999,179,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,102100,0,0,325,0,0,0,0,0,0,0,70,5.2,10,10,14.4,762,9,999999999,179,0.0910,0,88,0.160,1.0,1.0 +1999,1,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,102000,0,0,325,0,0,0,0,0,0,0,80,5.2,10,10,14.4,1250,9,999999999,179,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,102100,0,0,324,0,0,0,0,0,0,0,40,5.2,10,10,14.4,732,9,999999999,189,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,102100,0,0,322,0,0,0,0,0,0,0,60,3.6,10,10,14.4,701,9,999999999,189,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,102100,0,0,319,0,0,0,0,0,0,0,50,4.6,10,10,16.0,792,9,999999999,189,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,102200,0,0,317,0,0,0,0,0,0,0,20,3.6,10,10,14.4,610,9,999999999,189,0.0910,0,88,0.160,0.0,1.0 +1999,1,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102200,0,0,316,0,0,0,0,0,0,0,30,4.6,10,10,12.8,488,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102100,0,0,316,0,0,0,0,0,0,0,30,4.6,10,10,14.4,427,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102200,0,0,316,0,0,0,0,0,0,0,40,5.2,10,10,16.0,427,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102300,0,0,313,0,0,0,0,0,0,0,40,5.2,10,10,6.4,213,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,102300,0,0,310,0,0,0,0,0,0,0,30,4.1,10,10,12.8,213,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,102400,0,0,310,0,0,0,0,0,0,0,40,4.1,10,10,6.4,213,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,102400,0,0,310,0,0,0,0,0,0,0,50,4.6,10,10,9.6,213,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,102500,0,0,310,0,0,0,0,0,0,0,40,5.7,10,10,8.0,213,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102600,63,1047,313,2,0,2,300,0,300,800,40,4.6,10,10,14.4,213,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102600,281,1412,312,25,0,25,3000,0,3000,10400,40,5.7,10,10,12.8,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,102700,471,1412,315,82,0,82,9500,0,9500,33600,40,4.6,10,10,14.4,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102700,609,1412,316,70,0,70,8500,0,8500,32200,40,4.1,10,10,12.8,366,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102700,684,1412,318,92,0,92,11100,0,11100,42700,20,4.6,10,10,16.0,366,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102700,692,1412,316,83,0,83,10100,0,10100,39200,30,4.1,10,10,11.2,366,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,102700,632,1412,319,109,0,109,12800,0,12800,47700,50,4.1,10,10,8.0,366,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102700,508,1412,319,65,0,65,7800,0,7800,28400,70,4.6,10,10,9.6,366,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,102800,329,1412,321,44,0,44,5200,0,5200,17800,90,4.6,10,10,16.0,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102800,109,1377,318,24,27,22,2700,1400,2600,4600,80,8.8,10,10,16.0,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102800,0,0,318,0,0,0,0,0,0,0,70,7.2,10,10,16.0,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102800,0,0,318,0,0,0,0,0,0,0,80,8.2,10,10,16.0,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,102900,0,0,319,0,0,0,0,0,0,0,70,7.2,10,10,14.4,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102900,0,0,319,0,0,0,0,0,0,0,60,6.2,10,10,9.6,244,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102900,0,0,319,0,0,0,0,0,0,0,50,5.7,10,10,11.2,183,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102900,0,0,319,0,0,0,0,0,0,0,70,6.2,10,10,2.4,122,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102900,0,0,319,0,0,0,0,0,0,0,80,6.2,10,10,3.2,122,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102800,0,0,319,0,0,0,0,0,0,0,70,7.2,10,10,16.0,152,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,102900,0,0,322,0,0,0,0,0,0,0,50,6.2,10,10,9.6,213,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102800,0,0,319,0,0,0,0,0,0,0,50,5.2,10,10,3.2,152,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,102800,0,0,319,0,0,0,0,0,0,0,50,4.1,10,10,2.4,122,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,102700,0,0,317,0,0,0,0,0,0,0,60,5.2,10,10,1.6,122,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,102700,0,0,317,0,0,0,0,0,0,0,40,4.6,10,10,1.6,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,102700,0,0,317,0,0,0,0,0,0,0,60,4.1,10,10,1.2,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,102700,66,1071,317,0,0,0,0,0,0,0,50,4.6,10,10,1.2,122,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,102700,284,1412,320,33,0,33,3900,0,3900,13300,50,2.1,10,10,0.8,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102700,475,1412,323,55,0,55,6600,0,6600,24100,50,3.6,10,10,0.8,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102700,613,1412,326,154,0,154,17600,0,17600,61200,40,3.6,10,10,0.3,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,102500,689,1412,330,111,0,111,13200,0,13200,50200,50,3.6,10,10,0.3,61,9,999999999,220,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,102500,697,1412,332,95,0,95,11400,0,11400,44200,50,2.1,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,102400,637,1412,339,69,0,69,8400,0,8400,32300,80,3.1,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,102300,513,1412,343,93,0,93,10800,0,10800,38500,80,4.1,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,102300,334,1412,343,59,0,59,6800,0,6800,22700,90,3.1,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,102200,114,1412,339,12,0,12,1400,0,1400,4600,100,3.1,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,102100,0,12,343,0,0,0,0,0,0,0,120,3.6,10,10,0.3,30,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,102100,0,0,339,0,0,0,0,0,0,0,140,1.5,10,10,0.0,61,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,102100,0,0,326,0,0,0,0,0,0,0,150,3.6,8,8,9.6,122,9,999999999,209,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,102000,0,0,314,0,0,0,0,0,0,0,150,3.6,5,5,12.8,77777,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101900,0,0,345,0,0,0,0,0,0,0,150,5.7,10,10,11.2,1067,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101800,0,0,345,0,0,0,0,0,0,0,160,6.7,10,10,9.6,122,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101700,0,0,343,0,0,0,0,0,0,0,170,7.2,10,10,0.4,91,9,999999999,200,0.0910,0,88,0.160,0.0,1.0 +1999,1,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101500,0,0,343,0,0,0,0,0,0,0,180,9.8,10,10,0.4,91,9,999999999,200,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,11.0,100,101500,0,0,349,0,0,0,0,0,0,0,180,10.3,10,10,4.0,120,9,999999999,200,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,11.0,100,101400,0,0,349,0,0,0,0,0,0,0,180,11.8,10,10,11.3,840,9,999999999,200,0.0920,0,88,0.160,1.0,1.0 +1999,1,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101300,0,0,343,0,0,0,0,0,0,0,180,10.3,10,10,1.6,91,9,999999999,189,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101200,0,0,343,0,0,0,0,0,0,0,180,8.8,10,10,5.6,91,9,999999999,189,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,101200,0,0,349,0,0,0,0,0,0,0,180,13.4,10,10,1.6,91,9,999999999,189,0.0920,0,88,0.160,2.0,1.0 +1999,1,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,101100,0,0,349,0,0,0,0,0,0,0,180,12.4,10,10,1.6,91,9,999999999,189,0.0920,0,88,0.160,3.0,1.0 +1999,1,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101200,68,1094,346,0,0,0,0,0,0,0,180,10.8,10,10,0.3,61,9,999999999,189,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,287,1412,339,50,0,50,5700,0,5700,18900,190,8.8,10,10,0.3,61,9,999999999,179,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101000,479,1412,346,75,0,75,8800,0,8800,31400,190,8.8,10,10,2.0,61,9,999999999,179,0.0920,0,88,0.160,4.0,1.0 +1999,1,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101100,617,1412,346,77,0,77,9300,0,9300,35200,190,8.8,10,10,2.4,61,9,999999999,179,0.0920,0,88,0.160,3.0,1.0 +1999,1,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,101000,694,1412,355,117,0,117,13800,0,13800,52600,310,1.5,10,10,14.4,701,9,999999999,170,0.0920,0,88,0.160,6.0,1.0 +1999,1,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,100900,702,1412,355,89,0,89,10800,0,10800,41800,0,0.0,10,10,14.4,1524,9,999999999,170,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100900,642,1412,346,75,0,75,9100,0,9100,34900,200,2.1,10,10,4.0,1829,9,999999999,170,0.0920,0,88,0.160,1.0,1.0 +1999,1,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,11.0,100,100900,518,1412,349,55,0,55,6700,0,6700,24700,200,2.1,10,10,4.0,1800,9,999999999,170,0.0920,0,88,0.160,2.0,1.0 +1999,1,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101000,339,1412,339,34,0,34,4100,0,4100,14300,240,4.6,10,10,2.4,671,9,999999999,160,0.0920,0,88,0.160,3.0,1.0 +1999,1,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,100900,119,1412,339,12,0,12,1400,0,1400,4600,190,3.6,10,10,8.0,2286,9,999999999,160,0.0920,0,88,0.160,1.0,1.0 +1999,1,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.0,9.0,100,100900,0,35,337,0,0,0,0,0,0,0,190,3.6,10,10,8.0,2100,9,999999999,160,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,101100,0,0,339,0,0,0,0,0,0,0,320,9.3,10,10,16.0,579,9,999999999,150,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.0,82,101100,0,0,339,0,0,0,0,0,0,0,320,9.3,10,10,16.1,570,9,999999999,150,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.7,68,101200,0,0,311,0,0,0,0,0,0,0,310,10.8,9,9,16.0,3962,9,999999999,150,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,101300,0,0,302,0,0,0,0,0,0,0,310,10.3,8,8,16.0,914,9,999999999,139,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,101300,0,0,285,0,0,0,0,0,0,0,310,9.3,4,4,16.0,77777,9,999999999,139,0.0920,0,88,0.160,0.0,1.0 +1999,1,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101400,0,0,280,0,0,0,0,0,0,0,290,5.7,4,4,16.0,77777,9,999999999,139,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,101400,0,0,277,0,0,0,0,0,0,0,310,6.7,4,4,16.0,77777,9,999999999,129,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101600,0,0,273,0,0,0,0,0,0,0,310,9.8,3,3,16.0,77777,9,999999999,129,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101600,0,0,263,0,0,0,0,0,0,0,310,6.7,2,1,16.0,77777,9,999999999,129,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,101700,0,0,272,0,0,0,0,0,0,0,300,7.2,5,5,16.0,77777,9,999999999,120,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,101800,0,0,275,0,0,0,0,0,0,0,300,7.7,6,6,16.0,77777,9,999999999,120,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,101900,0,0,270,0,0,0,0,0,0,0,310,8.2,5,4,16.0,77777,9,999999999,120,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,101900,0,0,278,0,0,0,0,0,0,0,300,7.7,7,7,16.0,77777,9,999999999,120,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,101900,70,1117,280,0,0,0,0,0,0,0,300,7.7,9,7,16.0,3962,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,102000,291,1411,280,58,0,58,6600,0,6600,21300,310,7.2,9,7,16.0,3962,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102000,483,1411,282,96,0,96,11100,0,11100,38400,300,6.2,9,7,16.0,4267,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,102000,622,1411,280,147,0,147,16900,0,16900,59700,320,5.2,9,6,16.0,4267,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,101900,698,1411,300,117,0,117,13900,0,13900,52700,320,3.6,10,10,16.0,1128,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101900,707,1411,296,89,0,89,10800,0,10800,42000,310,4.6,10,10,11.2,671,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.0,1.0,93,102000,648,1411,296,75,0,75,9100,0,9100,35000,260,5.7,10,10,3.2,360,9,999999999,110,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102000,524,1411,292,60,0,60,7200,0,7200,26800,290,3.1,10,10,1.6,183,9,999999999,100,0.0920,0,88,0.160,1.0,1.0 +1999,1,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102100,344,1411,290,49,0,49,5700,0,5700,19700,260,3.1,10,10,1.6,183,9,999999999,100,0.0920,0,88,0.160,1.0,1.0 +1999,1,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.0,1.0,100,102100,124,1411,292,25,14,24,2800,900,2700,5900,240,3.6,10,10,8.0,360,9,999999999,100,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102200,0,59,282,0,0,0,0,0,0,0,270,4.6,8,8,16.0,1280,9,999999999,100,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102300,0,0,275,0,0,0,0,0,0,0,270,5.7,6,6,16.0,2896,9,999999999,100,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102400,0,0,272,0,0,0,0,0,0,0,270,5.2,5,5,16.0,77777,9,999999999,100,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,102400,0,0,273,0,0,0,0,0,0,0,300,6.7,5,5,16.0,77777,9,999999999,100,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,102500,0,0,261,0,0,0,0,0,0,0,300,5.7,2,2,16.0,77777,9,999999999,89,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,102500,0,0,263,0,0,0,0,0,0,0,310,6.7,3,3,16.0,77777,9,999999999,89,0.0920,0,88,0.160,0.0,1.0 +1999,1,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,102600,0,0,248,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,89,0.0920,0,88,0.160,0.0,1.0 +1999,1,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.0,63,102700,0,0,246,0,0,0,0,0,0,0,320,6.7,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,102800,0,0,242,0,0,0,0,0,0,0,310,6.7,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,102800,0,0,239,0,0,0,0,0,0,0,310,5.2,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,102900,0,0,239,0,0,0,0,0,0,0,320,6.7,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.2,60,102900,0,0,238,0,0,0,0,0,0,0,310,6.2,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.2,60,103000,0,0,238,0,0,0,0,0,0,0,320,5.2,0,0,16.0,77777,9,999999999,80,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,103000,0,0,240,0,0,0,0,0,0,0,10,2.1,0,0,16.0,77777,9,999999999,80,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,103000,73,1117,239,0,0,0,0,0,0,0,70,1.5,0,0,16.0,77777,9,999999999,80,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.7,54,103100,295,1411,245,181,537,68,18200,41100,9600,11600,0,0.0,0,0,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.1,51,103100,487,1411,262,335,710,89,34600,64900,12100,16800,310,3.6,3,3,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,103100,626,1411,266,441,762,102,46200,73800,13300,20800,310,3.6,3,3,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.0,50,103000,703,1411,269,504,682,163,51600,66000,18600,32500,310,3.1,3,3,16.0,77777,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,102900,712,1411,278,226,60,196,24900,6000,21900,60100,300,5.2,4,4,16.0,1128,9,999999999,89,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,102800,653,1411,276,426,487,199,43700,48000,21400,42000,280,5.7,5,5,16.0,77777,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102800,529,1411,287,110,0,110,12700,0,12700,44400,260,6.2,8,8,16.0,1189,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,102800,350,1411,286,153,186,107,16000,15500,12200,21500,270,6.7,8,8,16.0,1219,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102700,129,1411,272,52,184,35,5300,9000,4500,6400,280,4.6,3,3,16.0,7620,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.3,62,102800,0,82,256,0,0,0,0,0,0,0,270,3.6,0,0,16.0,7620,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,102800,0,0,273,0,0,0,0,0,0,0,250,3.6,5,5,16.0,77777,9,999999999,100,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,102800,0,0,259,0,0,0,0,0,0,0,230,4.6,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.1,87,102700,0,0,250,0,0,0,0,0,0,0,240,3.6,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.1,81,102700,0,0,254,0,0,0,0,0,0,0,240,2.6,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.2,80,102700,0,0,249,0,0,0,0,0,0,0,230,3.6,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.160,0.0,1.0 +1999,1,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,102700,0,0,252,0,0,0,0,0,0,0,220,4.1,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,102700,0,0,252,0,0,0,0,0,0,0,250,3.6,0,0,14.4,77777,9,999999999,120,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,102600,0,0,257,0,0,0,0,0,0,0,230,4.6,1,1,14.4,77777,9,999999999,120,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,102600,0,0,252,0,0,0,0,0,0,0,260,3.6,0,0,12.8,77777,9,999999999,120,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.7,91,102500,0,0,245,0,0,0,0,0,0,0,250,3.1,0,0,12.8,77777,9,999999999,120,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.7,87,102500,0,0,247,0,0,0,0,0,0,0,250,3.1,0,0,12.8,77777,9,999999999,120,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.3,76,102500,0,0,245,0,0,0,0,0,0,0,270,2.1,0,0,14.4,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.2,88,102500,0,0,244,0,0,0,0,0,0,0,260,2.6,0,0,11.2,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,102500,75,1140,250,0,0,0,0,0,0,0,310,3.1,0,0,12.8,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,102400,299,1411,259,180,489,76,18600,37600,10600,14000,340,2.1,0,0,16.0,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,102400,491,1411,262,321,629,101,32900,57200,12800,18600,300,3.1,0,0,16.0,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,102200,631,1411,275,435,561,183,44900,54900,20200,37900,220,2.1,3,3,16.0,77777,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,102100,708,1411,285,197,18,188,22500,1500,21800,76400,170,2.6,8,7,16.0,4267,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,101800,718,1411,283,208,12,202,23700,1000,23200,80800,170,3.1,6,6,16.0,4267,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,101800,659,1411,279,305,190,216,33100,19200,24000,52700,180,3.6,5,4,16.0,4267,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,101600,535,1411,282,313,422,152,32200,39900,17000,30100,160,4.1,4,4,16.0,7620,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101600,355,1411,294,199,379,103,20300,31300,12400,19500,180,2.6,8,8,16.0,2286,9,999999999,129,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101500,134,1411,281,13,0,13,1600,0,1600,5100,110,3.1,6,5,16.0,4267,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101500,1,106,291,0,0,0,0,0,0,0,60,3.1,8,8,16.0,1676,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101500,0,0,284,0,0,0,0,0,0,0,70,2.1,9,7,16.0,1524,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,101500,0,0,284,0,0,0,0,0,0,0,70,2.1,9,7,16.0,7620,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101400,0,0,306,0,0,0,0,0,0,0,50,2.6,10,10,16.0,1676,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101400,0,0,306,0,0,0,0,0,0,0,30,2.6,10,10,16.0,335,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,101300,0,0,305,0,0,0,0,0,0,0,60,2.1,10,10,14.4,396,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,101300,0,0,305,0,0,0,0,0,0,0,60,3.6,10,10,16.0,1676,9,999999999,139,0.0930,0,88,0.160,0.0,1.0 +1999,1,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101300,0,0,286,0,0,0,0,0,0,0,30,3.1,9,8,14.4,427,9,999999999,139,0.0940,0,88,0.160,1.0,1.0 +1999,1,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101300,0,0,292,0,0,0,0,0,0,0,30,2.6,10,9,12.8,427,9,999999999,139,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101300,0,0,300,0,0,0,0,0,0,0,30,1.5,10,10,12.8,427,9,999999999,139,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101300,0,0,303,0,0,0,0,0,0,0,0,0.0,10,10,14.4,427,9,999999999,150,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101400,0,0,303,0,0,0,0,0,0,0,50,2.6,10,10,16.0,427,9,999999999,150,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,101400,0,0,302,0,0,0,0,0,0,0,60,3.1,10,10,16.0,427,9,999999999,150,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,101400,0,0,302,0,0,0,0,0,0,0,60,2.6,10,10,16.0,427,9,999999999,150,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,101500,78,1164,305,0,0,0,0,0,0,0,70,2.1,10,10,14.4,427,9,999999999,139,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,101600,303,1410,306,41,0,41,4800,0,4800,16400,30,4.1,10,10,11.2,366,9,999999999,139,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,101600,496,1410,306,55,0,55,6600,0,6600,24400,30,3.6,10,10,11.2,305,9,999999999,139,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,101600,636,1410,309,70,0,70,8500,0,8500,32700,40,3.1,10,10,9.6,305,9,999999999,129,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101500,714,1410,312,215,24,203,24500,2000,23500,80800,70,2.6,10,10,6.4,244,9,999999999,129,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101400,723,1410,314,155,0,155,18000,0,18000,67100,80,2.1,10,10,9.6,366,9,999999999,129,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101400,664,1410,315,288,143,221,31300,14500,24400,54000,20,3.1,10,10,11.2,366,9,999999999,120,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,101400,540,1410,309,192,59,170,21100,5700,18900,46100,30,4.1,10,10,11.2,305,9,999999999,120,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,101500,361,1410,309,75,0,75,8500,0,8500,28200,50,3.6,10,10,9.6,244,9,999999999,120,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,101500,140,1410,309,17,0,17,2000,0,2000,6400,40,3.6,10,10,8.0,244,9,999999999,110,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,101600,1,153,306,0,0,0,0,0,0,0,50,4.1,10,10,8.0,183,9,999999999,110,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,101600,0,0,309,0,0,0,0,0,0,0,60,3.1,10,10,8.0,183,9,999999999,110,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,101700,0,0,304,0,0,0,0,0,0,0,60,3.1,10,10,8.0,183,9,999999999,100,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,101700,0,0,304,0,0,0,0,0,0,0,40,2.6,10,10,8.0,183,9,999999999,100,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,101800,0,0,301,0,0,0,0,0,0,0,60,3.1,10,10,8.0,122,9,999999999,100,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101800,0,0,300,0,0,0,0,0,0,0,60,3.1,10,10,11.2,122,9,999999999,89,0.0940,0,88,0.160,0.0,1.0 +1999,1,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101800,0,0,297,0,0,0,0,0,0,0,70,2.6,10,10,12.8,213,9,999999999,89,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101800,0,0,297,0,0,0,0,0,0,0,60,2.6,10,10,12.8,213,9,999999999,89,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101900,0,0,298,0,0,0,0,0,0,0,20,3.1,10,10,3.2,213,9,999999999,80,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101900,0,0,298,0,0,0,0,0,0,0,340,2.1,10,10,9.6,152,9,999999999,80,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,102000,0,0,298,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1676,9,999999999,80,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,102100,0,0,298,0,0,0,0,0,0,0,20,1.5,10,10,11.2,213,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,102200,0,0,283,0,0,0,0,0,0,0,40,2.6,8,8,9.6,2134,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102300,0,0,278,0,0,0,0,0,0,0,50,2.1,8,8,14.4,305,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102400,81,1187,268,0,0,0,0,0,0,0,50,2.6,5,5,12.8,7620,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.0,-1.0,86,102500,307,1410,276,106,60,92,11500,5000,10400,22500,350,6.2,8,8,9.7,840,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.2,77,102600,500,1410,275,102,0,102,11700,0,11700,40900,360,7.7,8,8,14.4,1158,9,999999999,69,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.0,63,102700,641,1410,270,447,579,183,46300,56900,20300,38000,330,5.7,8,8,16.0,945,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.6,53,102700,719,1410,266,504,772,109,53200,76600,14000,23700,350,5.7,5,5,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.1,51,102700,729,1410,262,483,539,203,50300,54100,22200,44300,360,5.7,3,3,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,102700,670,1410,264,455,725,109,47700,71000,13800,22800,360,5.7,3,3,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-7.2,44,102700,546,1410,252,352,651,99,36500,61100,12700,19100,350,7.2,1,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.2,48,102800,366,1410,248,205,499,75,20900,41700,10000,13400,10,5.2,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,102800,145,1410,245,62,261,35,6400,13700,5000,6300,10,4.6,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,102800,2,176,242,0,0,0,0,0,0,0,50,3.6,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,102900,0,0,253,0,0,0,0,0,0,0,20,2.6,4,3,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,102900,0,0,240,0,0,0,0,0,0,0,30,3.6,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.2,60,103000,0,0,238,0,0,0,0,0,0,0,20,3.6,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.2,63,103000,0,0,236,0,0,0,0,0,0,0,30,3.1,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-7.8,62,103000,0,0,234,0,0,0,0,0,0,0,30,2.6,0,0,16.0,77777,9,999999999,60,0.0940,0,88,0.160,0.0,1.0 +1999,1,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-7.2,72,103000,0,0,230,0,0,0,0,0,0,0,40,2.6,0,0,16.0,77777,9,999999999,50,0.0940,0,88,0.160,0.0,1.0 +1999,1,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.2,69,103000,0,0,232,0,0,0,0,0,0,0,360,3.1,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-9.4,59,103000,0,0,240,0,0,0,0,0,0,0,350,4.1,4,4,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.9,65,103000,0,0,237,0,0,0,0,0,0,0,360,3.6,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.9,65,103000,0,0,239,0,0,0,0,0,0,0,340,2.1,4,4,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-8.3,71,103000,0,0,226,0,0,0,0,0,0,0,30,2.1,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-8.3,75,103100,0,0,224,0,0,0,0,0,0,0,20,2.6,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-7.8,79,103100,0,0,224,0,0,0,0,0,0,0,50,2.6,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-8.3,71,103200,85,1210,236,0,0,0,0,0,0,0,40,2.1,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-8.3,65,103200,311,1410,239,194,572,67,19600,44900,9700,11700,30,3.6,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.2,63,103200,505,1410,246,341,684,94,35100,63000,12400,17800,310,4.6,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-8.3,49,103200,646,1410,251,453,755,106,47500,73500,13600,21800,340,4.1,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,103200,724,1410,255,529,833,99,54700,81500,12700,20400,350,4.1,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.9,41,103100,734,1410,261,500,659,156,51600,64500,17900,32400,360,6.2,5,5,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-7.8,42,103000,675,1410,266,450,577,172,47100,57400,19500,35900,350,4.6,5,5,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.7,46,103100,552,1410,277,204,76,174,22300,7300,19500,47500,320,5.7,8,8,16.0,1981,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,103100,372,1410,266,105,28,98,11600,2500,10900,25500,300,6.2,4,4,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,103100,150,1410,279,60,166,42,6200,8400,5400,7900,310,5.7,8,8,16.0,1829,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,103300,2,200,263,0,0,0,0,0,0,0,20,9.8,5,5,16.0,1219,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.1,66,103400,0,0,247,0,0,0,0,0,0,0,360,7.2,2,2,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-8.9,54,103500,0,0,245,0,0,0,0,0,0,0,10,9.8,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.9,56,103600,0,0,233,0,0,0,0,0,0,0,10,6.2,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,103700,0,0,230,0,0,0,0,0,0,0,360,8.2,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.0,59,103700,0,0,226,0,0,0,0,0,0,0,10,8.2,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.6,58,103800,0,0,234,0,0,0,0,0,0,0,20,9.8,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-16.7,35,103800,0,0,217,0,0,0,0,0,0,0,10,12.4,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-21.1,25,104000,0,0,209,0,0,0,0,0,0,0,360,9.8,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-21.1,27,104000,0,0,207,0,0,0,0,0,0,0,10,8.8,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-21.1,28,104100,0,0,206,0,0,0,0,0,0,0,10,8.2,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-20.0,33,104200,0,0,205,0,0,0,0,0,0,0,20,7.2,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-20.0,34,104200,0,0,203,0,0,0,0,0,0,0,20,5.7,0,0,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-19.4,38,104300,0,0,211,0,0,0,0,0,0,0,20,7.7,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-19.4,36,104400,88,1233,213,0,0,0,0,0,0,0,20,7.7,3,3,16.0,77777,9,999999999,50,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-20.0,33,104400,316,1409,214,193,558,68,19600,44100,9700,11900,20,8.2,3,3,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-19.4,32,104500,510,1409,218,361,733,94,37200,67700,12600,17800,30,5.7,3,3,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-20.6,26,104500,651,1409,220,453,737,111,47300,71700,14000,22800,30,4.6,3,3,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-18.9,26,104500,730,1409,228,528,826,99,54700,80900,12700,20500,10,6.2,3,3,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-20.0,23,104300,740,1409,217,518,617,193,54400,62200,21600,42100,20,5.2,0,0,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-19.4,21,104300,681,1409,223,490,814,95,50500,79000,12200,19000,20,4.1,0,0,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-20.0,19,104200,557,1409,224,380,757,79,38900,71300,10600,15100,40,4.6,0,0,16.0,77777,9,999999999,60,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-20.0,19,104200,378,1409,226,231,648,57,24100,55600,9200,10800,0,0.0,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-18.9,23,104100,155,1409,224,68,358,28,6900,21100,4600,5000,360,2.1,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-17.8,25,104100,3,223,225,0,0,0,0,0,0,0,30,2.1,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-18.3,25,104100,0,0,222,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.8,42,104000,0,0,227,0,0,0,0,0,0,0,230,3.6,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,104000,0,0,224,0,0,0,0,0,0,0,240,3.6,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.9,-11.5,46,103900,0,0,228,0,0,0,0,0,0,0,260,3.8,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.1,-10.3,40,103800,0,0,232,0,0,0,0,0,0,0,260,4.1,0,0,16.0,77777,9,999999999,69,0.0950,0,88,0.160,0.0,1.0 +1999,1,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.2,-9.1,38,103800,0,0,241,0,0,0,0,0,0,0,250,4.3,1,1,16.0,77777,9,999999999,80,0.0950,0,88,0.160,0.0,1.0 +1995,2,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.3,-7.9,68,100300,0,0,240,0,0,0,0,0,0,0,260,4.5,0,0,24.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.5,-6.7,62,100300,0,0,244,0,0,0,0,0,0,0,270,4.7,0,0,24.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.3,-5.5,56,100300,0,0,248,0,0,0,0,0,0,0,270,5.0,0,0,24.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,100300,0,0,263,0,0,0,0,0,0,0,270,5.2,3,3,32.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,100300,0,0,261,0,0,0,0,0,0,0,260,4.6,2,2,32.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,100300,0,0,263,0,0,0,0,0,0,0,250,5.2,4,3,32.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,100300,0,0,271,0,0,0,0,0,0,0,250,7.2,7,6,32.0,7620,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,100300,91,1233,267,21,62,17,2400,2500,2200,280,260,6.2,8,3,24.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,100400,320,1409,281,138,344,60,14800,27400,8500,1070,280,6.7,7,7,24.0,2896,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,100400,515,1409,290,231,163,171,24900,15700,19200,3940,270,7.2,8,8,20.8,3048,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,100300,656,1409,288,405,368,234,42600,37500,25100,5410,280,5.7,5,5,19.2,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,100300,735,1409,308,250,201,146,27700,21100,16700,3150,280,6.2,8,8,19.2,3658,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,100200,745,1409,304,398,251,265,43100,25800,29300,6750,270,5.7,7,7,19.2,3658,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.2,46,100100,687,1409,305,262,106,211,28900,10500,23700,6230,260,6.2,9,8,20.8,3962,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,100000,563,1409,310,254,74,224,27700,7200,24800,5750,230,4.1,10,9,20.8,3962,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,100000,383,1409,293,164,71,144,17800,6400,16100,3420,250,4.6,10,6,20.8,6706,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.7,52,100100,161,1409,316,26,0,26,3000,0,3000,950,260,6.2,10,10,19.2,2591,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,100200,4,270,317,0,0,0,0,0,0,0,280,7.2,10,10,19.2,1219,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,100200,0,0,293,0,0,0,0,0,0,0,270,7.2,10,7,19.2,2743,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,100200,0,0,311,0,0,0,0,0,0,0,270,5.7,10,10,19.2,1829,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,100200,0,0,311,0,0,0,0,0,0,0,280,4.6,10,10,17.6,1494,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,100200,0,0,293,0,0,0,0,0,0,0,280,4.6,8,8,17.6,1463,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,100200,0,0,283,0,0,0,0,0,0,0,280,4.6,6,6,17.6,2438,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,100200,0,0,290,0,0,0,0,0,0,0,270,4.6,8,8,17.6,4267,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +1995,2,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,100200,0,0,281,0,0,0,0,0,0,0,270,4.1,6,6,17.6,4267,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,100200,0,0,273,0,0,0,0,0,0,0,270,3.6,4,4,19.2,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,100300,0,0,289,0,0,0,0,0,0,0,270,4.1,8,8,19.2,1981,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,100300,0,0,306,0,0,0,0,0,0,0,290,3.6,10,10,20.8,1981,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,100200,0,0,306,0,0,0,0,0,0,0,320,3.6,10,10,24.0,1676,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,100300,0,0,282,0,0,0,0,0,0,0,310,5.7,7,7,32.0,1829,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.1,45,100400,0,0,268,0,0,0,0,0,0,0,320,6.7,5,3,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.0,50,100500,95,1256,267,31,115,22,3300,5200,2900,390,340,4.6,7,2,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.0,50,100500,325,1408,269,150,358,68,15900,28700,9300,1230,310,4.6,8,3,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-6.1,42,100500,520,1408,270,299,499,114,31600,47000,14200,2180,320,6.7,7,2,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-6.7,38,100500,662,1408,274,426,585,151,45200,58000,17900,3090,320,6.2,8,3,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-6.7,37,100500,741,1408,270,501,804,78,53500,79800,11400,1800,320,7.7,4,1,32.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-8.3,31,100500,751,1408,271,498,789,77,53400,78500,11400,1800,340,6.2,3,1,32.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-13.9,20,100500,693,1408,261,463,815,62,48700,79300,9600,1470,340,5.7,1,1,32.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-16.1,17,100600,569,1408,251,387,821,55,40800,77900,9200,1260,360,6.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-17.2,16,100600,389,1408,248,237,704,43,25000,62000,7800,910,330,6.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-17.2,18,100800,166,1408,242,76,425,26,7700,27900,4400,490,320,5.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-18.3,18,100900,5,293,237,0,32,0,0,0,0,0,340,7.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-19.4,17,101000,0,0,234,0,0,0,0,0,0,0,340,7.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-18.9,20,101100,0,0,229,0,0,0,0,0,0,0,350,7.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-16.1,28,101200,0,0,228,0,0,0,0,0,0,0,10,5.2,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,101300,0,0,227,0,0,0,0,0,0,0,10,4.1,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.6,32,101400,0,0,225,0,0,0,0,0,0,0,20,4.6,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.0,39,101400,0,0,227,0,0,0,0,0,0,0,360,5.2,2,2,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-13.9,46,101400,0,0,226,0,0,0,0,0,0,0,360,7.7,7,2,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.9,48,101500,0,0,230,0,0,0,0,0,0,0,350,5.2,9,5,40.0,7620,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-13.9,50,101600,0,0,223,0,0,0,0,0,0,0,350,6.2,9,2,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,101600,0,0,216,0,0,0,0,0,0,0,10,4.6,3,1,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,101700,0,0,211,0,0,0,0,0,0,0,10,4.1,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-14.4,55,101800,0,0,210,0,0,0,0,0,0,0,10,5.7,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-14.4,55,101900,0,0,210,0,0,0,0,0,0,0,40,4.1,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,102000,99,1279,211,36,225,19,3800,11600,2900,350,20,4.6,0,0,40.0,77777,9,999999999,89,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-14.4,48,102100,329,1408,215,184,595,45,18900,49600,7300,870,10,5.2,0,0,40.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-14.4,43,102000,525,1408,219,342,753,61,35900,70800,9400,1270,20,5.7,0,0,40.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-13.9,38,102100,667,1408,226,465,827,73,49400,80900,10900,1610,320,3.1,0,0,40.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-14.4,34,101900,746,1408,228,535,859,79,55900,84100,11200,1660,60,2.6,0,0,40.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-14.4,30,101900,757,1408,233,544,862,80,56800,84500,11200,1690,360,2.6,0,0,32.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-14.4,30,101800,698,1408,243,431,570,148,46200,57100,17800,3080,230,2.1,3,3,32.0,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-12.8,38,101900,575,1408,245,351,603,104,36400,57200,12900,2030,220,4.6,7,5,24.0,7620,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.1,46,101800,395,1408,254,95,12,91,10700,600,10500,3380,180,3.6,8,8,24.0,7620,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,101800,171,1408,247,42,64,34,4600,4000,4100,710,200,4.6,7,7,24.0,7620,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-10.6,51,101800,6,317,245,0,6,0,0,0,0,0,170,3.6,8,6,24.0,7620,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,101800,0,0,238,0,0,0,0,0,0,0,150,3.1,7,2,32.0,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,101700,0,0,240,0,0,0,0,0,0,0,120,3.6,8,3,32.0,77777,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-8.3,57,101700,0,0,254,0,0,0,0,0,0,0,130,3.6,10,7,32.0,3962,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,101700,0,0,275,0,0,0,0,0,0,0,130,3.6,10,10,32.0,2743,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-5.6,66,101500,0,0,278,0,0,0,0,0,0,0,150,4.1,10,10,32.0,732,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +1995,2,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.3,80,101400,0,0,281,0,0,0,0,0,0,0,140,3.1,10,10,6.4,640,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +1995,2,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-0.6,100,101400,0,0,284,0,0,0,0,0,0,0,110,2.1,10,10,1.6,274,9,999999999,120,0.0980,0,88,0.150,1.0,1.0 +1995,2,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-1.1,100,101200,0,0,281,0,0,0,0,0,0,0,50,2.6,10,10,0.8,152,9,999999999,129,0.0980,0,88,0.150,1.0,1.0 +1995,2,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-1.7,95,101100,0,0,280,0,0,0,0,0,0,0,30,3.1,10,10,0.8,152,9,999999999,129,0.0980,0,88,0.150,1.0,1.0 +1995,2,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-1.1,100,100800,0,0,281,0,0,0,0,0,0,0,60,3.1,10,10,0.8,152,9,999999999,129,0.0980,0,88,0.150,1.0,1.0 +1995,2,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,100500,0,0,287,0,0,0,0,0,0,0,100,5.2,10,10,0.6,122,9,999999999,129,0.0980,0,88,0.150,3.0,1.0 +1995,2,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100300,0,0,289,0,0,0,0,0,0,0,90,6.2,10,10,0.4,91,9,999999999,129,0.0980,0,88,0.150,3.0,1.0 +1995,2,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100100,0,0,289,0,0,0,0,0,0,0,80,6.2,10,10,0.4,91,9,999999999,139,0.0980,0,88,0.150,2.0,1.0 +1995,2,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,99900,103,1302,289,11,0,11,1300,0,1300,430,70,5.2,10,10,0.8,152,9,999999999,129,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,99400,334,1408,289,37,0,37,4400,0,4400,1540,60,6.2,10,10,0.4,91,9,999999999,129,0.0980,0,88,0.150,2.0,1.0 +1995,2,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,99100,530,1408,294,68,0,68,8100,0,8100,3000,80,7.7,10,10,6.4,183,9,999999999,129,0.0980,0,88,0.150,7.0,1.0 +1995,2,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,98800,673,1408,300,111,0,111,13100,0,13100,4970,80,10.3,10,10,12.8,244,9,999999999,120,0.0980,0,88,0.150,2.0,1.0 +1995,2,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,98500,752,1408,300,128,0,128,15200,0,15200,5860,80,7.7,10,10,14.4,244,9,999999999,120,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,98200,763,1408,300,109,0,109,13100,0,13100,5150,50,6.7,10,10,11.2,183,9,999999999,120,0.0980,0,88,0.150,1.0,1.0 +1995,2,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,97900,704,1408,297,98,0,98,11800,0,11800,4560,20,5.2,10,10,4.0,122,9,999999999,110,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,98000,581,1408,298,77,0,77,9200,0,9200,3450,330,10.3,10,10,4.0,122,9,999999999,110,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.1,87,98100,400,1408,288,56,0,56,6600,0,6600,2320,330,9.8,10,10,6.4,244,9,999999999,110,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.3,76,98100,177,1408,275,61,17,59,6700,1200,6500,1320,340,9.3,9,9,9.6,244,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,98200,7,340,286,0,0,0,0,0,0,0,330,8.2,10,10,32.0,640,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.9,69,98300,0,0,285,0,0,0,0,0,0,0,310,6.7,10,10,32.0,732,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-4.4,66,98200,0,0,285,0,0,0,0,0,0,0,320,7.2,10,10,32.0,762,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.1,60,98300,0,0,280,0,0,0,0,0,0,0,320,8.8,10,10,32.0,1006,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,98300,0,0,280,0,0,0,0,0,0,0,320,8.2,10,10,32.0,1067,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.8,57,98400,0,0,274,0,0,0,0,0,0,0,320,10.3,10,10,32.0,1067,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +1995,2,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,98500,0,0,275,0,0,0,0,0,0,0,320,9.3,10,10,40.0,3962,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.8,57,98500,0,0,257,0,0,0,0,0,0,0,310,11.3,7,7,32.0,3962,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,98600,0,0,249,0,0,0,0,0,0,0,310,9.3,5,5,32.0,77777,9,999999999,69,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,98700,0,0,252,0,0,0,0,0,0,0,300,8.8,6,6,32.0,1311,9,999999999,69,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-7.8,62,98800,0,0,257,0,0,0,0,0,0,0,300,8.8,8,8,32.0,1341,9,999999999,69,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,98900,0,0,241,0,0,0,0,0,0,0,300,9.8,4,4,32.0,77777,9,999999999,60,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-7.8,71,99000,0,0,244,0,0,0,0,0,0,0,280,9.3,6,6,32.0,1311,9,999999999,60,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-7.8,75,99100,0,0,245,0,0,0,0,0,0,0,300,9.8,7,7,32.0,1219,9,999999999,60,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.9,48,99300,107,1349,226,35,91,27,3700,3900,3400,480,300,12.9,3,3,40.0,77777,9,999999999,60,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.0,43,99400,339,1407,223,171,455,61,17600,37400,8600,1110,310,12.4,2,2,40.0,77777,9,999999999,60,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.0,43,99500,535,1407,225,298,483,114,31700,45900,14200,2190,300,11.8,3,3,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-14.4,43,99500,678,1407,226,448,695,113,47100,68200,14100,2370,300,10.8,2,2,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,99500,758,1407,227,519,653,167,53500,64000,18900,3510,300,10.8,3,3,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,99400,769,1407,225,491,616,154,51000,60800,17700,3330,300,10.3,2,2,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,99500,710,1407,229,444,498,192,46400,49900,21100,4130,300,9.3,4,4,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-15.6,43,99500,587,1407,227,288,145,227,30800,14300,24800,5380,300,10.3,5,5,40.0,77777,9,999999999,50,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.2,37,99600,406,1407,227,112,150,68,12300,13400,8400,1240,310,9.3,6,6,32.0,1372,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-17.2,39,99800,182,1407,223,56,37,51,6100,2600,5800,1200,320,7.7,5,5,32.0,77777,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-18.3,38,99900,8,364,217,1,2,0,0,0,0,0,310,9.3,4,4,40.0,77777,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-18.9,40,100100,0,0,209,0,0,0,0,0,0,0,310,9.8,2,2,40.0,77777,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.0,-20.0,40,100200,0,0,198,0,0,0,0,0,0,0,310,7.2,0,0,40.0,77777,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.6,-20.6,40,100300,0,0,200,0,0,0,0,0,0,0,300,7.7,1,1,40.0,77777,9,999999999,40,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.1,-20.0,44,100400,0,0,214,0,0,0,0,0,0,0,320,7.7,8,8,40.0,1372,9,999999999,30,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-12.2,-22.8,37,100500,0,0,205,0,0,0,0,0,0,0,320,9.8,7,7,40.0,1341,9,999999999,30,0.0980,0,88,0.150,0.0,1.0 +1995,2,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-23.3,39,100500,0,0,186,0,0,0,0,0,0,0,300,9.3,0,0,40.0,77777,9,999999999,30,0.0980,0,88,0.150,0.0,1.0 +1995,2,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-23.3,39,100500,0,0,186,0,0,0,0,0,0,0,300,9.8,0,0,40.0,77777,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-23.3,39,100500,0,0,186,0,0,0,0,0,0,0,300,8.8,0,0,40.0,77777,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.9,-22.8,43,100600,0,0,185,0,0,0,0,0,0,0,300,7.2,0,0,40.0,77777,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-22.2,43,100600,0,0,187,0,0,0,0,0,0,0,300,7.2,0,0,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-20.6,50,100600,0,0,188,0,0,0,0,0,0,0,300,8.2,0,0,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-12.8,-18.9,57,100600,0,0,194,0,0,0,0,0,0,0,280,7.2,1,1,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-13.3,-20.0,53,100700,0,0,192,0,0,0,0,0,0,0,270,7.7,1,1,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-12.8,-19.4,54,100700,112,1372,190,37,154,25,4000,7300,3400,440,280,7.2,0,0,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-12.2,-18.9,54,100700,345,1407,192,188,524,60,19500,43300,8800,1100,290,7.2,0,0,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-11.1,-18.3,52,100700,541,1407,196,352,701,83,37100,66300,11500,1650,280,7.7,0,0,40.0,77777,9,999999999,20,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.6,-17.8,52,100700,684,1407,202,455,737,97,48400,72900,12800,2090,280,7.7,1,1,40.0,77777,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-17.2,49,100600,764,1407,213,373,339,189,40600,35700,21200,4300,270,8.2,4,4,32.0,77777,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-17.2,45,100500,775,1407,220,536,652,177,55200,63900,19900,3750,290,8.2,6,6,32.0,1219,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-16.1,47,100400,716,1407,225,263,196,163,28700,20400,18300,3550,270,8.8,9,7,32.0,1219,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-15.0,50,100400,593,1407,232,249,92,210,27300,9000,23400,5690,290,9.3,10,8,32.0,1219,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-15.6,47,100400,412,1407,228,141,81,118,15500,7300,13400,3070,280,9.3,9,7,32.0,1524,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-16.1,43,100500,188,1407,244,29,0,29,3300,0,3300,1080,270,8.2,10,10,32.0,1524,9,999999999,30,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-15.6,45,100600,9,410,245,0,0,0,0,0,0,0,290,9.3,10,10,32.0,1524,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-11.1,78,100700,0,0,243,0,0,0,0,0,0,0,310,8.2,10,10,1.2,213,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-13.3,61,100800,0,0,243,0,0,0,0,0,0,0,310,6.2,10,10,32.0,1219,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-15.6,50,100800,0,0,229,0,0,0,0,0,0,0,310,7.2,8,8,32.0,1219,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-16.7,47,100800,0,0,217,0,0,0,0,0,0,0,310,8.8,4,4,32.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-17.2,45,100900,0,0,215,0,0,0,0,0,0,0,310,7.2,3,3,40.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-18.3,40,101000,0,0,212,0,0,0,0,0,0,0,300,9.3,2,2,40.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +1995,2,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-18.9,40,101000,0,0,209,0,0,0,0,0,0,0,310,8.2,2,2,40.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-16.1,52,101100,0,0,214,0,0,0,0,0,0,0,300,6.7,3,3,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-12.2,75,101100,0,0,240,0,0,0,0,0,0,0,290,6.2,10,10,12.8,1372,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-12.8,71,101100,0,0,228,0,0,0,0,0,0,0,280,5.7,8,8,32.0,1311,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-13.3,67,101200,0,0,219,0,0,0,0,0,0,0,290,5.2,5,5,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-13.3,70,101200,0,0,214,0,0,0,0,0,0,0,270,5.7,3,3,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-13.9,67,101300,0,0,205,0,0,0,0,0,0,0,290,5.2,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-13.9,64,101400,116,1394,207,34,74,28,3700,3200,3400,500,280,5.7,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-13.3,61,101400,350,1406,210,172,391,75,18200,32300,10100,1370,270,7.2,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,101400,546,1406,216,314,489,124,33200,46600,15000,2400,280,7.2,3,1,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-13.9,53,101400,690,1406,221,435,454,212,44800,45200,22600,4570,270,6.7,6,2,20.8,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.9,48,101300,770,1406,226,468,515,186,49700,52200,21000,4120,270,7.2,8,3,19.2,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.3,51,101200,781,1406,231,442,347,249,47200,36500,26900,6020,270,7.7,7,5,19.2,7620,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,101100,722,1406,235,368,286,221,39300,29800,24000,5110,240,6.7,8,5,24.0,7620,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,101100,599,1406,231,295,407,121,31600,39700,14600,2370,250,6.7,2,2,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,101000,418,1406,235,209,366,100,21800,32200,12200,1870,270,6.7,4,4,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,101000,193,1406,229,67,153,46,7100,9200,5800,850,270,5.7,2,2,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,101000,11,434,221,1,2,1,0,0,0,0,270,5.2,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,101100,0,0,221,0,0,0,0,0,0,0,280,5.7,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-13.3,46,101100,0,0,226,0,0,0,0,0,0,0,280,5.2,3,1,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-12.8,53,101100,0,0,222,0,0,0,0,0,0,0,280,4.6,2,1,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-13.9,46,101100,0,0,230,0,0,0,0,0,0,0,280,4.1,8,4,32.0,7620,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-14.4,43,101100,0,0,236,0,0,0,0,0,0,0,300,4.1,7,7,32.0,3962,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.3,51,101100,0,0,239,0,0,0,0,0,0,0,280,3.6,8,8,32.0,3962,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-14.4,46,101100,0,0,238,0,0,0,0,0,0,0,270,3.1,8,8,32.0,3962,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-13.3,51,101100,0,0,235,0,0,0,0,0,0,0,280,2.6,10,7,32.0,3962,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-13.9,46,100900,0,0,234,0,0,0,0,0,0,0,310,2.1,8,6,32.0,3962,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-14.4,48,100900,0,0,222,0,0,0,0,0,0,0,340,3.1,5,2,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-13.9,50,100900,0,0,225,0,0,0,0,0,0,0,330,2.1,6,3,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,100900,0,0,218,0,0,0,0,0,0,0,210,2.1,7,2,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-14.4,50,101000,0,12,239,0,0,0,0,0,0,0,10,4.6,10,9,32.0,1676,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.0,43,101100,121,1406,234,27,17,25,2900,1000,2800,610,350,5.7,7,7,32.0,1676,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-14.4,41,101100,355,1406,225,179,454,64,18400,37900,8800,1170,340,4.6,3,1,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.9,41,101100,552,1406,227,336,642,83,35300,61000,11200,1660,310,5.2,2,1,20.8,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,101100,696,1406,227,450,693,107,47600,68500,13600,2290,340,4.6,3,1,19.2,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,101000,776,1406,228,527,758,108,54700,74600,13300,2280,360,6.2,2,1,20.8,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,100900,787,1406,232,503,565,187,53600,57500,21300,4200,340,7.2,3,1,24.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-17.2,26,100800,729,1406,225,515,799,101,53400,78200,12700,2080,350,7.2,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-16.7,27,100700,605,1406,227,404,735,87,42700,71200,11900,1790,320,8.8,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-16.7,29,100800,424,1406,224,249,603,67,26000,53500,9800,1270,320,7.7,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-16.7,32,100800,199,1406,220,85,318,40,8700,20900,5700,700,320,8.2,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-16.7,33,100900,12,457,223,2,11,1,0,0,0,0,320,7.2,1,1,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-16.1,35,101000,0,0,219,0,0,0,0,0,0,0,330,6.7,0,0,32.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,101100,0,0,218,0,0,0,0,0,0,0,320,6.7,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.6,41,101100,0,0,216,0,0,0,0,0,0,0,330,6.7,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-16.1,43,101200,0,0,212,0,0,0,0,0,0,0,320,7.2,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-15.6,47,101200,0,0,210,0,0,0,0,0,0,0,320,5.7,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-16.7,45,101300,0,0,208,0,0,0,0,0,0,0,320,7.2,0,0,32.0,77777,9,999999999,60,0.1000,0,88,0.150,0.0,1.0 +1995,2,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-16.1,47,101300,0,0,208,0,0,0,0,0,0,0,310,8.8,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-16.7,47,101300,0,0,206,0,0,0,0,0,0,0,310,7.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-16.1,49,101400,0,0,211,0,0,0,0,0,0,0,300,6.7,1,1,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-16.1,49,101400,0,0,207,0,0,0,0,0,0,0,310,6.7,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-15.0,55,101400,0,0,208,0,0,0,0,0,0,0,300,6.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-15.0,55,101400,0,0,208,0,0,0,0,0,0,0,300,6.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-14.4,58,101400,0,35,208,0,3,0,0,0,0,0,310,5.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-15.0,52,101500,126,1405,209,53,347,22,5300,20500,3500,400,320,5.7,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-14.4,53,101500,361,1405,211,217,684,41,22700,59100,7500,860,310,5.7,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-13.9,50,101500,558,1405,215,382,821,56,40300,77700,9300,1250,300,8.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,101500,702,1405,222,509,886,66,53400,86300,10200,1520,290,6.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.2,46,101400,782,1405,226,581,914,72,60900,89900,10700,1690,300,7.2,0,0,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.7,46,101200,793,1405,236,536,761,106,55900,75200,13300,2300,270,7.2,2,2,32.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-12.2,42,101100,735,1405,246,455,618,132,47700,61100,15600,2840,260,7.7,8,6,32.0,7620,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.7,44,101100,611,1405,244,315,377,150,33000,36800,16900,3020,260,7.2,9,5,32.0,7620,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-10.6,48,101000,429,1405,243,216,312,120,22800,28400,14100,2410,260,8.2,8,4,32.0,77777,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.2,44,101000,204,1405,243,71,88,58,7700,5900,6800,1230,270,8.2,7,6,32.0,7620,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.8,42,101000,14,480,239,3,25,2,0,0,0,0,270,7.2,6,4,32.0,7620,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.7,44,101000,0,0,249,0,0,0,0,0,0,0,260,6.2,9,7,32.0,3962,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.7,44,101000,0,0,258,0,0,0,0,0,0,0,260,6.7,9,9,32.0,3962,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-10.6,51,101000,0,0,248,0,0,0,0,0,0,0,260,6.2,7,7,32.0,3962,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-12.2,42,101000,0,0,246,0,0,0,0,0,0,0,260,6.7,6,6,32.0,3962,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,101100,0,0,251,0,0,0,0,0,0,0,280,6.2,7,7,32.0,2286,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-10.6,44,101100,0,0,258,0,0,0,0,0,0,0,270,6.7,8,8,32.0,2286,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +1995,2,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,101100,0,0,243,0,0,0,0,0,0,0,270,6.7,3,3,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-10.6,48,101200,0,0,231,0,0,0,0,0,0,0,280,5.7,2,0,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,101200,0,0,240,0,0,0,0,0,0,0,270,4.6,6,3,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-9.4,57,101200,0,0,238,0,0,0,0,0,0,0,270,5.2,6,2,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-8.9,62,101200,0,0,233,0,0,0,0,0,0,0,270,4.6,4,1,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.9,65,101300,0,0,231,0,0,0,0,0,0,0,260,4.1,2,1,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.3,68,101300,0,59,237,0,0,0,0,0,0,0,280,4.6,8,3,32.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.8,65,101400,131,1405,239,49,63,43,5300,3300,4900,900,270,4.1,9,2,24.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.2,63,101300,366,1405,248,155,311,74,16500,26200,9600,1350,270,3.6,9,4,24.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,101300,564,1405,262,305,296,186,32100,29200,20300,4060,260,3.6,10,7,20.8,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.7,54,101300,708,1405,274,280,62,249,30700,6200,27600,7220,250,3.6,10,9,19.2,2438,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.3,42,101100,788,1405,257,515,693,126,54500,69400,15400,2870,250,3.1,4,2,19.2,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,101100,799,1405,258,529,700,130,55900,70200,15800,2990,220,4.6,6,1,19.2,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,100900,741,1405,262,446,504,179,47200,50900,20200,3880,190,5.7,6,2,20.8,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,100800,617,1405,270,396,519,168,41200,50700,18900,3430,190,6.2,9,4,20.8,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,100700,435,1405,278,179,150,133,19400,13800,15200,2990,200,7.2,9,7,20.8,3962,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,100700,210,1405,282,45,45,38,5000,3100,4500,800,200,6.7,8,8,19.2,3962,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,100600,16,527,287,2,2,2,0,0,0,0,200,7.7,9,9,24.0,2591,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,100600,0,0,296,0,0,0,0,0,0,0,210,6.7,10,10,24.0,2591,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,100500,0,0,296,0,0,0,0,0,0,0,220,6.2,10,10,24.0,2438,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,100500,0,0,280,0,0,0,0,0,0,0,220,5.2,8,8,24.0,2134,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,100500,0,0,258,0,0,0,0,0,0,0,240,3.1,2,2,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,100500,0,0,254,0,0,0,0,0,0,0,230,3.6,3,1,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.3,67,100500,0,0,260,0,0,0,0,0,0,0,240,4.1,2,2,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,100500,0,0,291,0,0,0,0,0,0,0,250,4.6,10,10,24.0,1311,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,100500,0,0,272,0,0,0,0,0,0,0,250,4.1,8,8,24.0,1524,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.3,76,100500,0,0,254,0,0,0,0,0,0,0,250,3.6,7,2,24.0,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.8,79,100500,0,0,251,0,0,0,0,0,0,0,250,3.6,4,1,24.0,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.9,72,100600,0,0,253,0,0,0,0,0,0,0,250,3.6,7,2,24.0,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.3,80,100600,0,0,248,0,0,0,0,0,0,0,250,3.6,4,1,24.0,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,100700,0,82,248,0,0,0,0,0,0,0,250,3.1,2,1,20.8,77777,9,999999999,129,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,100600,137,1404,252,43,112,32,4600,5300,4000,580,260,3.1,1,1,19.2,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,100600,372,1404,259,178,382,76,18800,32400,10200,1380,260,4.1,2,1,19.2,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,100600,570,1404,264,306,416,137,32200,40000,15900,2700,260,3.6,3,1,19.2,77777,9,999999999,120,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,100600,714,1404,268,453,609,143,47000,59600,16500,2970,260,3.6,5,1,19.2,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.0,43,100500,794,1404,266,551,745,129,58200,74600,15800,2950,270,7.7,0,0,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,100400,806,1404,265,562,751,131,59400,75300,16100,3030,250,5.7,0,0,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,100300,747,1404,280,412,421,187,43400,42500,20700,4090,260,6.7,3,3,24.0,77777,9,999999999,110,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,100400,623,1404,285,304,317,163,32700,32100,18400,3470,250,6.2,7,5,24.0,7620,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,100300,441,1404,284,141,120,103,15500,11200,12000,2320,250,6.2,8,6,24.0,7620,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,100300,216,1404,271,75,145,53,8000,9400,6500,990,250,5.2,4,2,24.0,77777,9,999999999,100,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-5.6,46,100300,18,550,271,3,3,3,0,0,0,0,280,5.7,8,3,24.0,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-7.2,40,100400,0,0,279,0,0,0,0,0,0,0,250,4.6,10,7,32.0,7620,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-7.8,39,100400,0,0,271,0,0,0,0,0,0,0,270,5.2,8,5,32.0,7620,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,100400,0,0,261,0,0,0,0,0,0,0,300,7.2,5,2,32.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-13.3,28,100500,0,0,253,0,0,0,0,0,0,0,300,9.3,3,3,32.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-13.9,29,100600,0,0,250,0,0,0,0,0,0,0,310,8.2,7,4,32.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-15.0,28,100600,0,0,243,0,0,0,0,0,0,0,300,8.8,8,3,32.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +1995,2,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-18.3,23,100700,0,0,248,0,0,0,0,0,0,0,300,6.7,10,8,32.0,7620,9,999999999,69,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-17.2,28,100800,0,0,251,0,0,0,0,0,0,0,300,7.2,10,9,32.0,6706,9,999999999,69,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-17.2,31,100900,0,0,231,0,0,0,0,0,0,0,300,5.7,9,4,32.0,77777,9,999999999,69,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-17.8,30,101000,0,0,222,0,0,0,0,0,0,0,300,6.2,2,1,32.0,77777,9,999999999,60,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.2,37,101100,0,0,217,0,0,0,0,0,0,0,330,6.2,3,1,32.0,77777,9,999999999,60,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-20.0,34,101300,0,0,214,0,0,0,0,0,0,0,340,8.2,7,4,32.0,77777,9,999999999,60,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.0,-23.3,29,101400,1,129,195,0,0,0,0,0,0,0,320,9.3,1,0,32.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.6,-23.9,29,101500,142,1404,193,44,80,36,4700,3900,4300,660,320,6.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-10.0,-24.4,26,101600,378,1404,195,186,374,85,19500,31900,10900,1570,330,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-23.9,26,101600,576,1404,197,347,550,121,37000,53200,15100,2360,330,6.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-23.3,25,101700,720,1404,201,476,643,146,49400,63000,16900,3040,310,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-21.7,26,101600,800,1404,205,550,685,159,57300,68000,18400,3540,300,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-20.6,28,101600,812,1404,208,561,691,161,58500,68700,18600,3630,290,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-20.0,27,101600,753,1404,212,507,662,152,52700,65200,17600,3250,300,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-19.4,26,101500,629,1404,216,394,588,130,40600,56400,15200,2550,310,6.7,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-20.0,23,101600,447,1404,217,240,445,98,25300,40200,12500,1830,300,7.2,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-20.6,23,101700,221,1404,215,84,182,55,8900,11900,7000,1030,310,6.7,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-20.0,27,101800,20,573,212,3,2,3,0,0,0,0,310,7.7,0,0,40.0,77777,9,999999999,50,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-20.0,27,102000,0,0,212,0,0,0,0,0,0,0,310,7.2,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-19.4,30,102100,0,0,211,0,0,0,0,0,0,0,300,6.2,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-18.9,33,102100,0,0,209,0,0,0,0,0,0,0,320,7.2,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-18.9,33,102200,0,0,209,0,0,0,0,0,0,0,310,5.2,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-18.9,35,102200,0,0,208,0,0,0,0,0,0,0,310,5.2,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-18.9,35,102300,0,0,208,0,0,0,0,0,0,0,300,5.7,0,0,40.0,77777,9,999999999,40,0.1030,0,88,0.150,0.0,1.0 +1995,2,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-18.3,38,102300,0,0,206,0,0,0,0,0,0,0,310,5.7,0,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-18.9,36,102400,0,0,206,0,0,0,0,0,0,0,300,6.2,0,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-18.3,40,102400,0,0,205,0,0,0,0,0,0,0,300,5.7,0,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-18.3,42,102500,0,0,203,0,0,0,0,0,0,0,300,5.7,0,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-18.9,40,102500,0,0,202,0,0,0,0,0,0,0,300,4.6,0,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-18.3,44,102600,0,0,201,0,0,0,0,0,0,0,300,4.6,3,0,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-9.4,-18.3,44,102600,1,152,208,0,0,0,0,0,0,0,290,4.6,5,2,40.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.9,-17.8,44,102600,148,1403,212,48,79,40,5300,4500,4800,840,300,4.1,8,3,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-17.2,43,102600,384,1403,214,179,295,98,19000,25700,12000,1910,290,5.7,7,2,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-17.2,41,102600,582,1403,213,349,517,134,36900,50000,16000,2640,300,5.7,8,1,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-16.7,41,102600,726,1403,218,416,431,193,43700,43300,21100,4190,290,5.2,7,2,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-16.1,39,102500,807,1403,224,466,389,242,50100,41100,26400,5890,280,5.7,9,3,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-16.1,37,102400,818,1403,232,454,145,369,49700,14900,41000,10650,290,6.2,7,6,32.0,7620,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.6,37,102300,759,1403,231,468,514,189,49400,52000,21200,4170,260,5.2,8,4,32.0,7620,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,102300,635,1403,228,397,618,118,41400,59700,14200,2370,290,6.2,1,1,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-14.4,38,102200,453,1403,224,258,531,87,26600,47600,11200,1610,280,6.2,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.0,37,102200,227,1403,222,94,260,52,9800,17600,7000,940,280,6.7,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-14.4,40,102300,22,596,222,4,8,3,0,0,0,0,290,6.7,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,102300,0,0,223,0,0,0,0,0,0,0,280,6.2,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,102400,0,0,223,0,0,0,0,0,0,0,270,7.2,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102400,0,0,222,0,0,0,0,0,0,0,270,4.6,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-11.7,51,102400,0,0,225,0,0,0,0,0,0,0,270,6.7,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.6,56,102400,0,0,225,0,0,0,0,0,0,0,270,5.2,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.8,44,102400,0,0,226,0,0,0,0,0,0,0,270,6.2,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102400,0,0,222,0,0,0,0,0,0,0,280,4.6,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-12.8,50,102300,0,0,220,0,0,0,0,0,0,0,260,4.1,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-12.8,50,102400,0,0,224,0,0,0,0,0,0,0,260,3.6,3,1,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102300,0,0,222,0,0,0,0,0,0,0,270,4.1,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102400,0,0,222,0,0,0,0,0,0,0,270,4.1,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.2,50,102500,0,0,222,0,0,0,0,0,0,0,280,4.1,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.8,48,102600,2,175,222,0,28,0,0,0,0,0,280,4.6,0,0,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102600,153,1403,228,67,374,26,6900,22100,4500,470,290,3.6,2,1,32.0,77777,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-13.9,38,102700,390,1403,238,208,442,85,21900,38100,11300,1570,300,5.7,8,4,32.0,7620,9,999999999,40,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-13.9,36,102700,588,1403,240,273,348,127,29100,33800,14800,2490,310,6.2,7,4,32.0,7620,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-13.3,35,102700,733,1403,249,355,296,200,38300,30900,22100,4550,320,5.2,8,6,32.0,7620,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-13.9,31,102700,813,1403,246,527,605,175,54500,59900,19700,3890,300,5.2,7,4,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-13.3,33,102700,824,1403,244,492,526,183,52900,53900,21100,4220,310,5.2,8,3,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-13.9,29,102600,766,1403,242,530,828,78,55500,81300,10900,1700,300,5.7,4,1,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-13.9,29,102600,641,1403,238,461,887,56,48700,85600,9400,1360,290,5.2,0,0,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-13.9,29,102600,459,1403,238,303,792,44,32100,72500,8300,1040,270,4.1,0,0,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-13.3,32,102700,232,1403,236,124,574,29,12900,43100,5700,590,270,5.2,0,0,32.0,77777,9,999999999,50,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,102700,24,643,233,8,111,3,0,0,0,0,260,5.7,0,0,32.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,102800,0,0,233,0,0,0,0,0,0,0,270,4.6,0,0,32.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,102800,0,0,233,0,0,0,0,0,0,0,240,4.6,0,0,32.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-9.4,54,102900,0,0,232,0,0,0,0,0,0,0,360,3.1,0,0,32.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-14.4,36,102900,0,0,226,0,0,0,0,0,0,0,30,3.1,0,0,24.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.9,41,102900,0,0,223,0,0,0,0,0,0,0,40,3.1,0,0,24.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-14.4,40,103000,0,0,222,0,0,0,0,0,0,0,50,2.6,0,0,24.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +1995,2,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-12.2,50,103000,0,0,222,0,0,0,0,0,0,0,60,3.6,0,0,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-11.7,61,103100,0,0,217,0,0,0,0,0,0,0,80,3.1,0,0,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-12.8,53,103200,0,0,222,0,0,0,0,0,0,0,60,3.1,2,1,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-11.7,64,103100,0,0,219,0,0,0,0,0,0,0,60,2.6,3,1,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-11.1,71,103100,0,0,221,0,0,0,0,0,0,0,70,3.1,7,2,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-10.6,71,103100,0,0,227,0,0,0,0,0,0,0,80,3.1,10,4,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-10.0,68,103100,3,199,232,0,1,0,0,0,0,0,70,3.6,10,4,24.0,77777,9,999999999,69,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-9.4,65,103000,159,1402,240,56,34,52,6100,2300,5800,1160,80,3.6,10,6,20.8,7620,9,999999999,80,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.3,59,103100,396,1402,252,158,104,128,17000,9300,14300,2840,90,3.6,10,7,20.8,7010,9,999999999,80,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.1,60,103100,594,1402,273,220,59,195,24100,5800,21700,5410,110,2.6,10,9,20.8,3962,9,999999999,89,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.1,53,103000,739,1402,287,186,0,186,21400,0,21400,7790,160,6.2,10,10,20.8,3962,9,999999999,89,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,102900,820,1402,294,212,0,212,24500,0,24500,9070,170,6.2,10,10,20.8,3962,9,999999999,89,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,102800,831,1402,298,172,0,172,20200,0,20200,7800,170,5.7,10,10,19.2,1524,9,999999999,100,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,102600,772,1402,293,157,0,157,18400,0,18400,7010,210,4.1,10,10,6.4,488,9,999999999,100,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,102400,647,1402,293,126,0,126,14700,0,14700,5430,190,3.6,10,10,11.2,1189,9,999999999,110,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,102300,465,1402,294,81,0,81,9400,0,9400,3320,180,3.1,10,10,8.0,488,9,999999999,110,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,102100,238,1402,294,23,0,23,2800,0,2800,930,150,3.1,10,10,1.6,152,9,999999999,110,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,102000,26,666,297,2,0,2,300,0,300,80,130,2.1,10,10,1.6,91,9,999999999,120,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101800,0,0,298,0,0,0,0,0,0,0,60,2.6,10,10,1.6,91,9,999999999,120,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101500,0,0,300,0,0,0,0,0,0,0,70,3.1,10,10,1.6,61,9,999999999,129,0.1050,0,88,0.150,1.0,1.0 +1995,2,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,101200,0,0,304,0,0,0,0,0,0,0,40,3.6,10,10,1.6,91,9,999999999,129,0.1050,0,88,0.150,1.0,1.0 +1995,2,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101100,0,0,303,0,0,0,0,0,0,0,10,3.6,10,10,1.6,122,9,999999999,139,0.1050,0,88,0.150,1.0,1.0 +1995,2,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,101000,0,0,301,0,0,0,0,0,0,0,300,3.1,10,10,3.2,91,9,999999999,139,0.1050,0,88,0.150,0.0,1.0 +1995,2,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101000,0,0,297,0,0,0,0,0,0,0,270,4.6,10,10,6.4,152,9,999999999,139,0.1050,0,88,0.150,3.0,1.0 +1995,2,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101000,0,0,297,0,0,0,0,0,0,0,240,4.6,10,10,16.0,244,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,101000,0,0,293,0,0,0,0,0,0,0,250,6.7,10,10,12.8,244,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,101100,0,0,295,0,0,0,0,0,0,0,250,4.6,10,10,16.0,274,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,101100,0,0,297,0,0,0,0,0,0,0,250,5.2,10,10,20.8,274,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101200,0,0,288,0,0,0,0,0,0,0,270,4.1,9,9,24.0,3658,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101300,0,0,268,0,0,0,0,0,0,0,250,4.1,4,4,20.8,77777,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101400,3,245,277,0,0,0,0,0,0,0,250,3.6,8,8,16.0,3962,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101500,165,1401,276,54,95,43,5700,5100,5100,800,280,4.1,7,7,14.4,3962,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,101600,402,1401,287,89,60,71,9900,5400,8300,1580,270,5.7,8,8,12.8,3962,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,101600,601,1401,288,238,259,126,25900,26100,14700,2550,280,5.7,7,5,16.0,7620,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.7,65,101600,745,1401,294,408,430,179,43300,43500,20100,3900,300,4.6,8,4,20.8,7620,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.0,56,101600,826,1401,299,387,198,270,42200,20700,30000,7230,310,7.2,7,6,24.0,7620,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,101700,837,1401,307,222,130,144,25200,13800,16900,3880,300,7.7,9,8,24.0,3962,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,101600,778,1401,310,309,81,264,33900,8200,29400,8060,310,6.2,9,9,24.0,3962,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.8,46,101700,653,1401,318,148,0,148,17100,0,17100,6170,350,5.7,10,10,24.0,3962,9,999999999,139,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.3,46,101700,470,1401,314,94,0,94,10800,0,10800,3750,340,4.6,10,10,24.0,3962,9,999999999,139,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-4.4,43,101800,243,1401,311,50,0,50,5700,0,5700,1790,330,4.6,10,10,24.0,3962,9,999999999,139,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-5.0,41,101900,29,689,310,5,0,5,600,0,600,200,350,6.2,10,10,24.0,3962,9,999999999,129,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-5.6,39,102000,0,0,309,0,0,0,0,0,0,0,360,4.6,10,10,24.0,3962,9,999999999,129,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.6,41,102100,0,0,307,0,0,0,0,0,0,0,20,5.2,10,10,24.0,3658,9,999999999,129,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102100,0,0,301,0,0,0,0,0,0,0,50,5.2,10,10,24.0,3048,9,999999999,120,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,102200,0,0,297,0,0,0,0,0,0,0,50,3.6,10,10,24.0,3048,9,999999999,120,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,102200,0,0,297,0,0,0,0,0,0,0,30,4.6,10,10,24.0,3048,9,999999999,120,0.1060,0,88,0.150,0.0,1.0 +1995,2,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,102300,0,0,296,0,0,0,0,0,0,0,20,5.2,10,10,24.0,3048,9,999999999,110,0.1060,0,88,0.150,0.0,1.0 +1995,2,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,102300,0,0,285,0,0,0,0,0,0,0,20,3.6,9,9,24.0,3353,9,999999999,110,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,102300,0,0,294,0,0,0,0,0,0,0,20,4.1,10,10,24.0,3353,9,999999999,110,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,102400,0,0,291,0,0,0,0,0,0,0,360,4.1,10,10,24.0,3658,9,999999999,100,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.1,53,102400,0,0,279,0,0,0,0,0,0,0,20,4.1,9,9,24.0,3962,9,999999999,100,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.1,55,102500,0,0,255,0,0,0,0,0,0,0,20,3.6,5,2,24.0,77777,9,999999999,100,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.1,57,102600,0,0,250,0,0,0,0,0,0,0,360,3.6,4,1,24.0,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.1,57,102600,4,268,253,0,7,0,0,0,0,0,360,4.1,6,2,32.0,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.7,54,102700,171,1401,255,72,183,50,7500,10100,6300,960,360,4.6,8,3,32.0,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,102800,408,1401,261,193,455,60,20200,40100,8500,1150,10,4.6,4,2,32.0,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.1,44,102900,607,1401,264,379,700,75,39600,67300,10300,1550,360,3.1,4,1,24.0,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-6.1,39,102900,752,1401,274,436,575,127,45800,57200,15100,2800,360,3.1,7,2,24.0,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-6.1,36,102900,832,1401,281,555,755,106,58300,75100,13500,2430,360,2.1,6,3,24.0,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-6.7,35,102800,844,1401,276,564,700,142,59600,70400,17000,3390,250,3.6,6,2,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-4.4,43,102800,784,1401,281,506,639,147,52800,63500,17100,3270,250,3.6,8,3,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.0,43,102800,659,1401,275,446,731,101,47000,71700,13100,2120,230,4.6,5,2,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.0,43,102800,476,1401,278,263,514,88,27200,46800,11200,1650,220,4.1,6,3,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-4.4,46,102900,249,1401,274,119,370,53,12100,26700,7300,920,230,3.6,6,2,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.1,45,102900,31,712,262,8,62,6,1000,2700,900,120,250,3.6,3,1,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,102900,0,0,254,0,0,0,0,0,0,0,180,2.6,2,0,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.2,77,102900,0,0,255,0,0,0,0,0,0,0,240,3.6,3,1,20.8,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,103000,0,0,258,0,0,0,0,0,0,0,230,3.1,6,2,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,103000,0,0,265,0,0,0,0,0,0,0,200,2.6,8,3,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,103000,0,0,258,0,0,0,0,0,0,0,230,2.6,7,2,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,103000,0,0,263,0,0,0,0,0,0,0,260,3.6,8,3,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.8,76,103000,0,0,259,0,0,0,0,0,0,0,250,3.1,10,3,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,103000,0,0,255,0,0,0,0,0,0,0,260,1.5,7,1,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.9,67,103000,0,0,260,0,0,0,0,0,0,0,220,3.1,8,3,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-4.4,73,103000,0,0,250,0,0,0,0,0,0,0,250,3.1,4,2,24.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.9,69,103000,0,0,258,0,0,0,0,0,0,0,240,2.1,6,3,24.0,77777,9,999999999,60,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,103000,0,0,257,0,0,0,0,0,0,0,290,2.1,9,2,24.0,77777,9,999999999,60,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,103000,5,292,253,0,5,0,0,0,0,0,220,2.6,8,3,17.6,77777,9,999999999,60,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,103100,177,1400,258,71,197,46,7300,11600,5800,840,280,3.1,7,2,19.2,77777,9,999999999,60,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,103100,415,1400,276,219,395,101,22800,34800,12400,1890,310,1.5,8,3,17.6,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,103100,613,1400,291,283,229,182,30100,23100,19900,3960,230,2.6,9,7,19.2,6706,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,103100,758,1400,299,271,168,180,30100,17500,20600,4620,220,2.6,10,8,19.2,6706,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.2,48,103100,839,1400,298,348,140,264,38100,14700,29200,7140,200,2.6,10,7,19.2,6706,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,103000,850,1400,301,320,25,305,36100,2400,34700,11760,190,3.6,10,8,19.2,6096,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,103000,791,1400,289,484,544,177,51900,55500,20500,3970,200,4.1,10,4,16.0,77777,9,999999999,69,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,102900,665,1400,286,408,416,211,43400,42700,23100,4770,200,3.6,9,4,16.0,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,102900,482,1400,286,250,397,113,26300,36600,13600,2150,190,3.6,5,4,19.2,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,102900,254,1400,279,106,236,63,11000,16900,7900,1150,180,3.1,5,3,20.8,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,102900,34,735,267,9,41,7,1000,1400,1000,120,190,2.6,4,1,19.2,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,102900,0,0,263,0,0,0,0,0,0,0,110,2.1,3,1,19.2,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,103000,0,0,256,0,0,0,0,0,0,0,80,2.6,0,0,19.2,77777,9,999999999,80,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,103000,0,0,254,0,0,0,0,0,0,0,80,2.6,0,0,19.2,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.1,84,102900,0,0,251,0,0,0,0,0,0,0,80,2.1,0,0,16.0,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.1,87,102900,0,0,250,0,0,0,0,0,0,0,60,2.6,0,0,14.4,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.1,91,102800,0,0,247,0,0,0,0,0,0,0,80,2.1,0,0,14.4,77777,9,999999999,89,0.1070,0,88,0.150,0.0,1.0 +1995,2,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.7,91,102800,0,0,245,0,0,0,0,0,0,0,50,3.1,0,0,12.8,77777,9,999999999,89,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.7,91,102800,0,0,245,0,0,0,0,0,0,0,40,2.6,0,0,12.8,77777,9,999999999,89,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,102700,0,0,240,0,0,0,0,0,0,0,50,2.1,0,0,12.8,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,102600,0,0,240,0,0,0,0,0,0,0,30,2.6,0,0,14.4,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,102600,0,0,240,0,0,0,0,0,0,0,80,2.1,0,0,14.4,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,102600,0,0,240,0,0,0,0,0,0,0,20,2.6,0,0,16.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-3.3,91,102500,7,338,238,0,3,0,0,0,0,0,30,3.1,0,0,11.2,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.7,87,102500,183,1400,247,71,234,41,7500,14100,5600,730,50,2.1,0,0,12.8,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,102500,421,1400,263,235,536,74,24400,47300,10100,1380,90,2.6,0,0,14.4,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,102400,620,1400,280,387,638,104,40500,61700,13100,2110,300,1.5,1,1,12.8,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,102400,765,1400,290,475,536,181,50400,54400,20600,4000,270,2.6,2,2,12.8,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-0.6,55,102300,845,1400,289,502,528,182,54000,54200,21200,4280,240,3.6,6,3,14.4,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.1,51,102100,856,1400,288,586,685,166,61200,68500,19200,3930,220,3.6,7,2,14.4,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.8,44,102000,797,1400,291,488,496,205,51500,50500,22600,4690,200,3.6,10,4,16.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-3.9,37,101900,671,1400,290,380,455,162,40200,45300,18400,3360,180,3.6,10,2,16.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-3.9,37,101900,488,1400,293,277,341,158,29100,32300,17800,3340,210,3.6,10,3,24.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-3.9,42,101800,260,1400,283,108,209,69,11400,15100,8600,1320,230,4.1,10,2,24.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-3.3,49,101700,37,781,280,9,4,9,1000,200,1000,230,240,3.6,10,3,24.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101700,0,0,266,0,0,0,0,0,0,0,220,3.1,7,2,24.0,77777,9,999999999,100,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,101700,0,0,275,0,0,0,0,0,0,0,230,3.1,8,4,24.0,77777,9,999999999,110,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101700,0,0,269,0,0,0,0,0,0,0,270,3.1,7,2,24.0,77777,9,999999999,110,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,101700,0,0,287,0,0,0,0,0,0,0,210,3.1,10,8,24.0,7620,9,999999999,110,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101600,0,0,289,0,0,0,0,0,0,0,220,2.1,10,7,24.0,7620,9,999999999,110,0.1080,0,88,0.150,0.0,1.0 +1995,2,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101600,0,0,280,0,0,0,0,0,0,0,220,3.1,9,6,24.0,7620,9,999999999,110,0.1080,0,88,0.150,0.0,1.0 +1995,2,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101500,0,0,285,0,0,0,0,0,0,0,220,3.1,10,8,24.0,7010,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.0,82,101500,0,0,290,0,0,0,0,0,0,0,230,2.6,10,9,20.8,7010,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.0,79,101400,0,0,292,0,0,0,0,0,0,0,290,2.1,10,9,19.2,7010,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101300,0,0,298,0,0,0,0,0,0,0,290,2.1,10,10,19.2,7010,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,101300,0,0,281,0,0,0,0,0,0,0,90,1.5,10,8,19.2,7010,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,101300,0,0,273,0,0,0,0,0,0,0,20,2.6,9,4,19.2,77777,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101300,8,361,271,1,14,0,0,0,0,0,10,3.1,4,4,19.2,77777,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,101300,189,1399,273,66,169,43,6900,10400,5500,770,30,4.1,5,4,20.8,77777,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-3.9,49,101200,428,1399,277,231,484,83,23800,42700,10700,1520,60,5.2,4,3,24.0,77777,9,999999999,110,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.3,46,101200,627,1399,291,231,221,132,25300,22500,15200,2710,50,4.6,7,6,20.8,7620,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-3.9,40,101100,771,1399,295,337,184,235,36800,19100,26200,6090,80,4.1,8,6,20.8,7620,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.3,38,101000,852,1399,298,335,294,156,36700,30300,18200,3650,90,2.6,5,4,20.8,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.2,43,100900,863,1399,297,632,786,147,66800,79200,17800,3570,120,4.1,4,4,20.8,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,100800,803,1399,291,547,729,128,57900,73200,15700,2970,120,4.6,5,2,19.2,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.0,56,100700,677,1399,292,396,549,130,41200,53500,15100,2670,120,4.6,3,3,19.2,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,100600,494,1399,286,292,619,73,30700,57500,10300,1430,120,4.1,2,2,17.6,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,100600,266,1399,287,69,136,43,7500,10000,5600,750,140,3.6,3,3,17.6,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,100600,39,804,273,13,124,7,1500,6500,1100,170,120,3.1,1,1,16.0,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,100500,0,0,264,0,0,0,0,0,0,0,100,3.1,0,0,14.4,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,100500,0,0,268,0,0,0,0,0,0,0,60,2.6,2,2,16.0,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,100500,0,0,267,0,0,0,0,0,0,0,80,2.6,1,1,12.8,77777,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,100400,0,0,285,0,0,0,0,0,0,0,90,4.6,7,7,12.8,457,9,999999999,100,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,100300,0,0,274,0,0,0,0,0,0,0,80,3.1,3,3,12.8,77777,9,999999999,89,0.1090,0,88,0.150,0.0,1.0 +1995,2,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,100200,0,0,291,0,0,0,0,0,0,0,60,2.6,9,9,11.2,2134,9,999999999,89,0.1090,0,88,0.150,0.0,1.0 +1995,2,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,100100,0,0,266,0,0,0,0,0,0,0,60,3.6,7,2,11.2,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,100100,0,0,268,0,0,0,0,0,0,0,60,3.1,9,4,11.2,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,100000,0,0,275,0,0,0,0,0,0,0,40,2.6,9,7,12.8,2134,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,100000,0,0,294,0,0,0,0,0,0,0,40,2.6,10,10,12.8,2134,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,100000,0,0,296,0,0,0,0,0,0,0,50,3.1,10,10,12.8,1981,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,99900,0,0,297,0,0,0,0,0,0,0,60,3.1,10,10,11.2,396,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,100000,10,408,299,0,0,0,0,0,0,0,50,3.6,10,10,11.2,396,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,100100,195,1398,299,30,0,30,3500,0,3500,1120,40,3.1,10,10,11.2,396,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,100100,434,1398,297,70,0,70,8200,0,8200,2880,40,3.1,10,10,8.0,975,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,100200,633,1398,300,93,0,93,11100,0,11100,4200,30,3.6,10,10,9.6,335,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100200,778,1398,305,123,0,123,14700,0,14700,5770,360,4.1,10,10,11.2,274,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100200,859,1398,305,141,0,141,16900,0,16900,6740,360,3.6,10,10,12.8,396,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,100200,869,1398,305,171,0,171,20300,0,20300,7940,10,4.1,10,10,14.4,457,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,100200,810,1398,305,156,0,156,18400,0,18400,7140,30,3.6,10,10,12.8,457,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100200,683,1398,305,123,0,123,14500,0,14500,5460,10,3.1,10,10,12.8,732,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,100300,500,1398,305,79,0,79,9300,0,9300,3350,30,2.1,10,10,12.8,640,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.6,76,100300,271,1398,306,48,0,48,5500,0,5500,1800,310,3.1,10,10,12.8,732,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,100400,42,827,309,6,0,6,700,0,700,230,350,3.6,10,10,12.8,732,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,100500,0,0,312,0,0,0,0,0,0,0,330,5.7,10,10,14.4,1829,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.6,73,100500,0,0,309,0,0,0,0,0,0,0,330,6.2,10,10,16.0,1311,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,100600,0,0,305,0,0,0,0,0,0,0,330,5.7,10,10,16.0,945,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,100700,0,0,303,0,0,0,0,0,0,0,330,6.7,10,10,16.0,945,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,100800,0,0,297,0,0,0,0,0,0,0,320,6.2,10,10,16.0,1067,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,100900,0,0,294,0,0,0,0,0,0,0,330,7.7,10,10,19.2,1128,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,100900,0,0,294,0,0,0,0,0,0,0,330,5.7,10,10,24.0,1341,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,101000,0,0,291,0,0,0,0,0,0,0,330,6.7,10,10,24.0,1433,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,101000,0,0,289,0,0,0,0,0,0,0,340,5.7,10,10,24.0,1524,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.7,52,101100,0,0,276,0,0,0,0,0,0,0,340,5.2,9,9,24.0,1524,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.8,49,101200,0,0,268,0,0,0,0,0,0,0,340,6.7,8,8,24.0,1524,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,101300,0,0,251,0,0,0,0,0,0,0,330,5.7,4,4,24.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-9.4,49,101500,11,431,246,2,13,1,0,0,0,0,330,4.6,3,3,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.0,45,101600,202,1398,245,74,263,36,7600,17600,5100,650,340,7.2,2,2,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-10.0,43,101700,441,1398,239,268,656,61,27600,59100,8900,1170,340,7.2,0,0,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-10.6,39,101700,640,1398,241,438,781,80,45800,75700,11000,1670,330,6.2,0,0,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-10.0,36,101700,785,1398,247,566,843,93,59900,83800,12700,2120,350,6.2,0,0,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-10.0,34,101700,865,1398,251,639,871,100,68000,87300,13700,2440,340,4.6,0,0,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-11.1,29,101600,876,1398,257,616,828,97,65800,83200,13500,2420,310,5.2,1,1,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-11.1,27,101600,816,1398,265,561,742,128,59500,74700,15800,3010,310,4.6,2,2,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-10.6,29,101600,689,1398,259,449,729,89,46900,71200,11600,1860,280,4.1,3,1,32.0,77777,9,999999999,89,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-9.4,33,101600,505,1398,256,316,673,72,33300,63000,10400,1430,280,4.6,2,0,32.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-6.7,45,101600,277,1398,254,139,470,46,14400,36000,7200,840,250,4.6,1,0,32.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.6,51,101700,45,850,254,13,76,9,1400,3500,1200,170,250,5.2,1,0,24.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.7,46,101800,0,0,252,0,0,0,0,0,0,0,250,5.7,0,0,24.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.2,46,101800,0,0,255,0,0,0,0,0,0,0,260,4.1,1,1,24.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,101800,0,0,262,0,0,0,0,0,0,0,240,3.1,4,4,24.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.1,51,101800,0,0,290,0,0,0,0,0,0,0,250,3.1,10,10,24.0,2438,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,101900,0,0,291,0,0,0,0,0,0,0,250,3.1,10,10,24.0,2286,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +1995,2,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,101900,0,0,291,0,0,0,0,0,0,0,230,3.1,10,10,24.0,2286,9,999999999,110,0.1100,0,88,0.150,0.0,1.0 +1995,2,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.1,51,101900,0,0,290,0,0,0,0,0,0,0,230,3.1,10,10,24.0,2286,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,101800,0,0,275,0,0,0,0,0,0,0,230,3.1,8,8,24.0,2591,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,101800,0,0,293,0,0,0,0,0,0,0,220,3.1,10,10,24.0,2591,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,101700,0,0,293,0,0,0,0,0,0,0,230,3.1,10,10,24.0,2438,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101700,0,0,298,0,0,0,0,0,0,0,210,3.1,10,10,24.0,2438,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101700,0,0,302,0,0,0,0,0,0,0,220,5.2,10,10,24.0,2591,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101700,13,454,304,1,0,1,0,0,0,0,210,5.7,10,10,19.2,2286,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,101700,208,1397,305,31,0,31,3600,0,3600,1170,250,3.6,10,10,19.2,2438,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,101700,447,1397,305,74,0,74,8600,0,8600,3040,260,2.6,10,10,17.6,1676,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101700,646,1397,311,123,0,123,14400,0,14400,5330,260,2.1,10,10,17.6,1829,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101700,791,1397,311,159,0,159,18700,0,18700,7170,240,2.1,10,10,16.0,1524,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,101600,872,1397,310,180,0,180,21300,0,21300,8280,260,2.6,10,10,16.0,1981,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101500,882,1397,311,182,0,182,21500,0,21500,8400,190,2.6,10,10,17.6,2743,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101300,822,1397,312,167,0,167,19700,0,19700,7590,140,2.1,10,10,19.2,1676,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,101300,695,1397,309,135,0,135,15800,0,15800,5930,160,3.1,10,10,14.4,1981,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,101200,511,1397,311,89,0,89,10400,0,10400,3720,180,3.6,10,10,11.2,1981,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,101200,282,1397,311,40,0,40,4700,0,4700,1570,160,2.6,10,10,12.8,1981,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101100,48,873,312,7,0,7,900,0,900,270,120,2.6,10,10,11.2,1829,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,101100,0,0,312,0,0,0,0,0,0,0,170,3.1,10,10,12.8,1676,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101100,0,0,312,0,0,0,0,0,0,0,200,3.1,10,10,11.2,2134,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,101100,0,0,311,0,0,0,0,0,0,0,0,0.0,10,10,11.2,2438,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,101000,0,0,308,0,0,0,0,0,0,0,80,2.1,10,10,11.2,3048,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,100900,0,0,312,0,0,0,0,0,0,0,110,1.5,10,10,11.2,2896,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +1995,2,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,100800,0,0,309,0,0,0,0,0,0,0,40,2.1,10,10,11.2,2743,9,999999999,89,0.1110,0,88,0.150,0.0,1.0 +1995,2,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100800,0,0,316,0,0,0,0,0,0,0,170,2.6,10,10,9.6,1981,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100600,0,0,313,0,0,0,0,0,0,0,180,1.5,10,10,16.0,1981,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100500,0,0,313,0,0,0,0,0,0,0,0,0.0,10,10,16.0,2743,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,100400,0,0,309,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1250,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100300,0,0,313,0,0,0,0,0,0,0,180,1.5,10,10,9.6,1463,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,100400,0,0,310,0,0,0,0,0,0,0,240,3.1,10,10,6.4,1189,9,999999999,89,0.1120,0,88,0.150,2.0,1.0 +1995,2,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,100400,15,500,315,1,0,1,0,0,0,0,300,5.7,10,10,9.6,488,9,999999999,89,0.1120,0,88,0.150,2.0,1.0 +1995,2,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,100600,215,1396,312,35,0,35,4000,0,4000,1300,280,6.7,10,10,12.8,792,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,100500,454,1396,311,88,0,88,10100,0,10100,3510,270,6.2,10,10,17.6,945,9,999999999,89,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,100600,653,1396,299,260,163,183,28400,16600,20600,4460,290,8.8,7,7,17.6,1524,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,100700,798,1396,295,357,191,248,39100,19900,27600,6540,310,9.3,8,8,24.0,1676,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.8,49,100700,878,1396,293,442,185,326,47900,19400,35700,9080,300,8.2,7,7,40.0,1311,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-4.4,37,100700,889,1396,294,469,508,145,49700,51400,16900,3650,290,10.8,5,5,40.0,77777,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-5.6,32,100700,828,1396,293,412,449,146,45400,46200,17900,3330,290,9.8,4,4,40.0,77777,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-7.2,30,100800,701,1396,285,396,607,90,42300,60500,11800,1990,290,9.3,3,3,40.0,77777,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-8.3,29,100900,517,1396,284,338,697,80,35500,65300,11200,1570,290,9.3,4,4,40.0,77777,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-7.2,34,101000,288,1396,285,72,101,51,7800,7700,6200,910,300,8.8,6,6,40.0,1829,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-9.4,30,101200,52,896,276,16,67,12,1800,2600,1600,200,300,8.2,5,5,40.0,77777,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,101400,0,0,270,0,0,0,0,0,0,0,300,9.8,6,6,40.0,1829,9,999999999,80,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.3,42,101500,0,0,262,0,0,0,0,0,0,0,290,9.3,4,4,40.0,77777,9,999999999,69,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-10.0,39,101600,0,0,260,0,0,0,0,0,0,0,300,8.8,6,6,40.0,1463,9,999999999,69,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-11.7,35,101700,0,0,245,0,0,0,0,0,0,0,320,7.2,1,1,40.0,77777,9,999999999,69,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-13.3,35,101900,0,0,233,0,0,0,0,0,0,0,320,6.2,0,0,40.0,77777,9,999999999,69,0.1120,0,88,0.150,0.0,1.0 +1995,2,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,101900,0,0,227,0,0,0,0,0,0,0,320,6.7,0,0,40.0,77777,9,999999999,69,0.1120,0,88,0.150,0.0,1.0 +1995,2,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-14.4,36,102000,0,0,226,0,0,0,0,0,0,0,310,6.2,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.0,34,102000,0,0,230,0,0,0,0,0,0,0,320,6.7,1,1,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-15.6,34,102100,0,0,223,0,0,0,0,0,0,0,330,7.7,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.6,35,102100,0,0,221,0,0,0,0,0,0,0,310,6.2,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-15.0,37,102200,0,0,222,0,0,0,0,0,0,0,320,5.2,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.0,39,102200,0,0,220,0,0,0,0,0,0,0,310,4.6,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-14.4,41,102300,17,523,221,4,50,2,0,0,0,0,290,5.2,0,0,40.0,77777,9,999999999,60,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-13.3,44,102400,222,1396,223,109,469,35,11400,32900,6100,640,280,6.2,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-13.9,36,102400,461,1396,228,294,723,55,30700,66300,8800,1130,270,6.7,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-12.8,36,102400,660,1396,233,466,835,71,49600,81800,10800,1580,270,6.2,0,0,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-12.8,32,102400,805,1396,243,552,795,94,58600,79200,12700,2180,280,6.7,2,1,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-12.8,31,102300,885,1396,245,611,815,94,65600,82100,13400,2400,280,5.7,3,1,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-11.1,32,102200,895,1396,257,616,800,103,65600,80400,13900,2590,280,6.2,2,2,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-9.4,35,102100,834,1396,267,579,716,151,60900,71800,17800,3550,250,7.2,5,5,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.9,37,102000,707,1396,267,413,486,166,43800,48800,19000,3520,250,7.7,5,5,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-8.9,35,102000,523,1396,265,338,626,103,34800,58100,13000,1950,260,6.7,3,3,40.0,77777,9,999999999,69,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,102000,293,1396,261,148,416,60,15000,32200,8200,1060,260,6.7,4,2,40.0,77777,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-7.2,43,102000,55,942,265,14,45,12,1700,1600,1600,200,270,7.7,3,3,40.0,77777,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-7.2,43,102100,0,0,262,0,0,0,0,0,0,0,260,5.7,2,2,40.0,77777,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,102100,0,0,266,0,0,0,0,0,0,0,250,6.2,3,3,32.0,77777,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,102200,0,0,260,0,0,0,0,0,0,0,240,4.6,6,2,32.0,77777,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,102200,0,0,265,0,0,0,0,0,0,0,240,5.2,8,4,32.0,7620,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,102200,0,0,273,0,0,0,0,0,0,0,260,4.6,7,7,32.0,1981,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,102300,0,0,292,0,0,0,0,0,0,0,250,4.6,10,10,32.0,1981,9,999999999,80,0.1130,0,88,0.150,0.0,1.0 +1995,2,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.8,49,102400,0,0,281,0,0,0,0,0,0,0,20,7.2,10,10,32.0,1676,9,999999999,80,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-8.3,57,102500,0,0,271,0,0,0,0,0,0,0,40,5.2,10,10,32.0,1829,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-7.8,62,102500,0,0,270,0,0,0,0,0,0,0,20,5.2,10,10,19.2,975,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.2,69,102500,0,0,268,0,0,0,0,0,0,0,30,4.6,10,10,24.0,1829,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-7.2,72,102600,0,0,266,0,0,0,0,0,0,0,30,4.6,10,10,12.8,975,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-6.7,79,102700,0,0,264,0,0,0,0,0,0,0,50,4.1,10,10,4.8,457,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-7.8,83,102800,20,570,256,2,0,2,0,0,0,0,30,5.2,10,10,4.8,518,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-9.4,75,102900,228,1395,253,36,0,36,4200,0,4200,1360,30,6.2,10,10,12.8,1311,9,999999999,89,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-8.9,78,102900,468,1395,253,75,0,75,8800,0,8800,3130,20,4.6,10,10,14.4,396,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-10.6,65,103000,667,1395,254,138,0,138,16100,0,16100,5920,40,5.2,10,10,12.8,823,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-8.9,71,103100,811,1395,258,174,0,174,20400,0,20400,7800,20,4.1,10,10,6.4,853,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-8.3,79,103100,891,1395,256,194,0,194,22900,0,22900,8880,50,3.6,10,10,6.4,701,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-9.4,65,103100,901,1395,259,196,0,196,23100,0,23100,9000,50,4.6,10,10,14.4,1341,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-11.1,53,103100,841,1395,260,227,0,227,26200,0,26200,9680,50,3.6,10,10,20.8,3962,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-15.0,34,103100,713,1395,260,187,0,187,21400,0,21400,7690,60,3.6,10,10,24.0,3962,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-15.0,31,103100,528,1395,264,130,0,130,14800,0,14800,5050,60,3.1,10,10,24.0,4267,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-16.1,27,103100,298,1395,265,51,0,51,5900,0,5900,1950,60,3.6,10,10,24.0,1128,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-15.6,28,103200,58,965,266,8,0,8,1000,0,1000,310,70,3.1,10,10,32.0,1128,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-15.0,30,103300,0,0,267,0,0,0,0,0,0,0,90,2.1,10,10,32.0,1128,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-16.1,27,103300,0,0,265,0,0,0,0,0,0,0,70,2.6,10,10,32.0,1128,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-16.1,27,103400,0,0,265,0,0,0,0,0,0,0,70,3.1,10,10,32.0,1189,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-16.1,27,103400,0,0,265,0,0,0,0,0,0,0,70,3.1,10,10,32.0,1128,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-15.6,28,103400,0,0,266,0,0,0,0,0,0,0,70,3.1,10,10,32.0,1067,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +1995,2,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-15.0,30,103400,0,0,267,0,0,0,0,0,0,0,70,2.6,10,10,32.0,1128,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-12.2,37,103400,0,0,272,0,0,0,0,0,0,0,80,3.1,10,10,32.0,1067,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.6,42,103400,0,0,273,0,0,0,0,0,0,0,80,3.1,10,10,32.0,975,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,103300,0,0,276,0,0,0,0,0,0,0,80,3.1,10,10,20.8,701,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-5.0,69,103300,0,0,279,0,0,0,0,0,0,0,100,5.2,10,10,24.0,823,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-5.0,69,103300,0,0,279,0,0,0,0,0,0,0,90,4.1,10,10,24.0,762,9,999999999,139,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-5.0,76,103300,0,0,275,0,0,0,0,0,0,0,60,4.1,10,10,11.2,610,9,999999999,139,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-4.4,80,103300,22,593,275,2,0,2,0,0,0,0,70,3.6,10,10,17.6,427,9,999999999,139,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-4.4,76,103300,235,1394,278,33,0,33,3900,0,3900,1270,60,3.6,10,10,19.2,518,9,999999999,139,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.3,83,103300,474,1394,279,84,0,84,9800,0,9800,3450,60,3.1,10,10,12.8,518,9,999999999,150,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.8,87,103200,674,1394,279,111,0,111,13200,0,13200,4990,40,3.6,10,10,4.8,396,9,999999999,150,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-1.1,96,103100,818,1394,283,118,0,118,14300,0,14300,5690,50,3.6,10,10,4.8,183,9,999999999,150,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-0.6,100,103100,898,1394,284,132,0,132,16000,0,16000,6490,50,3.6,10,10,3.2,152,9,999999999,160,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-1.1,100,102900,908,1394,281,134,0,134,16300,0,16300,6600,40,3.6,10,10,3.2,122,9,999999999,160,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102800,847,1394,286,123,0,123,14900,0,14900,5970,40,4.1,10,10,2.4,122,9,999999999,160,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102600,719,1394,287,101,0,101,12200,0,12200,4730,50,3.6,10,10,2.4,122,9,999999999,170,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,102600,534,1394,289,68,0,68,8100,0,8100,3020,50,3.6,10,10,3.2,122,9,999999999,170,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102500,304,1394,290,32,0,32,3800,0,3800,1330,40,3.6,10,10,3.2,122,9,999999999,170,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102500,62,988,290,6,0,6,700,0,700,240,30,3.1,10,10,2.4,91,9,999999999,179,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102400,0,0,290,0,0,0,0,0,0,0,40,3.1,10,10,1.6,91,9,999999999,179,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102400,0,0,292,0,0,0,0,0,0,0,20,3.6,10,10,0.8,91,9,999999999,179,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102400,0,0,290,0,0,0,0,0,0,0,10,3.6,10,10,0.8,91,9,999999999,189,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102400,0,0,287,0,0,0,0,0,0,0,360,3.1,10,10,0.4,61,9,999999999,189,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102400,0,0,286,0,0,0,0,0,0,0,10,3.1,10,10,0.4,61,9,999999999,200,0.1140,0,88,0.150,0.0,1.0 +1995,2,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,102300,0,0,287,0,0,0,0,0,0,0,80,2.1,10,10,1.6,61,9,999999999,200,0.1140,0,88,0.150,0.0,1.0 +1995,2,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102300,0,0,286,0,0,0,0,0,0,0,110,1.5,10,10,2.4,91,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,102200,0,0,289,0,0,0,0,0,0,0,50,2.1,10,10,1.6,91,9,999999999,209,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102100,0,0,290,0,0,0,0,0,0,0,110,2.1,10,10,3.2,91,9,999999999,209,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102000,0,0,292,0,0,0,0,0,0,0,100,2.1,10,10,3.2,91,9,999999999,209,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102000,0,0,292,0,0,0,0,0,0,0,60,2.6,10,10,3.2,91,9,999999999,220,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101900,0,0,292,0,0,0,0,0,0,0,80,4.1,10,10,4.8,91,9,999999999,220,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101900,25,639,295,2,0,2,300,0,300,80,40,2.6,10,10,1.6,91,9,999999999,220,0.1150,0,88,0.150,2.0,1.0 +1995,2,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,101800,242,1394,298,27,0,27,3200,0,3200,1080,70,2.6,10,10,0.8,91,9,999999999,220,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,101700,481,1394,310,55,0,55,6600,0,6600,2430,130,2.1,10,10,0.8,91,9,999999999,220,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,101700,680,1394,325,89,0,89,10700,0,10700,4160,190,4.1,10,10,1.6,122,9,999999999,220,0.1150,0,88,0.150,2.0,1.0 +1995,2,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,101600,825,1394,323,114,0,114,13800,0,13800,5540,200,2.1,10,10,0.0,91,9,999999999,220,0.1150,0,88,0.150,2.0,1.0 +1995,2,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,101600,905,1394,310,154,0,154,18500,0,18500,7420,60,3.1,10,10,3.2,244,9,999999999,209,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,101500,914,1394,316,131,0,131,16000,0,16000,6490,20,2.1,10,10,1.6,152,9,999999999,209,0.1150,0,88,0.150,2.0,1.0 +1995,2,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101400,853,1394,319,119,0,119,14500,0,14500,5820,360,2.1,10,10,1.6,152,9,999999999,209,0.1150,0,88,0.150,1.0,1.0 +1995,2,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101500,725,1394,319,96,0,96,11600,0,11600,4540,10,2.6,10,10,1.6,91,9,999999999,209,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,101500,539,1394,320,64,0,64,7700,0,7700,2870,20,2.1,10,10,0.8,91,9,999999999,209,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101500,309,1394,319,32,0,32,3800,0,3800,1330,50,2.1,10,10,4.0,122,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,101600,65,1010,321,11,0,11,1300,0,1300,420,20,2.6,10,10,4.0,1676,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,101600,0,0,316,0,0,0,0,0,0,0,30,3.6,10,10,4.0,1433,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,101700,0,0,315,0,0,0,0,0,0,0,20,4.1,10,10,11.2,1433,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101700,0,0,312,0,0,0,0,0,0,0,30,4.1,10,10,14.4,1372,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.2,2.5,89,101700,0,0,312,0,0,0,0,0,0,0,20,4.1,10,10,16.0,2896,9,999999999,200,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.3,1.7,93,101700,0,0,311,0,0,0,0,0,0,0,20,4.1,10,10,16.0,2591,9,999999999,189,0.1150,0,88,0.150,0.0,1.0 +1995,2,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.5,0.9,89,101800,0,0,311,0,0,0,0,0,0,0,30,4.1,10,10,19.2,3048,9,999999999,189,0.1150,0,88,0.150,0.0,1.0 +2004,3,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.2,57,102200,0,0,296,0,0,0,0,0,0,0,240,4.1,10,8,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.8,-0.5,62,102300,0,0,303,0,0,0,0,0,0,0,260,4.1,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.9,-1.3,52,102200,0,0,302,0,0,0,0,0,0,0,270,4.1,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,102200,0,0,302,0,0,0,0,0,0,0,260,4.1,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,102300,0,0,298,0,0,0,0,0,0,0,0,0.0,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,102400,0,0,294,0,0,0,0,0,0,0,260,3.6,10,9,16.0,7620,9,999999999,80,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,102400,31,708,291,0,49,0,0,0,0,0,210,2.1,10,8,16.0,7620,9,999999999,80,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,102500,254,1392,295,143,320,84,14300,22800,10100,1600,0,0.0,7,5,16.0,77777,9,999999999,80,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.8,37,102500,494,1392,324,327,605,112,33300,55000,13700,2030,0,0.0,10,9,16.0,7620,9,999999999,80,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,102500,693,1392,337,485,705,133,50400,69000,15900,2760,30,2.6,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,102500,837,1392,340,603,757,147,63500,76000,17600,3480,180,4.1,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-0.6,37,102500,916,1392,339,678,807,145,72000,82000,17900,3800,160,4.6,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-1.7,33,102500,925,1392,331,686,815,142,70700,81000,16700,3310,140,4.6,10,8,16.0,7620,9,999999999,100,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-5.0,25,102400,864,1392,334,628,787,138,66500,79600,17000,3400,150,4.6,10,9,16.0,7620,9,999999999,100,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-2.8,34,102400,736,1392,329,518,639,179,54800,64500,20600,3890,150,6.2,10,9,16.0,7620,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-3.3,35,102400,550,1392,332,287,262,184,30200,25700,20000,4010,150,5.7,10,10,16.0,7620,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.3,38,102400,319,1392,327,107,66,91,11600,5600,10300,2270,150,5.2,10,10,16.0,7620,9,999999999,100,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,102300,72,1056,323,17,64,14,2100,2700,1900,240,140,4.6,10,10,16.0,3962,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,102300,0,0,291,0,0,0,0,0,0,0,140,5.2,8,5,16.0,77777,9,999999999,80,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,102300,0,0,308,0,0,0,0,0,0,0,150,3.6,10,9,16.0,7620,9,999999999,89,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,102300,0,0,305,0,0,0,0,0,0,0,150,3.1,10,9,16.0,7620,9,999999999,100,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,102300,0,0,306,0,0,0,0,0,0,0,140,2.1,10,9,16.0,7620,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,102200,0,0,312,0,0,0,0,0,0,0,110,1.5,10,10,16.0,7620,9,999999999,129,0.1170,0,88,0.140,0.0,1.0 +2004,3,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102100,0,0,312,0,0,0,0,0,0,0,100,2.1,10,10,14.4,7620,9,999999999,150,0.1170,0,88,0.140,0.0,1.0 +2004,3,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102000,0,0,316,0,0,0,0,0,0,0,120,1.5,10,10,16.0,3962,9,999999999,179,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102000,0,0,316,0,0,0,0,0,0,0,130,2.6,10,10,16.0,7620,9,999999999,200,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,101900,0,0,316,0,0,0,0,0,0,0,140,2.6,10,10,16.0,3658,9,999999999,209,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,101900,0,0,319,0,0,0,0,0,0,0,0,0.0,10,10,16.0,3353,9,999999999,229,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101800,0,0,319,0,0,0,0,0,0,0,120,1.5,10,10,14.4,3048,9,999999999,250,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101800,0,0,319,0,0,0,0,0,0,0,0,0.0,10,10,12.8,2743,9,999999999,259,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101700,34,731,319,0,0,0,0,0,0,0,140,3.1,10,10,11.2,2743,9,999999999,270,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,101800,261,1392,323,37,0,37,4300,0,4300,1440,190,2.6,10,10,11.2,2438,9,999999999,270,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,101700,501,1392,326,99,0,99,11400,0,11400,4020,190,5.7,10,10,12.8,2743,9,999999999,259,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,101600,700,1392,332,144,0,144,16800,0,16800,6270,180,4.1,10,10,11.2,488,9,999999999,259,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,101600,844,1392,332,346,97,287,38000,9900,32000,9170,200,2.1,10,10,12.8,1981,9,999999999,240,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101500,923,1392,341,360,72,312,39600,7400,34700,10540,160,2.1,10,10,14.4,4267,9,999999999,209,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101300,932,1392,359,567,396,301,61000,42500,32500,8320,160,2.6,10,10,16.0,3962,9,999999999,189,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,101300,870,1392,348,570,566,215,60600,58200,24100,5280,190,3.1,9,9,16.0,4267,9,999999999,189,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101200,741,1392,346,523,598,204,54700,60300,22500,4510,190,5.2,9,9,16.0,6706,9,999999999,189,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,101200,555,1392,360,218,93,181,23900,9000,20300,4940,220,5.2,9,9,16.0,4267,9,999999999,179,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,9.4,69,101200,324,1392,357,51,0,51,5900,0,5900,2010,230,7.7,9,9,16.0,4267,9,999999999,179,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101300,76,1078,326,18,54,15,2100,2100,1900,250,240,7.2,5,5,16.0,77777,9,999999999,179,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,101300,0,0,321,0,0,0,0,0,0,0,230,6.2,2,2,16.0,77777,9,999999999,179,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,5.0,46,101500,0,0,340,0,0,0,0,0,0,0,300,9.8,5,5,16.0,77777,9,999999999,160,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,101700,0,0,314,0,0,0,0,0,0,0,290,9.3,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,101700,0,0,306,0,0,0,0,0,0,0,300,7.2,0,0,16.0,77777,9,999999999,110,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,2.2,48,101800,0,0,301,0,0,0,0,0,0,0,310,9.8,0,0,16.0,77777,9,999999999,110,0.1180,0,88,0.140,0.0,1.0 +2004,3,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.7,50,101900,0,0,296,0,0,0,0,0,0,0,300,8.2,0,0,16.0,77777,9,999999999,100,0.1180,0,88,0.140,0.0,1.0 +2004,3,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.7,54,101900,0,0,291,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.7,54,102000,0,0,291,0,0,0,0,0,0,0,290,8.2,0,0,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,101900,0,0,296,0,0,0,0,0,0,0,310,3.1,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,102000,0,0,293,0,0,0,0,0,0,0,280,3.6,2,2,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.7,63,102100,0,0,294,0,0,0,0,0,0,0,310,4.1,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,102100,0,0,293,0,0,0,0,0,0,0,310,4.1,2,2,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,102200,38,777,301,1,71,1,500,4000,300,40,300,7.2,5,5,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.7,59,102300,268,1391,321,157,372,85,15800,27300,10600,1610,300,10.3,9,9,16.0,7620,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.7,54,102300,508,1391,308,340,616,114,34600,56400,13900,2080,310,9.3,5,5,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.7,50,102300,707,1391,313,497,710,135,51700,69700,16100,2830,320,9.3,5,5,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.7,47,102300,851,1391,313,615,763,147,64800,76800,17700,3540,320,11.3,3,3,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,1.1,42,102300,929,1391,314,690,813,145,73400,82700,18000,3870,310,9.8,2,2,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,1.1,40,102200,938,1391,324,698,821,142,72000,81700,16800,3390,310,10.3,5,5,16.0,77777,9,999999999,120,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,1.7,41,102100,876,1391,347,640,793,139,67900,80300,17200,3480,290,8.2,9,9,16.0,7620,9,999999999,129,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,1.1,39,102200,747,1391,347,529,651,179,56200,65900,20700,3910,300,8.8,9,9,16.0,7620,9,999999999,129,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,1.1,40,102200,561,1391,353,245,146,187,26600,14400,20800,4390,310,8.2,10,10,16.0,7620,9,999999999,139,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.0,1.0,41,102200,329,1391,351,187,410,89,19200,33100,11300,1660,300,6.2,10,10,16.1,4200,9,999999999,139,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.1,45,102300,80,1101,346,21,129,14,2500,6600,2000,270,320,6.7,10,10,16.0,7620,9,999999999,139,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.1,47,102400,0,0,343,0,0,0,0,0,0,0,320,5.2,10,10,16.0,7620,9,999999999,139,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.1,48,102300,0,0,340,0,0,0,0,0,0,0,340,3.6,10,10,16.0,7620,9,999999999,139,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,102400,0,0,338,0,0,0,0,0,0,0,330,3.6,10,10,16.0,3658,9,999999999,150,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.7,54,102300,0,0,336,0,0,0,0,0,0,0,350,2.1,10,10,16.0,3658,9,999999999,160,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,1.7,56,102300,0,0,333,0,0,0,0,0,0,0,340,2.6,10,10,16.0,7620,9,999999999,170,0.1190,0,88,0.140,0.0,1.0 +2004,3,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,102200,0,0,329,0,0,0,0,0,0,0,170,2.1,10,10,16.0,3353,9,999999999,179,0.1190,0,88,0.140,0.0,1.0 +2004,3,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,3.9,76,102300,0,0,325,0,0,0,0,0,0,0,170,2.1,10,10,16.0,3048,9,999999999,189,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,102200,0,0,327,0,0,0,0,0,0,0,170,2.6,10,10,16.0,3048,9,999999999,200,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,102200,0,0,326,0,0,0,0,0,0,0,170,2.6,10,10,16.0,2438,9,999999999,209,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,102200,0,0,324,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1524,9,999999999,229,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,102300,0,0,328,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1402,9,999999999,229,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102300,0,0,326,0,0,0,0,0,0,0,70,1.5,10,10,8.0,1219,9,999999999,240,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102200,42,799,326,1,6,1,200,200,200,20,140,2.6,10,10,6.4,1676,9,999999999,250,0.1200,0,88,0.140,1.0,1.0 +2004,3,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,275,1390,323,91,28,85,9900,2300,9400,2040,140,4.6,10,10,9.6,1219,9,999999999,240,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,515,1390,323,56,0,56,6800,0,6800,2520,130,3.6,10,10,12.8,1981,9,999999999,240,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102200,714,1390,323,78,0,78,9600,0,9600,3760,140,4.6,10,10,9.6,1250,9,999999999,240,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,857,1390,323,100,0,100,12300,0,12300,5010,130,2.6,10,10,16.0,1189,9,999999999,229,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102200,936,1390,323,110,0,110,13600,0,13600,5620,140,4.6,10,10,12.8,1250,9,999999999,220,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102100,944,1390,326,119,0,119,14700,0,14700,6040,120,2.6,10,10,11.2,152,9,999999999,209,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102100,882,1390,326,105,0,105,12900,0,12900,5280,210,2.1,10,10,11.2,152,9,999999999,200,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,102100,753,1390,330,107,0,107,12900,0,12900,5070,0,0.0,10,10,9.6,213,9,999999999,179,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,102100,566,1390,330,134,0,134,15300,0,15300,5350,90,1.5,10,10,9.6,213,9,999999999,170,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102100,335,1390,326,80,6,78,9000,300,8900,2820,180,2.6,10,10,9.6,213,9,999999999,170,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102200,84,1124,326,22,68,18,2500,2800,2300,300,190,2.1,10,10,12.8,945,9,999999999,170,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,160,2.1,10,10,12.8,1097,9,999999999,170,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,170,3.1,10,10,9.6,1097,9,999999999,179,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,180,2.1,10,10,11.2,1097,9,999999999,189,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102300,0,0,326,0,0,0,0,0,0,0,0,0.0,10,10,9.6,1097,9,999999999,200,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1036,9,999999999,209,0.1200,0,88,0.140,0.0,1.0 +2004,3,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,11.2,2134,9,999999999,229,0.1200,0,88,0.140,0.0,1.0 +2004,3,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,160,2.6,10,10,8.0,1676,9,999999999,240,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1524,9,999999999,240,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102400,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1402,9,999999999,240,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1463,9,999999999,240,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,100,2.1,10,10,9.6,1341,9,999999999,240,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,0,0,323,0,0,0,0,0,0,0,90,2.6,10,10,9.6,1280,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,46,845,323,1,0,1,100,0,100,40,90,3.1,10,10,6.4,1280,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102300,283,1389,323,45,0,45,5200,0,5200,1740,110,5.2,10,10,4.8,183,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,102200,522,1389,320,56,0,56,6800,0,6800,2530,90,5.2,10,10,1.6,152,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,102200,721,1389,320,144,0,144,16900,0,16900,6360,100,5.7,10,10,3.2,152,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102000,864,1389,323,107,0,107,13100,0,13100,5330,110,7.7,10,10,11.2,427,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101800,942,1389,323,116,0,116,14300,0,14300,5900,110,6.7,10,10,2.4,183,9,999999999,259,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101600,950,1389,323,113,0,113,14000,0,14000,5780,110,7.7,10,10,0.8,91,9,999999999,259,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101400,888,1389,323,175,0,175,20800,0,20800,8180,100,5.7,10,10,0.8,91,9,999999999,270,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,101300,758,1389,326,107,0,107,12900,0,12900,5080,110,4.1,10,10,0.4,61,9,999999999,279,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,101300,571,1389,326,123,0,123,14200,0,14200,5050,170,2.6,10,10,0.2,30,9,999999999,279,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101100,340,1389,323,99,39,89,10800,3400,10000,2290,170,3.6,10,10,0.2,30,9,999999999,279,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101000,88,1169,323,25,81,20,2900,3300,2600,340,190,3.1,10,10,3.6,213,9,999999999,270,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101000,0,0,323,0,0,0,0,0,0,0,190,3.6,10,10,0.4,30,9,999999999,270,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,100900,0,0,326,0,0,0,0,0,0,0,0,0.0,10,10,0.1,30,9,999999999,279,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,100800,0,0,326,0,0,0,0,0,0,0,90,2.1,10,10,0.1,30,9,999999999,290,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,100800,0,0,323,0,0,0,0,0,0,0,120,2.1,10,10,0.1,30,9,999999999,300,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,100600,0,0,323,0,0,0,0,0,0,0,70,4.1,10,10,1.2,91,9,999999999,320,0.1210,0,88,0.140,0.0,1.0 +2004,3,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,100700,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,6.4,1158,9,999999999,340,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,100600,0,0,326,0,0,0,0,0,0,0,0,0.0,10,10,6.4,1067,9,999999999,350,0.1210,0,88,0.140,1.0,1.0 +2004,3,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,100600,0,0,326,0,0,0,0,0,0,0,0,0.0,10,10,6.4,1097,9,999999999,359,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,100500,0,0,332,0,0,0,0,0,0,0,350,2.6,10,10,6.4,1280,9,999999999,359,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,100500,0,0,332,0,0,0,0,0,0,0,0,0.0,10,10,6.4,1128,9,999999999,370,0.1210,0,88,0.140,1.0,1.0 +2004,3,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.9,100,100500,0,0,336,0,0,0,0,0,0,0,170,3.1,10,10,4.0,2286,9,999999999,370,0.1210,0,88,0.140,2.0,1.0 +2004,3,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,100400,0,0,332,0,0,0,0,0,0,0,0,0.0,10,10,3.2,91,9,999999999,370,0.1210,0,88,0.140,1.0,1.0 +2004,3,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,100400,50,868,332,1,0,1,100,0,100,40,170,2.1,10,10,3.2,91,9,999999999,370,0.1210,0,88,0.140,1.0,1.0 +2004,3,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,100300,290,1389,343,35,0,35,4100,0,4100,1420,170,5.2,10,10,0.4,61,9,999999999,350,0.1210,0,88,0.140,1.0,1.0 +2004,3,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,100200,529,1389,349,56,0,56,6800,0,6800,2540,180,9.8,10,10,0.2,30,9,999999999,340,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100200,727,1389,353,85,0,85,10400,0,10400,4090,200,9.8,10,10,0.4,61,9,999999999,320,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100000,871,1389,346,100,0,100,12400,0,12400,5040,230,8.2,10,10,0.4,61,9,999999999,309,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,100000,949,1389,343,116,0,116,14300,0,14300,5920,200,8.2,10,10,0.4,61,9,999999999,300,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100000,957,1389,353,131,0,131,16100,0,16100,6600,200,5.2,10,10,9.6,701,9,999999999,300,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,99900,894,1389,362,105,0,105,13000,0,13000,5310,240,3.1,10,10,16.0,1829,9,999999999,270,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.3,90,100000,764,1389,361,85,0,85,10500,0,10500,4160,250,5.2,10,9,16.0,3048,9,999999999,250,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.2,80,100000,577,1389,373,364,408,194,38300,40600,21400,4270,290,10.8,10,10,12.8,1524,9,999999999,220,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.6,75,100100,345,1389,358,47,0,47,5500,0,5500,1920,260,9.3,10,9,16.0,4267,9,999999999,209,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.0,77,100100,92,1192,332,26,74,21,2900,3100,2700,360,250,7.2,10,5,16.0,77777,9,999999999,189,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.2,60,100300,0,0,341,0,0,0,0,0,0,0,290,9.8,10,7,16.0,1524,9,999999999,170,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.6,69,100600,0,0,326,0,0,0,0,0,0,0,320,10.3,8,8,16.0,1158,9,999999999,150,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,100700,0,0,304,0,0,0,0,0,0,0,300,6.7,3,3,16.0,77777,9,999999999,129,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,1.7,56,100900,0,0,301,0,0,0,0,0,0,0,300,8.8,3,3,16.0,77777,9,999999999,120,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,101000,0,0,300,0,0,0,0,0,0,0,300,8.8,5,5,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2004,3,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.1,53,101000,0,0,293,0,0,0,0,0,0,0,300,10.8,10,5,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2004,3,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,101100,0,0,284,0,0,0,0,0,0,0,300,9.8,3,3,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.8,49,101100,0,0,290,0,0,0,0,0,0,0,300,9.3,6,6,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,101200,0,0,298,0,0,0,0,0,0,0,310,10.3,8,8,16.0,1463,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,101200,0,0,282,0,0,0,0,0,0,0,300,10.8,4,4,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101300,0,0,280,0,0,0,0,0,0,0,300,8.8,4,4,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101400,0,0,280,0,0,0,0,0,0,0,310,4.6,5,5,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101400,54,914,275,6,110,3,1100,6500,700,110,310,7.7,3,3,16.0,77777,9,999999999,80,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101500,297,1388,275,184,398,98,18400,30600,11900,1870,310,8.2,3,3,16.0,77777,9,999999999,80,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,101500,536,1388,295,357,613,119,36400,56900,14400,2210,300,7.2,8,8,16.0,1280,9,999999999,80,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.2,48,101500,734,1388,290,521,721,138,54300,71200,16500,2970,300,7.7,4,4,16.0,7620,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.2,48,101400,877,1388,288,645,793,143,68400,80200,17500,3580,290,4.6,3,3,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.2,46,101400,955,1388,290,714,825,145,73900,82200,17100,3550,250,4.6,3,3,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.7,45,101200,963,1388,295,722,833,142,74800,83100,17000,3550,260,4.6,3,3,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101100,899,1388,286,663,811,136,68400,80500,16100,3110,210,5.2,0,0,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101000,770,1388,298,547,758,126,57700,75800,15600,2850,230,2.6,3,3,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.0,56,100900,582,1388,297,391,671,109,40500,64000,13600,2140,180,6.7,5,5,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.7,73,100900,350,1388,306,199,485,77,20300,39900,10200,1350,170,7.7,9,9,16.0,7620,9,999999999,110,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,100900,96,1214,302,25,92,18,2800,4300,2400,310,150,6.7,9,9,16.0,7620,9,999999999,110,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,100900,0,0,297,0,0,0,0,0,0,0,140,6.7,8,8,16.0,7620,9,999999999,110,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,100900,0,0,311,0,0,0,0,0,0,0,150,6.7,10,10,16.0,3353,9,999999999,110,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,100800,0,0,315,0,0,0,0,0,0,0,140,5.7,10,10,16.0,1829,9,999999999,120,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,100700,0,0,312,0,0,0,0,0,0,0,140,4.6,10,10,16.0,1829,9,999999999,120,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100600,0,0,313,0,0,0,0,0,0,0,100,4.1,10,10,16.0,1433,9,999999999,129,0.1220,0,88,0.140,0.0,1.0 +2004,3,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100500,0,0,313,0,0,0,0,0,0,0,90,3.6,10,10,14.4,1250,9,999999999,129,0.1220,0,88,0.140,0.0,1.0 +2004,3,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,100300,0,0,310,0,0,0,0,0,0,0,90,4.6,10,10,16.0,762,9,999999999,129,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,100300,0,0,310,0,0,0,0,0,0,0,90,5.7,10,10,16.0,610,9,999999999,129,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100200,0,0,305,0,0,0,0,0,0,0,90,5.7,10,10,16.0,792,9,999999999,129,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,100300,0,0,306,0,0,0,0,0,0,0,100,5.2,10,10,16.0,671,9,999999999,129,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,100400,0,0,303,0,0,0,0,0,0,0,90,5.7,10,10,14.4,671,9,999999999,120,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,100400,0,0,298,0,0,0,0,0,0,0,60,4.1,10,10,11.2,549,9,999999999,120,0.1230,0,88,0.140,1.0,1.0 +2004,3,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,100500,59,959,292,2,0,2,300,0,300,80,50,4.6,10,10,3.2,244,9,999999999,120,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,100500,304,1387,292,52,0,52,6000,0,6000,2000,40,5.2,10,10,3.2,183,9,999999999,110,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,100500,543,1387,298,119,0,119,13700,0,13700,4810,30,5.2,10,10,9.6,396,9,999999999,110,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100500,741,1387,298,176,0,176,20400,0,20400,7540,30,7.2,10,10,8.0,244,9,999999999,110,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100600,884,1387,298,213,6,209,24900,500,24600,9390,30,6.2,10,10,11.2,244,9,999999999,110,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,100700,962,1387,296,195,0,195,23200,0,23200,9250,30,5.2,10,10,4.8,335,9,999999999,110,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,100700,969,1387,297,221,6,216,26100,500,25700,10060,20,4.6,10,10,6.4,396,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100800,905,1387,298,180,0,180,21400,0,21400,8450,40,5.7,10,10,12.8,549,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,100900,775,1387,300,158,0,158,18600,0,18600,7090,40,4.6,10,10,16.0,579,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101000,587,1387,298,139,0,139,15900,0,15900,5610,70,3.6,10,10,6.4,366,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101100,355,1387,297,124,67,107,13600,5900,12100,2690,60,1.5,10,10,12.8,762,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,101200,100,1237,296,18,4,17,2000,0,2000,630,0,0.0,10,10,11.2,244,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,101200,0,0,296,0,0,0,0,0,0,0,140,3.6,10,10,12.8,213,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101300,0,0,292,0,0,0,0,0,0,0,130,3.1,10,10,11.2,183,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101300,0,0,292,0,0,0,0,0,0,0,120,4.1,10,10,14.4,152,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101400,0,0,292,0,0,0,0,0,0,0,130,2.6,10,10,8.0,244,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,1.1,100,101400,0,0,292,0,0,0,0,0,0,0,140,3.6,10,10,14.4,244,9,999999999,100,0.1230,0,88,0.140,0.0,1.0 +2004,3,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101400,0,0,295,0,0,0,0,0,0,0,150,3.6,10,10,14.4,457,9,999999999,89,0.1230,0,88,0.140,0.0,1.0 +2004,3,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101400,0,0,295,0,0,0,0,0,0,0,150,3.6,10,10,14.4,457,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,101500,0,0,295,0,0,0,0,0,0,0,160,3.6,10,10,14.4,427,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.7,100,101400,0,0,296,0,0,0,0,0,0,0,150,3.1,10,10,16.0,335,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101400,0,0,298,0,0,0,0,0,0,0,130,2.6,10,10,16.0,274,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,101500,0,0,298,0,0,0,0,0,0,0,190,3.1,10,10,16.0,366,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101500,0,0,298,0,0,0,0,0,0,0,160,3.1,10,10,16.0,427,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101600,63,982,283,10,85,7,1400,4200,1100,140,240,2.1,8,8,16.0,945,9,999999999,80,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,101700,311,1386,293,197,265,137,20000,20900,15300,3010,220,1.5,9,9,14.4,975,9,999999999,80,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101700,550,1386,279,285,225,196,30700,22000,22000,4590,0,0.0,5,5,16.0,77777,9,999999999,80,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101800,748,1386,279,533,635,189,56200,64300,21400,4170,210,2.1,5,5,16.0,77777,9,999999999,80,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101800,891,1386,302,639,605,249,67200,62300,27100,6350,190,2.1,9,9,16.0,1829,9,999999999,80,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101900,968,1386,303,342,60,299,37600,6100,33300,10660,180,4.6,9,9,16.0,1981,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,101900,975,1386,296,244,12,236,28800,1000,28000,10810,140,4.6,8,8,16.0,2286,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,101900,911,1386,295,116,0,116,14300,0,14300,5840,140,4.1,9,9,16.0,1311,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.8,100,102000,781,1386,293,90,0,90,11100,0,11100,4420,110,3.1,9,9,11.2,518,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,102000,593,1386,304,140,0,140,16100,0,16100,5670,120,4.1,10,10,11.2,457,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.8,100,102100,361,1386,302,81,0,81,9200,0,9200,3000,140,5.7,10,10,16.0,732,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.8,100,102100,104,1259,302,34,95,27,3800,4200,3400,480,110,3.6,10,10,14.4,366,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,102200,0,0,301,0,0,0,0,0,0,0,90,4.6,10,10,16.0,762,9,999999999,89,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,102300,0,0,293,0,0,0,0,0,0,0,100,4.6,9,9,16.0,945,9,999999999,100,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,102300,0,0,303,0,0,0,0,0,0,0,110,3.6,10,10,16.0,914,9,999999999,100,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,102400,0,0,303,0,0,0,0,0,0,0,110,6.2,10,10,16.0,975,9,999999999,100,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,102400,0,0,303,0,0,0,0,0,0,0,110,4.6,10,10,16.0,1524,9,999999999,100,0.1240,0,88,0.140,0.0,1.0 +2004,3,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,102500,0,0,303,0,0,0,0,0,0,0,110,4.6,10,10,16.1,1500,9,999999999,100,0.1240,0,88,0.140,0.0,1.0 +2004,3,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,102400,0,0,301,0,0,0,0,0,0,0,60,3.6,10,10,16.0,945,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,102500,0,0,295,0,0,0,0,0,0,0,70,4.1,10,9,16.0,914,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,102500,0,0,298,0,0,0,0,0,0,0,60,3.6,10,10,16.0,2743,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,102500,0,0,297,0,0,0,0,0,0,0,50,3.6,10,10,16.0,2591,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,102500,0,0,295,0,0,0,0,0,0,0,50,4.6,10,10,16.0,1524,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102600,0,0,268,0,0,0,0,0,0,0,40,4.1,9,5,16.0,77777,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,102700,69,1028,275,12,79,8,1500,4000,1200,160,40,4.6,10,7,16.0,7620,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102800,318,1386,288,186,230,133,19700,18800,15400,2900,60,4.6,10,9,16.0,7010,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,102800,558,1386,291,153,6,150,17300,400,17100,5760,50,4.6,10,9,16.0,7010,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,102800,755,1386,305,188,0,188,21700,0,21700,7990,40,6.7,10,10,16.0,7010,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,102800,897,1386,305,294,42,267,32400,4300,29600,9120,30,8.2,10,10,16.0,732,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,102600,974,1386,299,732,680,252,77900,70500,28100,7140,40,9.8,10,9,16.0,7620,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,102700,981,1386,287,704,659,235,72700,65800,26000,6390,30,9.3,10,7,16.0,7620,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,102500,917,1386,305,483,257,313,51800,27500,33500,8640,40,9.8,10,9,16.0,7620,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,102500,786,1386,303,565,622,211,59400,63300,23300,4830,30,8.2,10,9,16.0,4267,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,102400,598,1386,300,339,327,197,35700,32900,21500,4360,30,9.8,10,9,16.0,4267,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,102400,366,1386,302,134,95,109,14500,8300,12300,2400,20,9.8,10,9,16.0,4267,9,999999999,100,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,102400,109,1282,300,35,92,28,3900,4100,3500,500,30,9.3,10,9,16.0,7620,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,102300,0,0,278,0,0,0,0,0,0,0,30,7.2,9,5,16.0,77777,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102300,0,0,261,0,0,0,0,0,0,0,20,6.7,0,0,16.0,77777,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,102200,0,0,268,0,0,0,0,0,0,0,10,8.2,2,2,16.0,77777,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,102200,0,0,265,0,0,0,0,0,0,0,10,9.3,1,1,16.0,77777,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,102100,0,0,272,0,0,0,0,0,0,0,10,7.7,6,5,16.0,77777,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,102000,0,0,286,0,0,0,0,0,0,0,360,8.2,10,9,16.0,7620,9,999999999,89,0.1250,0,88,0.140,0.0,1.0 +2004,3,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,102000,0,0,282,0,0,0,0,0,0,0,360,8.2,9,8,16.0,7620,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101900,0,0,287,0,0,0,0,0,0,0,360,7.2,9,9,16.0,1524,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101900,0,0,281,0,0,0,0,0,0,0,360,8.8,8,8,16.0,1676,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,101800,0,0,278,0,0,0,0,0,0,0,350,7.7,8,8,16.0,1829,9,999999999,100,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,101800,0,0,263,0,0,0,0,0,0,0,340,8.2,3,3,16.0,77777,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,101800,0,0,261,0,0,0,0,0,0,0,350,7.7,3,3,16.0,77777,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,101800,74,1050,263,0,0,0,0,0,0,0,350,7.7,3,3,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101700,326,1385,267,201,424,101,20400,34000,12300,1920,340,9.3,3,3,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-5.6,42,101600,565,1385,264,388,642,125,39600,60300,15000,2350,360,9.3,0,0,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-4.4,42,101600,762,1385,271,545,733,140,56900,72800,16700,3090,330,7.2,0,0,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-5.0,37,101500,904,1385,275,669,805,143,71200,81700,17700,3720,310,7.7,0,0,16.0,77777,9,999999999,69,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-4.4,33,101500,981,1385,294,738,830,148,76400,82800,17500,3780,330,4.6,6,2,16.0,77777,9,999999999,69,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-5.0,29,101400,987,1385,306,745,845,141,77600,84600,17200,3710,320,4.6,8,5,16.0,77777,9,999999999,69,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-6.1,26,101200,922,1385,307,681,811,139,70400,80700,16500,3280,10,3.1,7,5,16.0,77777,9,999999999,69,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-3.3,31,101200,791,1385,308,571,782,122,60400,78600,15400,2830,220,4.1,6,3,16.0,77777,9,999999999,69,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.2,39,101100,603,1385,324,409,684,110,42500,65700,13800,2190,200,4.6,10,9,16.0,7620,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-1.7,39,101100,371,1385,309,221,533,78,22500,44900,10500,1390,230,6.2,8,5,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,101100,113,1304,292,39,199,23,4200,10700,3200,410,190,5.7,7,5,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,101100,0,0,291,0,0,0,0,0,0,0,180,6.2,8,5,16.0,77777,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,101200,0,0,311,0,0,0,0,0,0,0,190,4.6,10,9,16.0,3658,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101100,0,0,324,0,0,0,0,0,0,0,210,3.6,10,10,16.0,3048,9,999999999,80,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101100,0,0,315,0,0,0,0,0,0,0,240,5.2,10,9,16.0,3658,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,101000,0,0,296,0,0,0,0,0,0,0,220,4.6,6,6,16.0,3658,9,999999999,89,0.1260,0,88,0.140,0.0,1.0 +2004,3,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,100900,0,0,321,0,0,0,0,0,0,0,240,4.6,10,10,16.0,3048,9,999999999,100,0.1260,0,88,0.140,0.0,1.0 +2004,3,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,100900,0,0,321,0,0,0,0,0,0,0,240,3.1,10,10,16.0,2743,9,999999999,110,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,100700,0,0,280,0,0,0,0,0,0,0,220,2.1,3,3,16.0,77777,9,999999999,100,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.7,83,100600,0,0,278,0,0,0,0,0,0,0,230,2.6,3,3,16.0,77777,9,999999999,100,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,100600,0,0,280,0,0,0,0,0,0,0,250,4.6,3,3,16.0,77777,9,999999999,89,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,100500,0,0,272,0,0,0,0,0,0,0,240,3.1,3,3,16.0,77777,9,999999999,89,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,100500,0,0,280,0,0,0,0,0,0,0,230,4.1,6,5,16.0,4267,9,999999999,89,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,100600,79,1096,293,0,0,0,0,0,0,0,270,8.2,6,6,16.0,77777,9,999999999,80,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-0.6,55,100600,333,1384,292,83,0,83,9300,0,9300,2940,250,10.8,4,4,16.0,77777,9,999999999,80,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,100700,572,1384,286,159,6,156,17900,500,17800,6000,270,12.9,4,4,16.0,77777,9,999999999,69,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-6.7,37,100800,769,1384,281,551,519,262,56400,52400,27200,6090,260,15.5,5,5,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-7.2,34,100800,910,1384,280,444,188,320,48300,19800,35300,9200,270,11.3,4,4,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-10.6,27,100800,987,1384,272,713,518,343,73700,53500,35400,10200,310,12.9,4,4,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-8.9,30,100900,993,1384,278,119,0,119,14800,0,14800,6150,290,10.8,5,5,16.0,77777,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-9.4,33,101000,928,1384,287,111,0,111,13700,0,13700,5650,290,11.8,10,9,16.0,2134,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101000,797,1384,288,153,0,153,18100,0,18100,7010,280,8.2,10,9,16.0,1981,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101100,608,1384,288,108,0,108,12700,0,12700,4690,290,9.8,10,9,16.0,1981,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101200,376,1384,288,164,197,111,17300,17100,12700,2220,280,10.3,10,9,16.0,1981,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101200,118,1326,272,40,98,32,4300,4500,3900,580,280,7.7,5,5,16.0,77777,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101300,0,0,265,0,0,0,0,0,0,0,300,9.8,2,2,16.0,77777,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-7.8,39,101400,0,0,267,0,0,0,0,0,0,0,290,6.7,3,3,16.0,77777,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,101500,0,0,266,0,0,0,0,0,0,0,280,8.2,3,3,16.0,77777,9,999999999,50,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,101500,0,0,255,0,0,0,0,0,0,0,280,7.7,0,0,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.6,51,101600,0,0,265,0,0,0,0,0,0,0,290,7.2,3,3,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.7,50,101600,0,0,248,0,0,0,0,0,0,0,310,8.2,0,0,16.0,77777,9,999999999,60,0.1270,0,88,0.140,0.0,1.0 +2004,3,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,101600,0,0,256,0,0,0,0,0,0,0,290,9.3,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-9.4,43,101700,0,0,253,0,0,0,0,0,0,0,300,9.3,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-9.4,43,101700,0,0,255,0,0,0,0,0,0,0,310,8.8,4,4,16.0,7620,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-10.0,43,101800,0,0,239,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.0,45,102000,0,0,237,0,0,0,0,0,0,0,300,9.3,0,0,16.0,77777,9,999999999,60,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.0,45,102100,0,0,250,0,0,0,0,0,0,0,300,9.8,4,4,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-9.4,45,102200,85,1141,264,0,0,0,0,0,0,0,310,7.7,8,8,16.0,1463,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-9.4,45,102300,340,1383,264,214,454,102,21800,37100,12600,1930,320,10.8,8,8,16.0,1341,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-11.1,37,102300,579,1383,253,400,653,126,41000,61700,15100,2400,310,12.4,4,4,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-9.4,38,102300,776,1383,258,557,757,131,58600,75700,16000,2970,290,8.8,3,3,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-10.0,34,102400,917,1383,262,681,804,146,72300,81700,18000,3860,310,9.8,3,3,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.9,34,102400,993,1383,265,750,836,147,77700,83500,17600,3860,310,11.8,2,2,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-8.9,31,102400,999,1383,272,757,851,141,79000,85300,17300,3800,310,10.8,3,3,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-8.3,32,102400,933,1383,272,693,817,140,71700,81400,16600,3370,310,10.8,2,2,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-7.8,31,102500,802,1383,268,577,770,129,61000,77400,16000,3010,310,7.2,0,0,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-8.3,31,102500,613,1383,265,420,702,108,43800,67800,13600,2180,310,11.3,0,0,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-7.8,35,102600,381,1383,273,228,534,80,23200,45400,10600,1430,310,10.3,3,3,16.0,77777,9,999999999,50,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-9.4,33,102700,122,1349,264,44,212,25,4600,11600,3500,450,320,8.2,2,2,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-11.1,30,102800,0,0,261,0,0,0,0,0,0,0,310,8.2,3,3,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-13.3,26,102900,0,0,246,0,0,0,0,0,0,0,320,9.8,0,0,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-13.3,27,103000,0,0,244,0,0,0,0,0,0,0,320,6.7,0,0,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-12.8,31,103100,0,0,241,0,0,0,0,0,0,0,330,5.7,0,0,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-12.8,32,103100,0,0,239,0,0,0,0,0,0,0,340,6.7,0,0,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-11.7,37,103100,0,0,246,0,0,0,0,0,0,0,330,4.1,2,2,16.0,77777,9,999999999,40,0.1280,0,88,0.140,0.0,1.0 +2004,3,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-11.7,38,103100,0,0,244,0,0,0,0,0,0,0,330,5.7,4,2,16.0,77777,9,999999999,40,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-12.2,40,103200,0,0,232,0,0,0,0,0,0,0,350,2.6,0,0,16.0,77777,9,999999999,40,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.7,40,103200,0,0,244,0,0,0,0,0,0,0,330,5.2,3,3,16.0,77777,9,999999999,40,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,103200,0,0,240,0,0,0,0,0,0,0,340,2.6,2,2,16.0,77777,9,999999999,50,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,103200,0,0,244,0,0,0,0,0,0,0,360,4.6,4,4,16.0,77777,9,999999999,50,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,103200,0,0,242,0,0,0,0,0,0,0,40,3.1,6,5,16.0,77777,9,999999999,50,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.0,49,103300,91,1164,241,0,0,0,0,0,0,0,330,2.1,2,2,16.0,7620,9,999999999,60,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-10.6,40,103300,347,1383,239,220,465,103,22400,38300,12800,1950,40,2.1,0,0,16.0,7620,9,999999999,69,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-12.8,31,103200,586,1383,270,406,665,123,41700,63100,14900,2370,80,2.6,10,9,16.0,7620,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-12.8,27,103200,782,1383,267,511,555,196,54100,56500,22000,4440,140,3.6,7,7,16.0,7620,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-9.4,38,103200,923,1383,272,556,393,293,60000,42200,31700,8040,140,5.2,10,8,16.0,7620,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.1,53,103100,999,1383,269,548,259,361,59800,27400,39900,11310,150,4.6,8,7,16.0,7620,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,103100,1004,1383,280,745,665,260,79400,69100,29000,7750,180,6.7,8,8,16.0,7620,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,102800,939,1383,292,379,89,318,41700,9100,35500,10920,160,6.7,9,9,16.0,3962,9,999999999,100,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,102700,807,1383,302,187,6,183,21800,500,21500,8120,170,8.2,10,10,16.0,3048,9,999999999,110,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,102600,618,1383,295,275,135,215,29800,13500,23700,5180,170,7.2,10,9,16.0,3048,9,999999999,120,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,102600,385,1383,305,146,96,119,15800,8500,13400,2640,170,8.2,10,10,16.0,2896,9,999999999,129,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,102500,127,1371,306,39,128,27,4200,6500,3500,480,170,9.3,10,10,16.0,3048,9,999999999,139,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,102400,0,0,309,0,0,0,0,0,0,0,180,6.7,10,10,16.0,3048,9,999999999,150,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102400,0,0,309,0,0,0,0,0,0,0,180,8.8,10,10,16.0,2743,9,999999999,160,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,4.4,100,102300,0,0,310,0,0,0,0,0,0,0,190,6.7,10,10,16.0,1981,9,999999999,160,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,102200,0,0,309,0,0,0,0,0,0,0,180,8.2,10,10,16.0,1829,9,999999999,160,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,102100,0,0,311,0,0,0,0,0,0,0,180,8.8,10,10,16.0,3048,9,999999999,160,0.1290,0,88,0.140,0.0,1.0 +2004,3,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,102000,0,0,311,0,0,0,0,0,0,0,190,8.2,10,10,16.0,2896,9,999999999,150,0.1290,0,88,0.140,0.0,1.0 +2004,3,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101900,0,0,315,0,0,0,0,0,0,0,190,7.2,10,10,16.0,2286,9,999999999,150,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101800,0,0,314,0,0,0,0,0,0,0,200,4.1,10,10,14.4,2134,9,999999999,139,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,101900,0,0,315,0,0,0,0,0,0,0,290,2.6,10,10,16.0,2286,9,999999999,120,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.9,82,101900,0,0,320,0,0,0,0,0,0,0,280,2.6,10,10,16.0,2134,9,999999999,110,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.8,79,101900,0,0,316,0,0,0,0,0,0,0,250,3.1,10,10,16.0,2438,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,102000,0,0,281,0,0,0,0,0,0,0,210,3.1,4,4,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.7,83,102000,97,1209,278,0,0,0,0,0,0,0,250,4.1,3,3,14.4,7620,9,999999999,60,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,102100,355,1382,296,226,477,104,23100,39700,12900,1970,280,6.7,3,3,16.0,77777,9,999999999,60,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,102100,593,1382,299,412,665,126,42300,63200,15100,2430,270,7.7,3,3,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,0.0,46,102100,789,1382,304,568,762,132,59900,76300,16200,3030,270,8.8,3,3,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-0.6,41,102000,930,1382,308,693,810,146,73700,82400,18100,3930,270,9.3,3,3,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-1.1,37,102000,1005,1382,312,761,842,147,79200,84200,17700,3960,260,8.8,3,3,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-1.7,35,101900,1010,1382,312,769,857,141,80400,86000,17400,3900,270,7.2,3,3,16.0,77777,9,999999999,69,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,101900,944,1382,301,705,823,140,73000,82100,16700,3440,270,7.7,0,0,16.0,77777,9,999999999,80,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-6.1,21,101900,812,1382,301,588,782,127,62300,78800,15900,3010,260,7.7,0,0,16.0,77777,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-6.7,21,101900,623,1382,298,427,696,112,44500,67400,14000,2270,260,6.7,0,0,16.0,77777,9,999999999,100,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-7.8,19,101900,390,1382,296,239,564,79,24400,48500,10700,1430,270,8.2,0,0,16.0,77777,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-7.2,22,102000,132,1382,293,49,231,27,5000,12600,3800,480,270,6.7,0,0,16.0,77777,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-7.8,22,102000,0,35,316,0,0,0,0,0,0,0,300,5.2,10,8,16.0,7620,9,999999999,80,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-7.8,23,102100,0,0,298,0,0,0,0,0,0,0,310,5.2,4,3,16.0,7620,9,999999999,80,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-6.7,28,102200,0,0,280,0,0,0,0,0,0,0,10,5.2,0,0,16.0,7620,9,999999999,80,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-6.7,30,102300,0,0,276,0,0,0,0,0,0,0,10,4.6,0,0,16.0,77777,9,999999999,80,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-6.1,35,102400,0,0,288,0,0,0,0,0,0,0,20,5.2,10,5,16.0,77777,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-6.7,35,102400,0,0,283,0,0,0,0,0,0,0,20,5.7,10,5,16.0,77777,9,999999999,89,0.1310,0,88,0.140,0.0,1.0 +2004,3,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.6,44,102400,0,0,277,0,0,0,0,0,0,0,10,6.2,5,5,16.0,77777,9,999999999,89,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,102400,0,0,260,0,0,0,0,0,0,0,30,5.7,1,1,16.0,77777,9,999999999,89,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.6,51,102400,0,0,254,0,0,0,0,0,0,0,30,5.2,0,0,16.0,7620,9,999999999,100,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,102300,0,0,250,0,0,0,0,0,0,0,40,4.1,0,0,16.0,7620,9,999999999,100,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.1,53,102400,0,0,257,0,0,0,0,0,0,0,30,5.2,2,2,0.4,77777,9,999999999,100,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.7,52,102400,0,0,276,0,0,0,0,0,0,0,20,5.2,9,9,16.0,7620,9,999999999,110,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-6.7,50,102400,103,1254,266,0,0,0,0,0,0,0,40,5.7,9,6,16.0,3962,9,999999999,110,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.7,48,102400,362,1381,289,64,0,64,7400,0,7400,2510,30,6.2,10,10,16.0,2896,9,999999999,129,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,102300,600,1381,292,75,0,75,9000,0,9000,3430,50,7.2,10,10,16.0,1676,9,999999999,150,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,102300,796,1381,288,90,0,90,11100,0,11100,4450,70,9.3,10,10,2.4,671,9,999999999,160,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102100,936,1381,286,125,0,125,15400,0,15400,6300,50,6.2,10,10,0.8,152,9,999999999,170,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.6,95,102100,1011,1381,286,140,0,140,17200,0,17200,7140,50,5.2,10,10,0.8,152,9,999999999,170,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,101900,1016,1381,287,131,0,131,16200,0,16200,6740,50,7.7,10,10,0.8,213,9,999999999,179,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,0.0,100,101700,950,1381,287,111,0,111,13800,0,13800,5700,50,9.3,10,10,0.8,213,9,999999999,189,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,101500,818,1381,289,96,0,96,11800,0,11800,4760,50,7.7,10,10,3.2,274,9,999999999,189,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101400,628,1381,291,76,0,76,9200,0,9200,3530,50,7.2,10,10,3.2,335,9,999999999,200,0.1320,0,88,0.140,3.0,1.0 +2004,3,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,101400,395,1381,289,54,0,54,6400,0,6400,2250,30,7.2,10,10,0.8,213,9,999999999,200,0.1320,0,88,0.140,2.0,1.0 +2004,3,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,101200,136,1381,290,13,0,13,1600,0,1600,510,50,11.8,10,10,1.2,213,9,999999999,200,0.1320,0,88,0.140,2.0,1.0 +2004,3,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-0.6,91,101100,0,58,289,0,0,0,0,0,0,0,40,11.8,10,10,8.0,274,9,999999999,209,0.1320,0,88,0.140,1.0,1.0 +2004,3,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-0.5,96,101100,0,0,286,0,0,0,0,0,0,0,40,10.3,10,10,9.6,366,9,999999999,200,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.7,87,101100,0,0,285,0,0,0,0,0,0,0,40,11.3,10,10,9.6,396,9,999999999,189,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.1,91,101200,0,0,286,0,0,0,0,0,0,0,50,6.2,10,10,4.0,366,9,999999999,179,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.2,88,101200,0,0,282,0,0,0,0,0,0,0,40,7.7,10,10,12.8,640,9,999999999,160,0.1320,0,88,0.140,0.0,1.0 +2004,3,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.2,88,101100,0,0,282,0,0,0,0,0,0,0,30,8.8,10,10,16.0,488,9,999999999,150,0.1320,0,88,0.140,0.0,1.0 +2004,3,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.8,87,101100,0,0,279,0,0,0,0,0,0,0,20,5.2,10,10,8.0,396,9,999999999,129,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.2,91,101100,0,0,280,0,0,0,0,0,0,0,10,4.1,10,10,2.4,427,9,999999999,129,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.8,87,101100,0,0,279,0,0,0,0,0,0,0,360,4.6,10,10,11.2,549,9,999999999,120,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-3.3,87,101100,0,0,276,0,0,0,0,0,0,0,10,6.2,10,10,16.0,488,9,999999999,110,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101100,0,0,278,0,0,0,0,0,0,0,10,5.7,10,10,16.0,1280,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-4.4,76,101200,0,0,278,0,0,0,0,0,0,0,10,5.7,10,10,16.0,1219,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-5.0,72,101300,110,1277,277,0,0,0,0,0,0,0,360,6.2,10,10,16.0,1158,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101400,369,1380,278,96,0,96,10800,0,10800,3420,10,5.2,10,10,14.4,1158,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101400,607,1380,278,205,25,194,23000,2100,22100,7170,20,6.2,10,10,16.0,1280,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-4.4,76,101500,802,1380,278,432,177,329,46400,18300,35800,8750,20,4.1,10,10,16.0,610,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101500,942,1380,278,137,0,137,16700,0,16700,6840,30,6.2,10,10,3.2,640,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.3,83,101500,1017,1380,279,335,42,304,37000,4300,33800,11390,40,5.2,10,10,4.0,549,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.3,83,101500,1021,1380,279,125,0,125,15500,0,15500,6480,50,4.6,10,10,3.2,427,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,101500,955,1380,281,717,561,327,74000,57800,33900,9300,30,4.6,10,10,4.8,427,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,101500,823,1380,281,600,794,125,63700,80200,15800,3000,20,3.6,10,10,4.8,427,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,101500,633,1380,281,438,492,212,44700,48300,22500,4500,20,4.6,10,10,4.8,427,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,101600,400,1380,281,49,0,49,5800,0,5800,2080,30,3.6,10,10,4.8,457,9,999999999,100,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.8,87,101700,141,1380,279,54,136,40,5600,6600,5000,750,40,4.1,10,10,4.8,457,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.3,83,101700,0,81,279,0,0,0,0,0,0,0,50,4.1,10,10,6.4,396,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-3.3,87,101700,0,0,276,0,0,0,0,0,0,0,40,3.6,10,10,11.2,2286,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101700,0,0,277,0,0,0,0,0,0,0,30,4.1,10,10,6.4,1067,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101700,0,0,277,0,0,0,0,0,0,0,10,3.1,10,10,12.8,1036,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,101700,0,0,277,0,0,0,0,0,0,0,20,3.1,10,10,3.2,366,9,999999999,89,0.1330,0,88,0.140,0.0,1.0 +2004,3,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,101700,0,0,277,0,0,0,0,0,0,0,20,3.6,10,10,4.8,823,9,999999999,80,0.1330,0,88,0.140,0.0,1.0 +2004,3,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,101700,0,0,277,0,0,0,0,0,0,0,10,3.1,10,10,8.0,792,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.2,96,101700,0,0,277,0,0,0,0,0,0,0,10,2.6,10,10,6.4,853,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101700,0,0,277,0,0,0,0,0,0,0,20,3.1,10,10,6.4,853,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101700,0,0,277,0,0,0,0,0,0,0,20,2.1,10,10,9.6,1067,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101800,0,0,277,0,0,0,0,0,0,0,360,1.5,10,10,6.4,610,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101800,0,0,277,0,0,0,0,0,0,0,40,2.1,10,10,6.4,732,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-2.8,91,101900,116,1322,277,0,0,0,0,0,0,0,60,1.5,10,10,14.4,732,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.2,91,102000,376,1379,280,237,492,102,24400,42000,12900,1920,0,0.0,10,10,6.4,732,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-2.2,91,102000,614,1379,280,430,576,172,44500,56400,19400,3530,0,0.0,10,10,8.0,488,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-1.7,87,102000,809,1379,271,425,232,289,46100,24200,31900,7720,0,0.0,8,8,14.4,1128,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,102100,949,1379,275,711,671,248,75500,69500,27600,6810,210,3.6,8,8,16.0,914,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.7,80,102100,1023,1379,290,542,241,363,59200,25500,40200,11710,190,2.6,10,10,12.8,732,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.7,77,102000,1027,1379,274,781,737,230,81300,74100,26000,6890,210,4.1,7,7,16.0,945,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,102000,960,1379,285,723,686,243,74400,68200,26700,6390,210,2.6,9,9,16.0,1280,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,102000,828,1379,286,261,65,221,28700,6500,24700,7380,220,4.1,9,9,16.0,1463,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,102100,638,1379,272,439,550,183,45400,54200,20300,3810,170,4.6,5,5,16.0,77777,9,999999999,100,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.1,78,102100,405,1379,287,245,554,82,25100,48200,10900,1490,180,4.1,9,9,16.0,1524,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102200,146,1379,271,58,265,31,6000,15100,4400,540,160,4.6,5,5,16.0,77777,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,102200,1,103,272,0,0,0,0,0,0,0,150,5.2,5,5,16.0,77777,9,999999999,69,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,102300,0,0,285,0,0,0,0,0,0,0,170,5.2,8,8,16.0,1829,9,999999999,80,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102300,0,0,285,0,0,0,0,0,0,0,160,5.2,8,8,16.0,1829,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102300,0,0,291,0,0,0,0,0,0,0,140,4.1,9,9,16.0,3658,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102200,0,0,291,0,0,0,0,0,0,0,100,3.1,9,9,16.0,3353,9,999999999,89,0.1340,0,88,0.140,0.0,1.0 +2004,3,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,102200,0,0,300,0,0,0,0,0,0,0,90,4.1,10,10,14.4,732,9,999999999,100,0.1340,0,88,0.140,0.0,1.0 +2004,3,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,102000,0,0,300,0,0,0,0,0,0,0,90,4.6,10,10,14.4,427,9,999999999,100,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,102000,0,0,300,0,0,0,0,0,0,0,90,5.7,10,10,12.8,366,9,999999999,110,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,102000,0,0,292,0,0,0,0,0,0,0,110,6.2,10,10,3.2,244,9,999999999,110,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,101900,0,0,292,0,0,0,0,0,0,0,80,6.2,10,10,2.4,122,9,999999999,120,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,101900,0,0,290,0,0,0,0,0,0,0,50,5.7,10,10,2.4,183,9,999999999,120,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,101900,0,0,290,0,0,0,0,0,0,0,30,6.7,10,10,1.6,152,9,999999999,120,0.1350,0,88,0.140,2.0,1.0 +2004,3,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,101900,123,1344,290,0,0,0,0,0,0,0,30,6.2,10,10,1.6,244,9,999999999,120,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,102100,384,1379,289,102,0,102,11400,0,11400,3630,20,6.2,10,10,1.2,244,9,999999999,110,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.6,100,102200,621,1379,290,129,0,129,15000,0,15000,5460,10,7.2,10,10,1.2,244,9,999999999,110,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,102300,816,1379,291,155,0,155,18400,0,18400,7170,10,6.2,10,10,1.2,213,9,999999999,110,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,102400,955,1379,291,262,12,253,30500,1000,29800,11290,360,7.7,10,10,3.2,457,9,999999999,100,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,102500,1029,1379,296,475,138,371,51700,14600,40800,12060,360,9.3,10,10,11.2,640,9,999999999,89,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,102500,1032,1379,286,322,36,295,35500,3700,32800,11290,10,8.2,8,8,16.0,762,9,999999999,89,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.0,79,102600,965,1379,286,117,0,117,14500,0,14500,6010,30,6.7,8,8,16.0,975,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,102600,833,1379,289,606,528,286,62200,53800,29600,7050,360,5.7,8,8,16.0,914,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102700,643,1379,287,444,709,113,46400,69100,14100,2320,360,7.7,8,8,16.0,1829,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,102700,409,1379,288,251,544,89,25600,47300,11500,1590,350,5.2,8,8,16.0,1981,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,102900,150,1379,289,53,176,34,5600,9500,4500,610,10,2.1,8,8,16.0,1829,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,102900,1,126,286,0,0,0,0,0,0,0,340,5.7,8,8,16.0,1981,9,999999999,69,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,103100,0,0,284,0,0,0,0,0,0,0,330,4.6,8,8,16.0,1829,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,103100,0,0,282,0,0,0,0,0,0,0,360,4.1,8,8,16.0,1829,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,103200,0,0,266,0,0,0,0,0,0,0,20,2.6,3,3,16.0,77777,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,103200,0,0,263,0,0,0,0,0,0,0,360,2.6,3,3,16.0,77777,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,103200,0,0,251,0,0,0,0,0,0,0,20,1.5,0,0,16.0,77777,9,999999999,80,0.1350,0,88,0.140,0.0,1.0 +2004,3,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.8,79,103100,0,0,246,0,0,0,0,0,0,0,10,1.5,0,0,16.0,77777,9,999999999,89,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,103100,0,0,243,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-4.4,69,103100,0,0,244,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.3,80,103100,0,0,243,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-3.9,83,103100,0,0,239,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,100,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.3,80,103100,0,11,256,0,0,0,0,0,0,0,200,2.1,4,4,16.0,77777,9,999999999,100,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.2,88,103100,130,1378,259,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,100,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,103100,391,1378,268,249,509,105,25800,44000,13300,1980,190,2.6,4,4,16.0,77777,9,999999999,110,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,103100,628,1378,270,428,539,182,44300,53000,20100,3780,190,5.7,4,4,16.0,7620,9,999999999,110,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,103000,822,1378,265,450,244,304,48700,25400,33500,8200,200,5.2,1,1,16.0,77777,9,999999999,110,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,102900,961,1378,267,692,653,235,71400,65100,25900,6240,180,6.2,0,0,16.0,77777,9,999999999,110,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,102700,1035,1378,280,773,782,184,81900,79600,22000,5770,180,6.7,2,2,16.0,77777,9,999999999,110,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,102500,1038,1378,289,793,857,145,83000,86100,17900,4230,180,9.8,5,5,16.0,77777,9,999999999,120,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,102300,971,1378,290,729,830,142,75700,82900,17100,3650,180,10.3,3,3,16.0,77777,9,999999999,139,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,102000,837,1378,307,612,795,128,65100,80400,16100,3120,180,10.8,9,9,16.0,7620,9,999999999,150,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,101800,648,1378,292,450,668,135,46400,64600,16000,2700,180,12.4,5,5,16.0,77777,9,999999999,170,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.7,76,101700,414,1378,304,237,442,104,24700,39100,12900,1960,190,12.9,9,9,16.0,3048,9,999999999,200,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,101600,155,1378,309,54,183,33,5600,10100,4500,590,180,11.8,10,10,16.0,2591,9,999999999,220,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,101400,1,149,311,0,0,0,0,0,0,0,180,10.8,10,10,11.2,2438,9,999999999,250,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,101300,0,0,310,0,0,0,0,0,0,0,180,9.8,10,10,11.2,2896,9,999999999,250,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,101200,0,0,312,0,0,0,0,0,0,0,190,8.2,10,10,12.8,2438,9,999999999,250,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,101000,0,0,312,0,0,0,0,0,0,0,180,7.2,10,10,12.8,3048,9,999999999,250,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100800,0,0,316,0,0,0,0,0,0,0,180,4.6,10,10,11.2,2438,9,999999999,259,0.1360,0,88,0.140,0.0,1.0 +2004,3,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100700,0,0,316,0,0,0,0,0,0,0,160,3.1,10,10,11.2,2286,9,999999999,259,0.1360,0,88,0.140,0.0,1.0 +2004,3,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100500,0,0,316,0,0,0,0,0,0,0,0,0.0,10,10,12.8,2438,9,999999999,270,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,100400,0,0,317,0,0,0,0,0,0,0,0,0.0,10,10,8.0,1372,9,999999999,259,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,100300,0,0,317,0,0,0,0,0,0,0,0,0.0,10,10,8.0,1036,9,999999999,250,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100300,0,0,319,0,0,0,0,0,0,0,290,3.6,10,10,8.0,2438,9,999999999,250,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,100400,0,0,319,0,0,0,0,0,0,0,230,2.1,10,10,8.0,2743,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100400,0,57,316,0,0,0,0,0,0,0,230,3.1,10,10,9.6,3353,9,999999999,170,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100500,138,1377,316,54,0,54,5800,0,5800,1430,250,5.2,10,10,6.4,2743,9,999999999,139,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.0,82,100500,398,1377,311,240,442,112,24700,38500,13500,2130,280,4.1,8,8,8.0,2743,9,999999999,120,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,100600,635,1377,314,434,452,225,45600,46000,24400,5150,280,7.2,8,8,16.0,2743,9,999999999,110,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.1,56,100600,829,1377,314,122,0,122,14800,0,14800,5910,280,9.8,8,8,16.0,1097,9,999999999,100,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,100600,967,1377,318,666,429,364,71100,46100,38600,10870,290,9.8,9,9,16.0,1189,9,999999999,89,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,100600,1040,1377,322,426,84,362,46900,8600,40300,13490,280,10.3,9,9,16.0,1524,9,999999999,89,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.3,38,100600,1043,1377,311,661,425,338,71600,45900,36700,10880,300,10.8,8,8,16.0,1676,9,999999999,80,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-4.4,37,100600,976,1377,312,175,12,166,21100,900,20500,8170,290,11.3,9,9,16.0,1829,9,999999999,80,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-3.9,35,100600,842,1377,320,261,36,239,28800,3600,26500,7980,290,9.8,9,9,16.0,1829,9,999999999,69,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-6.1,32,100700,652,1377,310,423,469,201,43600,46400,21600,4260,290,12.4,9,9,16.0,1829,9,999999999,69,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-6.1,36,100700,419,1377,286,257,567,84,26300,49900,11100,1530,310,14.9,5,5,16.0,77777,9,999999999,60,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-6.1,40,100900,160,1377,279,65,266,34,6600,15800,4700,590,310,9.3,5,5,16.0,77777,9,999999999,60,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-7.8,39,101000,2,172,271,0,0,0,0,0,0,0,290,14.4,5,5,16.0,77777,9,999999999,50,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-7.8,42,101100,0,0,264,0,0,0,0,0,0,0,320,11.3,4,4,16.0,77777,9,999999999,50,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-9.4,40,101200,0,0,257,0,0,0,0,0,0,0,310,12.4,3,3,16.0,77777,9,999999999,50,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-8.9,45,101300,0,0,253,0,0,0,0,0,0,0,320,8.2,3,3,16.0,77777,9,999999999,50,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.0,45,101400,0,0,248,0,0,0,0,0,0,0,300,9.3,3,3,16.0,77777,9,999999999,50,0.1370,0,88,0.140,0.0,1.0 +2004,3,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-10.6,44,101400,0,0,243,0,0,0,0,0,0,0,290,9.3,2,2,16.0,77777,9,999999999,60,0.1370,0,88,0.140,0.0,1.0 +2004,3,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-10.6,44,101400,0,0,243,0,0,0,0,0,0,0,300,8.2,2,2,16.0,77777,9,999999999,60,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.1,42,101400,0,0,245,0,0,0,0,0,0,0,290,8.8,3,3,16.0,77777,9,999999999,50,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,101400,0,0,243,0,0,0,0,0,0,0,300,8.2,3,3,16.0,77777,9,999999999,50,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,101500,0,0,243,0,0,0,0,0,0,0,300,9.3,3,3,16.0,7620,9,999999999,50,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-10.6,48,101600,0,0,241,0,0,0,0,0,0,0,310,7.7,3,3,16.0,77777,9,999999999,50,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-13.9,38,101700,0,80,236,0,0,0,0,0,0,0,310,11.3,3,3,16.0,77777,9,999999999,40,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-14.4,36,101800,145,1376,236,84,163,67,8500,8000,7600,1430,310,12.9,3,3,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-15.0,32,101900,405,1376,237,262,532,105,27200,46700,13400,1980,310,11.3,3,3,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-15.0,30,102000,641,1376,231,454,705,124,47000,68300,15100,2510,320,8.2,0,0,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-14.4,30,102000,835,1376,233,617,779,142,65000,78400,17300,3410,310,11.3,0,0,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-16.7,22,102000,973,1376,249,735,828,148,76100,82600,17500,3770,320,10.8,5,5,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-17.8,19,102100,1046,1376,246,803,860,147,84000,86400,18200,4350,320,11.3,3,3,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-16.7,20,102100,1049,1376,247,804,863,145,84400,86700,18100,4330,320,9.3,2,2,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-17.2,19,102100,981,1376,249,740,842,139,77300,84300,17000,3680,350,8.2,3,3,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-17.2,19,102100,847,1376,240,618,795,127,63800,78800,15200,2800,330,9.3,0,0,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-16.7,20,102200,657,1376,249,456,715,114,47700,70000,14200,2370,310,6.2,3,3,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-18.3,18,102200,423,1376,245,263,579,84,26900,51100,11200,1540,330,7.7,2,2,16.0,77777,9,999999999,30,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-18.3,19,102300,164,1376,244,69,287,35,7000,17300,4900,610,310,7.7,3,3,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-17.2,22,102500,2,195,240,0,0,0,0,0,0,0,290,6.2,2,2,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-17.8,22,102600,0,0,230,0,0,0,0,0,0,0,300,8.2,0,0,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-18.9,21,102700,0,0,227,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-17.8,24,102700,0,0,226,0,0,0,0,0,0,0,340,5.7,0,0,16.0,77777,9,999999999,10,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-17.2,26,102800,0,0,225,0,0,0,0,0,0,0,330,4.1,0,0,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-16.7,29,102800,0,0,224,0,0,0,0,0,0,0,340,4.1,0,0,16.0,77777,9,999999999,20,0.1380,0,88,0.140,0.0,1.0 +2004,3,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-16.1,32,102900,0,0,232,0,0,0,0,0,0,0,340,4.1,3,3,16.0,77777,9,999999999,20,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-16.1,34,102900,0,0,221,0,0,0,0,0,0,0,350,4.6,0,0,16.0,77777,9,999999999,20,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-16.1,34,102900,0,0,221,0,0,0,0,0,0,0,10,2.1,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-14.4,43,103000,0,0,219,0,0,0,0,0,0,0,50,1.5,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.0,41,103000,0,0,218,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,103100,1,126,218,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,103100,152,1375,227,78,115,66,8300,6500,7600,1380,150,2.1,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-13.3,35,103200,412,1375,233,268,550,103,27900,48600,13300,1940,220,3.1,0,0,16.0,77777,9,999999999,30,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-12.8,32,103200,648,1375,239,460,710,124,47700,69000,15100,2520,220,5.7,0,0,16.0,77777,9,999999999,40,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-12.2,30,103100,842,1375,245,622,785,141,65800,79200,17200,3420,240,7.7,0,0,16.0,77777,9,999999999,40,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-12.2,28,103000,979,1375,249,740,834,145,76900,83300,17400,3770,230,8.8,0,0,16.0,77777,9,999999999,40,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-11.1,28,103000,1052,1375,254,809,866,145,84900,87100,18100,4370,220,7.7,0,0,16.0,77777,9,999999999,50,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-11.1,26,102900,1054,1375,259,810,869,143,85200,87400,18000,4350,230,8.8,0,0,16.0,77777,9,999999999,50,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.0,46,102700,986,1375,262,746,848,137,78100,85000,17000,3680,190,9.3,0,0,16.0,77777,9,999999999,50,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,102700,852,1375,264,624,801,127,64500,79400,15200,2820,190,9.3,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,102600,662,1375,269,462,710,120,48200,69400,14700,2480,190,8.2,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-7.2,31,102600,428,1375,271,263,563,88,27000,49800,11500,1600,240,9.3,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-4.4,45,102600,169,1375,267,70,280,36,7100,17100,5000,630,230,6.7,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-5.6,42,102700,3,218,264,0,0,0,0,0,0,0,220,7.2,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,102700,0,0,263,0,0,0,0,0,0,0,220,7.2,0,0,16.0,77777,9,999999999,60,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102800,0,0,261,0,0,0,0,0,0,0,220,6.7,0,0,16.0,77777,9,999999999,69,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,102900,0,0,261,0,0,0,0,0,0,0,220,7.7,0,0,16.0,77777,9,999999999,69,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102900,0,0,261,0,0,0,0,0,0,0,240,5.7,0,0,16.0,77777,9,999999999,69,0.1400,0,88,0.140,0.0,1.0 +2004,3,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,103000,0,0,258,0,0,0,0,0,0,0,240,7.7,0,0,16.0,77777,9,999999999,80,0.1400,0,88,0.140,0.0,1.0 +2004,3,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,103000,0,0,259,0,0,0,0,0,0,0,240,6.2,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,103000,0,0,258,0,0,0,0,0,0,0,250,9.3,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,103000,0,0,257,0,0,0,0,0,0,0,250,5.2,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.1,78,103100,0,0,255,0,0,0,0,0,0,0,240,6.2,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-0.6,88,103100,0,0,252,0,0,0,0,0,0,0,240,4.1,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,103200,2,172,252,0,0,0,0,0,0,0,240,4.6,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,103300,159,1375,260,74,60,67,8000,4200,7600,1380,250,3.6,0,0,16.0,77777,9,999999999,69,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,103300,419,1375,269,274,562,102,28600,49900,13300,1910,240,3.1,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,103400,655,1375,275,465,716,123,48400,69800,15000,2520,240,2.6,0,0,16.0,77777,9,999999999,80,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.1,47,103400,848,1375,283,628,791,139,66500,79900,17100,3400,220,4.6,0,0,16.0,77777,9,999999999,89,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,103300,985,1375,319,746,834,147,77500,83300,17600,3850,190,4.6,9,9,16.0,7620,9,999999999,89,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,103300,1057,1375,329,815,866,147,85400,87000,18300,4470,190,4.6,9,9,16.0,7620,9,999999999,89,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,2.2,56,103300,1059,1375,315,816,869,145,85700,87400,18200,4450,170,5.7,7,7,16.0,7620,9,999999999,100,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,0.0,46,103200,990,1375,327,746,836,142,77800,83700,17300,3810,180,7.7,9,9,16.0,7620,9,999999999,100,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.6,52,103100,856,1375,323,630,742,166,65900,74400,19400,4010,180,8.8,9,9,16.0,7620,9,999999999,110,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,103200,666,1375,319,435,563,162,46000,56100,18800,3370,180,10.3,9,9,16.0,7620,9,999999999,120,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.1,63,103200,433,1375,313,269,592,82,27700,52700,11000,1520,180,9.8,9,9,16.0,7620,9,999999999,120,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,103200,173,1375,308,75,306,36,7600,19000,5200,630,180,9.3,9,9,16.0,7620,9,999999999,129,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,103200,4,241,320,0,0,0,0,0,0,0,180,9.3,10,10,16.0,3962,9,999999999,129,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,103300,0,0,321,0,0,0,0,0,0,0,190,9.3,10,10,16.0,3353,9,999999999,139,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,103300,0,0,319,0,0,0,0,0,0,0,200,4.1,10,10,16.0,1981,9,999999999,139,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,103400,0,0,319,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1402,9,999999999,150,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,103500,0,0,321,0,0,0,0,0,0,0,240,3.6,10,10,16.0,2438,9,999999999,150,0.1410,0,88,0.140,0.0,1.0 +2004,3,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,103500,0,0,320,0,0,0,0,0,0,0,170,5.2,10,10,16.0,1981,9,999999999,150,0.1410,0,88,0.140,0.0,1.0 +2004,3,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,103500,0,0,318,0,0,0,0,0,0,0,190,6.2,10,10,16.0,1829,9,999999999,160,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,103500,0,0,318,0,0,0,0,0,0,0,180,5.2,10,10,16.0,1433,9,999999999,160,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,103500,0,0,318,0,0,0,0,0,0,0,180,7.2,10,10,16.0,1311,9,999999999,170,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,103500,0,0,321,0,0,0,0,0,0,0,170,7.2,10,10,16.0,1829,9,999999999,170,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,103500,0,0,321,0,0,0,0,0,0,0,160,8.8,10,10,16.0,1981,9,999999999,179,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,103500,3,195,324,0,0,0,0,0,0,0,170,7.7,10,10,16.0,2591,9,999999999,189,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,103500,166,1374,322,42,0,42,4700,0,4700,1380,200,5.2,10,10,16.0,2438,9,999999999,200,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,103500,426,1374,323,204,174,150,21900,15900,17000,3370,190,6.2,10,10,16.0,2134,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,103500,662,1374,323,88,0,88,10600,0,10600,4090,200,5.2,10,10,16.0,2134,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103600,854,1374,326,103,0,103,12700,0,12700,5150,200,5.2,10,10,16.0,1981,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,103600,991,1374,326,118,0,118,14700,0,14700,6110,180,5.7,10,10,12.8,1829,9,999999999,229,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,103500,1063,1374,326,176,0,176,21500,0,21500,8840,170,5.2,10,10,12.8,1829,9,999999999,229,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,103400,1064,1374,326,220,0,220,26400,0,26400,10640,180,6.2,10,10,16.0,2438,9,999999999,229,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,103400,995,1374,326,140,0,140,17200,0,17200,7120,180,5.7,10,10,16.0,2134,9,999999999,229,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,103400,861,1374,326,108,0,108,13300,0,13300,5390,180,3.1,10,10,16.0,2286,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,103400,671,1374,328,98,0,98,11700,0,11700,4510,180,2.6,10,10,16.0,2743,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,103300,437,1374,319,195,182,137,21100,16900,15700,3090,180,3.6,10,9,16.0,2134,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103400,178,1374,326,76,174,53,7900,10000,6600,1020,180,3.1,10,10,16.0,2438,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103400,4,263,326,0,0,0,0,0,0,0,170,4.1,10,10,16.0,2286,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103400,0,0,326,0,0,0,0,0,0,0,170,4.6,10,10,16.0,2134,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103400,0,0,326,0,0,0,0,0,0,0,180,5.7,10,10,16.0,1981,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103300,0,0,326,0,0,0,0,0,0,0,190,4.1,10,10,16.0,1981,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103300,0,0,326,0,0,0,0,0,0,0,170,3.1,10,10,16.0,1676,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103300,0,0,326,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1829,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2004,3,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,103200,0,0,303,0,0,0,0,0,0,0,130,1.5,7,7,16.0,1981,9,999999999,220,0.1430,0,88,0.140,2.0,1.0 +2004,3,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103200,0,0,326,0,0,0,0,0,0,0,80,1.5,10,10,16.0,1981,9,999999999,220,0.1430,0,88,0.140,3.0,1.0 +2004,3,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,103100,0,0,323,0,0,0,0,0,0,0,0,0.0,10,10,16.0,2134,9,999999999,220,0.1430,0,88,0.140,1.0,1.0 +2004,3,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103200,0,0,326,0,0,0,0,0,0,0,100,1.5,10,10,16.0,2134,9,999999999,220,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103200,0,0,310,0,0,0,0,0,0,0,100,2.1,8,8,16.0,2438,9,999999999,209,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,103200,4,240,308,0,0,0,0,0,0,0,90,2.1,8,8,16.0,2591,9,999999999,189,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,103200,173,1373,310,80,99,68,8500,6100,7800,1430,120,2.1,8,8,14.4,2896,9,999999999,179,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,103200,433,1373,307,286,553,111,29700,49600,14000,2100,0,0.0,6,6,14.4,7620,9,999999999,189,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.8,83,103200,668,1373,310,477,506,231,48700,50200,24200,5030,200,2.6,4,3,16.0,4267,9,999999999,189,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.8,83,103200,860,1373,333,122,0,122,14900,0,14900,6000,200,3.1,9,9,16.0,3048,9,999999999,200,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.2,86,103100,997,1373,315,143,0,143,17600,0,17600,7250,210,3.1,8,7,16.0,4267,9,999999999,209,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,103100,1068,1373,325,693,445,346,72500,46200,36500,11940,180,2.1,6,6,16.0,4267,9,999999999,220,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,103000,1069,1373,338,822,707,270,85100,70700,29900,8720,160,3.1,7,7,16.0,4267,9,999999999,229,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,102900,1000,1373,348,484,173,358,52800,18300,39500,11310,120,3.1,9,9,16.0,4267,9,999999999,229,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102800,866,1373,342,460,267,291,49200,28500,31200,7670,160,5.2,9,9,16.0,4267,9,999999999,240,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,102800,675,1373,339,365,288,223,38700,29700,24100,5120,140,4.1,9,9,16.0,4267,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,102700,442,1373,335,275,490,117,28500,44200,14200,2230,140,4.1,9,9,16.0,4267,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,102700,182,1373,331,73,250,40,7700,15200,5700,710,190,3.6,9,9,16.0,3658,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,102700,5,286,319,0,0,0,0,0,0,0,200,4.1,7,7,16.0,3353,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,102700,0,0,332,0,0,0,0,0,0,0,190,5.7,10,9,16.0,3658,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.8,93,102700,0,0,335,0,0,0,0,0,0,0,200,3.6,10,10,16.0,3353,9,999999999,259,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,102600,0,0,323,0,0,0,0,0,0,0,180,4.1,10,9,16.0,4267,9,999999999,259,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,102500,0,0,323,0,0,0,0,0,0,0,180,6.7,9,9,16.0,3353,9,999999999,259,0.1430,0,88,0.140,0.0,1.0 +2004,3,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.8,93,102500,0,0,335,0,0,0,0,0,0,0,170,4.1,10,10,16.0,3353,9,999999999,270,0.1430,0,88,0.140,0.0,1.0 +2004,3,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,102400,0,0,335,0,0,0,0,0,0,0,180,5.2,10,10,16.0,3353,9,999999999,270,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,102300,0,0,335,0,0,0,0,0,0,0,180,5.2,10,10,16.0,3353,9,999999999,279,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,102300,0,0,331,0,0,0,0,0,0,0,200,2.6,10,10,16.0,3353,9,999999999,279,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,102300,0,0,329,0,0,0,0,0,0,0,180,1.5,10,10,16.0,2743,9,999999999,290,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,102300,0,0,330,0,0,0,0,0,0,0,0,0.0,10,10,14.4,2286,9,999999999,300,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,102300,5,286,332,0,0,0,0,0,0,0,0,0.0,10,10,12.8,2743,9,999999999,300,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,102200,181,1372,332,26,0,26,3000,0,3000,980,0,0.0,10,10,9.6,2743,9,999999999,309,0.1450,0,88,0.140,1.0,1.0 +2004,3,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,102200,440,1372,339,97,0,97,11100,0,11100,3760,220,3.1,10,10,12.8,2743,9,999999999,300,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,102200,675,1372,349,81,0,81,9900,0,9900,3830,220,3.1,10,10,8.0,2438,9,999999999,290,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,102100,867,1372,353,115,0,115,14100,0,14100,5710,250,2.6,10,10,6.4,2134,9,999999999,279,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102100,1003,1372,366,155,0,155,18900,0,18900,7790,260,5.2,10,10,6.4,1219,9,999999999,270,0.1450,0,88,0.140,1.0,1.0 +2004,3,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,102000,1073,1372,364,371,102,291,41300,10900,32700,10080,260,4.1,8,8,9.6,2896,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.0,70,101900,1074,1372,367,828,713,268,85800,71300,29800,8780,340,3.6,4,4,16.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,101900,1005,1372,385,630,418,323,68200,45100,35100,9870,360,6.7,8,8,16.0,1036,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.3,68,101800,870,1372,395,153,0,153,18300,0,18300,7310,350,6.2,10,10,16.0,1128,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.8,55,101800,679,1372,373,474,575,189,49500,57400,21000,4030,10,6.7,4,4,16.0,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,101900,446,1372,366,281,605,84,29000,54400,11300,1570,10,5.2,4,4,16.0,77777,9,999999999,209,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.7,63,101900,187,1372,371,81,301,40,8200,19300,5600,700,30,5.2,8,8,16.0,1829,9,999999999,200,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,9.4,56,102000,6,309,365,0,0,0,0,0,0,0,360,8.8,8,8,16.0,1981,9,999999999,189,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.9,62,102100,0,0,354,0,0,0,0,0,0,0,360,8.8,8,8,16.0,2591,9,999999999,179,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,102200,0,0,345,0,0,0,0,0,0,0,360,8.2,8,8,16.0,2591,9,999999999,179,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.2,69,102300,0,0,319,0,0,0,0,0,0,0,360,7.7,3,3,16.0,77777,9,999999999,170,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.7,71,102400,0,0,337,0,0,0,0,0,0,0,360,7.2,9,9,16.0,1463,9,999999999,170,0.1450,0,88,0.140,0.0,1.0 +2004,3,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.7,74,102500,0,0,344,0,0,0,0,0,0,0,360,6.7,10,10,16.0,1158,9,999999999,170,0.1450,0,88,0.140,0.0,1.0 +2004,3,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.7,74,102500,0,0,344,0,0,0,0,0,0,0,360,5.2,10,10,16.0,975,9,999999999,160,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.7,77,102500,0,0,342,0,0,0,0,0,0,0,360,7.2,10,10,16.0,853,9,999999999,160,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,102500,0,0,338,0,0,0,0,0,0,0,10,6.7,10,10,16.0,914,9,999999999,150,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,102500,0,0,338,0,0,0,0,0,0,0,350,6.2,10,10,16.0,914,9,999999999,139,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.6,77,102500,0,0,319,0,0,0,0,0,0,0,360,5.7,8,8,16.0,1524,9,999999999,129,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.0,71,102600,6,309,337,0,0,0,0,0,0,0,360,6.7,10,10,16.0,1097,9,999999999,120,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.0,71,102700,188,1371,337,49,0,49,5400,0,5400,1600,360,5.2,10,10,16.0,1097,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,102700,447,1371,336,164,45,149,17900,4200,16500,3840,20,7.2,10,10,16.0,1097,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,102800,681,1371,321,134,0,134,15700,0,15700,5890,50,8.2,8,8,16.0,1097,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,102900,873,1371,324,454,237,303,49500,24900,33600,8500,40,7.2,8,8,16.0,1158,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,2.8,51,102900,1008,1371,319,764,682,261,78700,67900,28700,7470,30,7.2,5,5,16.0,77777,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,2.8,49,102900,1079,1371,321,753,571,303,80000,59500,33100,10600,50,7.7,5,5,16.0,77777,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,102900,1079,1371,325,834,713,271,86400,71300,30100,8970,60,8.8,5,5,16.0,77777,9,999999999,100,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.3,51,102900,1009,1371,341,426,101,351,46900,10400,39200,12780,40,7.2,9,9,16.0,1372,9,999999999,110,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,102900,874,1371,339,295,24,280,33800,2200,32400,11540,50,8.2,9,9,16.0,1311,9,999999999,110,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,102900,684,1371,339,229,18,220,25800,1600,25000,8430,30,9.8,9,9,16.0,1372,9,999999999,120,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,103000,450,1371,334,181,108,145,19500,10100,16200,3280,50,8.2,9,9,16.0,1433,9,999999999,129,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,103000,191,1371,326,75,171,51,7900,10300,6400,960,60,8.2,9,9,16.0,1128,9,999999999,129,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,103100,7,331,314,0,0,0,0,0,0,0,40,7.2,7,7,16.0,1463,9,999999999,139,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,103100,0,0,316,0,0,0,0,0,0,0,40,8.2,8,8,16.0,1402,9,999999999,139,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,103200,0,0,311,0,0,0,0,0,0,0,60,9.3,8,8,16.0,1402,9,999999999,129,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.2,68,103200,0,0,323,0,0,0,0,0,0,0,60,7.7,10,10,16.0,1402,9,999999999,129,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,103100,0,0,319,0,0,0,0,0,0,0,50,7.7,10,10,16.0,1341,9,999999999,120,0.1460,0,88,0.140,0.0,1.0 +2004,3,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,103100,0,0,283,0,0,0,0,0,0,0,60,8.2,5,5,16.0,77777,9,999999999,110,0.1460,0,88,0.140,0.0,1.0 +2004,3,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,103100,0,0,272,0,0,0,0,0,0,0,50,7.2,8,3,16.0,77777,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,103100,0,0,268,0,0,0,0,0,0,0,30,4.6,3,3,16.0,77777,9,999999999,89,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,103100,0,0,266,0,0,0,0,0,0,0,40,4.1,3,3,16.0,77777,9,999999999,89,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,103100,0,0,253,0,0,0,0,0,0,0,30,4.1,0,0,16.0,77777,9,999999999,80,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,103100,0,0,254,0,0,0,0,0,0,0,30,5.2,0,0,16.0,77777,9,999999999,80,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,103200,8,354,253,0,0,0,0,0,0,0,30,4.6,0,0,16.0,77777,9,999999999,69,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,103200,195,1371,257,107,212,77,10900,12900,9100,1590,40,6.2,0,0,16.0,77777,9,999999999,69,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,103200,454,1371,264,304,582,111,31800,53100,14200,2100,40,5.2,0,0,16.0,77777,9,999999999,69,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,103200,688,1371,269,489,714,129,50900,70100,15600,2710,30,4.1,0,0,16.0,77777,9,999999999,80,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,103200,879,1371,284,658,784,154,69400,79200,18500,3880,60,4.1,3,3,16.0,77777,9,999999999,89,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.0,54,103200,1014,1371,295,770,833,152,80000,83300,18200,4190,140,4.6,3,3,16.0,77777,9,999999999,89,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.2,68,103200,1084,1371,280,838,872,147,88300,87800,18600,4790,110,6.7,0,0,16.0,77777,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.2,68,103100,1084,1371,292,840,875,146,88500,88200,18600,4760,130,6.2,3,3,16.0,77777,9,999999999,110,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.8,71,103000,1014,1371,293,770,848,141,80600,85100,17500,3990,140,6.7,3,3,16.0,77777,9,999999999,120,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,103000,879,1371,290,648,807,129,67100,80300,15500,2980,130,6.7,3,3,16.0,77777,9,999999999,120,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,102900,688,1371,283,486,740,113,51100,73100,14200,2420,110,6.2,1,1,16.0,77777,9,999999999,120,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,102900,455,1371,273,287,606,85,29600,54800,11300,1590,120,6.2,0,0,16.0,77777,9,999999999,120,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,102900,196,1371,269,87,314,42,8800,20600,5900,730,110,5.7,0,0,16.0,77777,9,999999999,110,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,102900,8,354,265,0,0,0,0,0,0,0,110,4.6,0,0,16.0,77777,9,999999999,110,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,102900,0,0,264,0,0,0,0,0,0,0,100,5.7,0,0,16.0,77777,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,102900,0,0,276,0,0,0,0,0,0,0,100,5.7,4,4,16.0,77777,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,102900,0,0,303,0,0,0,0,0,0,0,100,5.2,10,10,16.0,427,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.1,85,102900,0,0,302,0,0,0,0,0,0,0,100,6.2,10,10,16.0,427,9,999999999,100,0.1470,0,88,0.140,0.0,1.0 +2004,3,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102800,0,0,300,0,0,0,0,0,0,0,100,6.2,10,10,16.0,427,9,999999999,89,0.1470,0,88,0.140,0.0,1.0 +2004,3,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,102800,0,0,299,0,0,0,0,0,0,0,100,5.2,10,10,16.0,457,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102800,0,0,295,0,0,0,0,0,0,0,100,6.7,10,10,16.0,488,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102700,0,0,295,0,0,0,0,0,0,0,80,4.1,10,10,16.0,488,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102700,0,0,295,0,0,0,0,0,0,0,80,3.6,10,10,16.0,549,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.1,78,102700,0,0,295,0,0,0,0,0,0,0,50,5.2,10,10,16.0,549,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102700,10,400,295,0,0,0,0,0,0,0,70,4.6,10,10,16.0,549,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102700,202,1370,295,46,0,46,5200,0,5200,1580,70,4.1,10,10,16.0,488,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.0,82,102700,461,1370,299,111,0,111,12600,0,12600,4240,70,3.1,10,10,16.0,488,9,999999999,89,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,102700,694,1370,299,134,0,134,15800,0,15800,5940,80,3.6,10,10,16.0,488,9,999999999,100,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,102700,885,1370,305,121,0,121,14800,0,14800,6020,70,6.7,10,10,16.0,488,9,999999999,100,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,102600,1019,1370,309,248,6,244,29400,500,29000,11370,70,5.2,10,10,16.0,549,9,999999999,100,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.1,73,102500,1089,1370,312,328,18,314,38500,1600,37200,14070,60,5.7,10,10,16.0,671,9,999999999,100,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,102400,1088,1370,318,345,18,331,40300,1700,39000,14590,120,5.7,10,10,16.0,671,9,999999999,110,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.2,73,102300,1018,1370,318,379,36,352,41700,3700,39000,12950,90,6.2,10,10,16.0,671,9,999999999,120,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,102300,883,1370,321,284,18,273,32700,1600,31600,11430,110,5.2,10,10,16.0,671,9,999999999,120,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,102200,692,1370,319,208,12,202,23700,1000,23200,8050,120,5.2,10,10,16.0,610,9,999999999,129,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,102200,459,1370,320,171,86,143,18800,8000,16100,3780,110,5.7,10,10,16.0,549,9,999999999,160,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,102200,200,1370,317,92,209,61,9500,13000,7600,1180,100,3.6,10,10,16.0,488,9,999999999,179,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,102200,9,377,315,0,0,0,0,0,0,0,100,5.7,10,10,16.0,488,9,999999999,200,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102200,0,0,312,0,0,0,0,0,0,0,80,4.1,10,10,16.0,396,9,999999999,209,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102100,0,0,316,0,0,0,0,0,0,0,60,4.6,10,10,16.0,335,9,999999999,220,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,102100,0,0,316,0,0,0,0,0,0,0,50,3.6,10,10,16.0,274,9,999999999,229,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,102000,0,0,317,0,0,0,0,0,0,0,60,5.2,10,10,8.0,213,9,999999999,240,0.1490,0,88,0.140,0.0,1.0 +2004,3,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,101900,0,0,314,0,0,0,0,0,0,0,30,4.1,10,10,4.8,152,9,999999999,250,0.1490,0,88,0.140,0.0,1.0 +2004,3,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,101700,0,0,314,0,0,0,0,0,0,0,40,3.6,10,10,4.0,152,9,999999999,259,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,101600,0,0,314,0,0,0,0,0,0,0,30,4.6,10,10,4.8,152,9,999999999,270,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,101500,0,0,317,0,0,0,0,0,0,0,30,4.6,10,10,4.8,183,9,999999999,270,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,101500,0,0,317,0,0,0,0,0,0,0,20,5.7,10,10,9.6,762,9,999999999,279,0.1500,0,88,0.140,2.0,1.0 +2004,3,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,101500,0,0,314,0,0,0,0,0,0,0,10,5.7,10,10,8.0,610,9,999999999,270,0.1500,0,88,0.140,3.0,1.0 +2004,3,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,101500,12,422,317,0,0,0,0,0,0,0,20,6.2,10,10,8.0,762,9,999999999,259,0.1500,0,88,0.140,2.0,1.0 +2004,3,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.6,100,101400,209,1369,317,56,0,56,6200,0,6200,1830,40,7.2,10,10,16.0,213,9,999999999,259,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,101300,468,1369,320,66,0,66,7800,0,7800,2830,30,6.2,10,10,16.0,427,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101400,701,1369,323,167,0,167,19300,0,19300,7080,360,5.2,10,10,4.8,244,9,999999999,240,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,101400,891,1369,323,185,0,185,21900,0,21900,8620,10,5.7,10,10,1.6,152,9,999999999,240,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101300,1025,1369,321,267,6,262,31400,500,31000,12030,40,7.2,9,9,4.8,152,9,999999999,240,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101200,1094,1369,335,322,18,307,37800,1600,36500,13870,10,4.6,10,10,16.0,244,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101200,1093,1369,335,220,6,216,26700,500,26300,10580,20,3.6,10,10,16.0,244,9,999999999,259,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,101100,1023,1369,332,157,0,157,19200,0,19200,7940,10,4.6,10,10,11.2,183,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,101000,887,1369,332,131,0,131,15900,0,15900,6460,20,4.1,10,10,9.6,183,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,101000,697,1369,332,98,0,98,11800,0,11800,4590,20,6.2,10,10,6.4,152,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101000,463,1369,330,45,0,45,5500,0,5500,2020,40,4.1,10,10,1.6,122,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101000,205,1369,330,31,0,31,3600,0,3600,1170,40,4.6,10,10,4.0,152,9,999999999,250,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101000,11,399,330,0,0,0,0,0,0,0,340,3.6,10,10,8.0,152,9,999999999,240,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,100900,0,0,330,0,0,0,0,0,0,0,30,5.7,10,10,14.4,213,9,999999999,240,0.1500,0,88,0.140,1.0,1.0 +2004,3,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,100900,0,0,330,0,0,0,0,0,0,0,30,4.6,10,10,16.0,213,9,999999999,240,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.0,6.4,100,100900,0,0,324,0,0,0,0,0,0,0,30,4.4,10,10,16.0,152,9,999999999,229,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.2,5.1,100,100900,0,0,319,0,0,0,0,0,0,0,10,4.2,10,10,12.8,152,9,999999999,229,0.1500,0,88,0.140,0.0,1.0 +2004,3,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.4,3.7,100,100800,0,0,314,0,0,0,0,0,0,0,30,4.0,10,10,16.0,213,9,999999999,229,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.6,2.4,69,102200,0,0,273,0,0,0,0,0,0,0,30,3.7,1,1,20.8,77777,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.8,1.0,74,102100,0,0,285,0,0,0,0,0,0,0,50,3.5,7,7,19.2,1433,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.0,-0.2,66,102000,0,0,277,0,0,0,0,0,0,0,40,3.3,6,6,19.2,1433,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101900,0,0,286,0,0,0,0,0,0,0,30,3.1,9,9,19.2,1311,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,101900,0,0,283,0,0,0,0,0,0,0,40,3.1,8,8,17.6,1524,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,101900,12,445,277,1,0,1,0,0,0,0,50,3.1,7,7,16.0,914,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101900,210,1369,273,75,31,70,8200,2300,7800,1600,70,3.6,5,5,12.8,77777,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101900,469,1369,307,74,0,74,8700,0,8700,3120,130,4.1,10,10,14.4,366,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101900,702,1369,314,128,0,128,15100,0,15100,5760,140,5.2,10,10,14.4,457,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101900,892,1369,315,177,0,177,21100,0,21100,8330,140,3.6,10,10,9.6,488,9,999999999,129,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101900,1026,1369,312,213,0,213,25500,0,25500,10250,150,3.6,10,10,11.2,457,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,101800,1095,1369,309,194,0,194,23600,0,23600,9680,180,3.1,10,10,8.0,366,9,999999999,120,0.1500,0,88,0.140,1.0,1.0 +1991,4,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101800,1094,1369,317,231,0,231,27700,0,27700,11170,180,3.1,10,10,14.4,914,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101700,1023,1369,317,212,0,212,25400,0,25400,10200,180,2.6,10,10,14.4,1067,9,999999999,120,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101700,888,1369,317,148,0,148,17800,0,17800,7170,170,3.1,10,10,14.4,396,9,999999999,110,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,101700,697,1369,302,278,235,159,30500,24500,18000,3450,190,4.6,7,7,14.4,1372,9,999999999,110,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,101700,464,1369,304,124,41,110,13600,3800,12300,3090,180,3.6,8,8,14.4,1372,9,999999999,110,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,101800,205,1369,290,59,42,53,6500,3100,6000,1290,200,3.6,5,5,12.8,77777,9,999999999,110,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,101800,11,422,300,1,0,1,0,0,0,0,190,2.6,8,8,12.8,1981,9,999999999,100,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101900,0,0,291,0,0,0,0,0,0,0,240,2.6,5,5,16.0,77777,9,999999999,100,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,102000,0,0,289,0,0,0,0,0,0,0,240,4.1,5,5,16.0,77777,9,999999999,100,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,102000,0,0,282,0,0,0,0,0,0,0,260,4.1,2,2,17.6,77777,9,999999999,89,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,102000,0,0,281,0,0,0,0,0,0,0,280,4.6,3,3,17.6,77777,9,999999999,89,0.1500,0,88,0.140,0.0,1.0 +1991,4,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,102000,0,0,274,0,0,0,0,0,0,0,300,4.6,1,1,19.2,77777,9,999999999,89,0.1500,0,88,0.140,0.0,1.0 +1991,4,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,102000,0,0,267,0,0,0,0,0,0,0,280,4.1,0,0,19.2,77777,9,999999999,89,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,102000,0,0,264,0,0,0,0,0,0,0,270,4.6,0,0,19.2,77777,9,999999999,80,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,102000,0,0,269,0,0,0,0,0,0,0,280,6.2,1,1,20.8,77777,9,999999999,80,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,102000,0,0,264,0,0,0,0,0,0,0,280,6.2,0,0,24.0,77777,9,999999999,80,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,102000,0,0,272,0,0,0,0,0,0,0,290,5.7,2,2,24.0,77777,9,999999999,80,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,102100,14,467,265,3,27,2,0,0,0,0,280,7.2,1,1,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,102200,217,1368,271,100,303,52,10400,20200,7200,940,290,6.7,2,2,19.2,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,102200,475,1368,295,189,167,131,20700,15900,15100,2990,310,6.2,8,8,17.6,2438,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,102300,708,1368,295,219,147,143,24600,15300,16700,3600,310,7.2,7,7,19.2,1981,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,102300,897,1368,306,507,411,238,53900,42400,26000,6170,320,8.2,8,8,20.8,2438,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,102300,1031,1368,303,663,587,220,69500,59200,24700,6800,300,5.7,7,7,20.8,1372,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-3.3,42,102300,1100,1368,304,459,145,342,50700,15500,38200,12390,300,8.2,8,8,20.8,1524,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,102400,1098,1368,306,560,359,272,60400,37500,30300,9910,300,5.7,7,7,20.8,1524,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,102400,1028,1368,300,567,545,158,60900,55800,18900,5030,300,8.2,5,5,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-4.4,34,102300,892,1368,305,523,446,231,55500,46000,25400,5940,290,8.2,7,7,24.0,1524,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-5.6,32,102400,701,1368,306,256,136,186,28200,14000,21000,4670,320,6.2,8,8,24.0,1676,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-5.0,35,102400,468,1368,294,268,510,94,27600,46300,11700,1750,320,5.7,5,5,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-4.4,40,102500,210,1368,290,91,256,51,9400,16800,6800,920,340,6.7,5,5,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-4.4,40,102600,12,445,296,1,3,1,0,0,0,0,330,7.7,7,7,24.0,2438,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-4.4,43,102700,0,0,269,0,0,0,0,0,0,0,330,5.2,0,0,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-4.4,45,102800,0,0,267,0,0,0,0,0,0,0,330,6.7,0,0,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-3.3,51,102900,0,0,266,0,0,0,0,0,0,0,330,7.7,0,0,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,102900,0,0,264,0,0,0,0,0,0,0,340,6.2,0,0,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,102900,0,0,261,0,0,0,0,0,0,0,320,5.7,0,0,24.0,77777,9,999999999,69,0.1510,0,88,0.140,0.0,1.0 +1991,4,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,103000,0,0,261,0,0,0,0,0,0,0,320,5.7,0,0,24.0,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,103000,0,0,259,0,0,0,0,0,0,0,320,4.6,0,0,24.0,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,103000,0,0,257,0,0,0,0,0,0,0,320,4.6,0,0,24.0,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,103100,0,0,255,0,0,0,0,0,0,0,330,3.6,0,0,20.8,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,103100,0,0,255,0,0,0,0,0,0,0,330,2.6,0,0,20.8,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,103200,17,513,253,3,29,2,0,0,0,0,330,2.6,0,0,20.8,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,103300,224,1367,258,106,405,40,10900,28600,6200,720,360,3.1,0,0,19.2,77777,9,999999999,69,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-3.9,49,103400,482,1367,266,304,678,65,31500,62700,9300,1280,40,4.6,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-3.9,47,103400,714,1367,268,507,804,87,53400,79300,11900,1920,40,5.7,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-4.4,40,103500,903,1367,274,678,870,104,72400,87600,14400,2700,60,3.6,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-4.4,34,103400,1036,1367,282,800,905,114,82700,90400,14100,2930,230,2.6,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-5.0,34,103400,1104,1367,285,761,684,208,80700,69600,24400,7610,260,4.6,1,1,17.6,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-3.9,37,103400,1103,1367,280,861,920,119,89000,92000,14500,3480,230,5.2,0,0,17.6,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,103300,1032,1367,283,796,903,114,82300,90100,14100,2900,230,4.6,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,103300,896,1367,283,671,867,103,71700,87300,14300,2660,190,4.6,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,103200,705,1367,280,499,798,86,52500,78600,11800,1890,200,5.2,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.1,53,103200,472,1367,277,295,669,64,30500,61600,9200,1260,200,6.2,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,103300,214,1367,273,99,387,38,10100,26800,5900,690,210,5.7,0,0,19.2,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,103300,13,467,271,2,24,2,0,0,0,0,210,4.6,0,0,20.8,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,103300,0,0,269,0,0,0,0,0,0,0,230,3.1,0,0,20.8,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,103300,0,0,267,0,0,0,0,0,0,0,210,3.6,0,0,20.8,77777,9,999999999,80,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,103400,0,0,265,0,0,0,0,0,0,0,210,4.1,0,0,20.8,77777,9,999999999,89,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,103400,0,0,267,0,0,0,0,0,0,0,230,3.6,0,0,20.8,77777,9,999999999,89,0.1530,0,88,0.140,0.0,1.0 +1991,4,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,103400,0,0,263,0,0,0,0,0,0,0,230,3.6,0,0,19.2,77777,9,999999999,89,0.1530,0,88,0.140,0.0,1.0 +1991,4,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,103400,0,0,265,0,0,0,0,0,0,0,250,3.6,0,0,19.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,103300,0,0,263,0,0,0,0,0,0,0,240,3.6,0,0,19.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,103300,0,0,265,0,0,0,0,0,0,0,240,3.6,0,0,19.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,103300,0,0,262,0,0,0,0,0,0,0,240,4.1,0,0,17.6,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,103300,0,0,262,0,0,0,0,0,0,0,230,4.6,0,0,16.0,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,103400,19,535,265,3,0,3,0,0,0,0,230,3.1,4,1,11.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,103400,231,1367,269,81,119,61,8600,8100,7200,1150,260,5.2,2,1,11.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,103400,489,1367,280,234,317,121,25200,30400,14300,2410,260,3.6,3,1,11.2,77777,9,999999999,89,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.7,45,103400,720,1367,283,430,489,172,45700,49400,19600,3710,250,4.1,2,0,11.2,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-1.1,44,103400,909,1367,288,632,625,216,67800,64700,24700,5630,240,5.2,3,0,11.2,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-0.6,41,103400,1041,1367,295,752,690,226,78800,69600,25600,7120,250,6.2,1,0,14.4,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-0.6,41,103300,1109,1367,295,820,718,237,86300,72600,27200,8670,200,5.2,1,0,16.0,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-0.6,42,103200,1107,1367,293,818,717,237,86100,72500,27200,8630,190,5.7,1,0,16.0,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.1,48,103100,1036,1367,295,751,674,239,78300,67700,26800,7390,200,6.7,3,0,16.0,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,2.2,52,103100,900,1367,296,625,632,208,64800,63000,23100,5180,200,6.2,2,0,16.0,77777,9,999999999,100,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,2.2,54,103000,709,1367,294,452,533,176,47900,53700,20000,3780,190,7.7,3,0,16.0,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.2,58,102900,477,1367,289,250,372,120,26100,34400,14100,2300,190,8.2,2,0,16.0,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,102900,218,1367,295,81,71,70,8800,5000,8000,1490,190,6.7,8,3,16.0,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,102900,15,490,297,2,0,2,0,0,0,0,190,7.2,9,4,16.0,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.9,74,102900,0,0,303,0,0,0,0,0,0,0,200,5.7,10,6,16.0,7620,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,4.4,76,102900,0,0,301,0,0,0,0,0,0,0,200,6.2,10,5,20.8,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.7,61,102900,0,0,296,0,0,0,0,0,0,0,220,6.2,6,3,20.8,77777,9,999999999,110,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,102900,0,0,288,0,0,0,0,0,0,0,210,4.6,4,2,20.8,77777,9,999999999,120,0.1540,0,88,0.140,0.0,1.0 +1991,4,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,102800,0,0,291,0,0,0,0,0,0,0,210,4.1,4,3,20.8,77777,9,999999999,120,0.1540,0,88,0.140,0.0,1.0 +1991,4,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,102800,0,0,278,0,0,0,0,0,0,0,210,3.1,5,1,20.8,77777,9,999999999,120,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,102700,0,0,273,0,0,0,0,0,0,0,220,3.6,1,0,20.8,77777,9,999999999,120,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,102700,0,0,273,0,0,0,0,0,0,0,210,3.6,3,0,24.0,77777,9,999999999,120,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,102600,0,0,269,0,0,0,0,0,0,0,210,2.6,2,0,24.0,77777,9,999999999,120,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,102600,0,0,275,0,0,0,0,0,0,0,220,3.1,8,1,24.0,77777,9,999999999,120,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,102600,22,580,294,4,16,3,0,0,0,0,220,3.6,7,6,20.8,3962,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,102600,238,1366,311,66,107,47,7100,7500,5800,840,220,3.6,9,8,20.8,3962,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,102500,495,1366,305,248,356,119,26100,33300,14000,2280,200,2.6,7,5,19.2,7620,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.6,69,102400,726,1366,312,401,515,127,42100,51100,14900,2780,180,4.1,8,4,17.6,77777,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,7.2,71,102400,914,1366,313,634,619,219,68000,64100,25000,5760,190,3.6,7,2,16.0,77777,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.3,69,102300,1047,1366,328,749,655,247,78000,65700,27500,7780,190,3.6,5,4,16.0,77777,9,999999999,129,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,102200,1114,1366,354,306,0,306,36100,0,36100,13940,190,5.7,10,10,16.0,3353,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.3,69,102200,1112,1366,360,244,0,244,29300,0,29300,11730,190,3.1,10,10,16.0,2286,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,102000,1040,1366,358,227,0,227,27100,0,27100,10840,230,4.6,10,10,19.2,1311,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,102000,904,1366,359,194,0,194,23000,0,23000,9030,240,5.7,10,10,14.4,1311,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101900,713,1366,359,147,0,147,17200,0,17200,6490,240,5.2,10,10,14.4,884,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,9.4,89,101900,481,1366,347,90,0,90,10500,0,10500,3690,200,5.2,10,10,17.6,732,9,999999999,139,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101900,223,1366,359,33,0,33,3800,0,3800,1260,230,6.2,10,10,16.0,732,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,101900,16,512,353,1,0,1,0,0,0,0,240,4.6,10,10,14.4,2134,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.6,86,101900,0,0,357,0,0,0,0,0,0,0,260,4.1,10,10,14.4,1676,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.0,89,101900,0,0,351,0,0,0,0,0,0,0,210,2.1,10,10,12.8,610,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.9,86,101800,0,0,347,0,0,0,0,0,0,0,220,3.1,10,10,16.0,3658,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,101700,0,0,340,0,0,0,0,0,0,0,220,3.6,10,10,12.8,3353,9,999999999,150,0.1550,0,88,0.140,0.0,1.0 +1991,4,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,9.4,89,101700,0,0,347,0,0,0,0,0,0,0,250,3.1,10,10,11.2,3048,9,999999999,160,0.1550,0,88,0.140,0.0,1.0 +1991,4,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101700,0,0,348,0,0,0,0,0,0,0,220,3.6,10,10,8.0,366,9,999999999,160,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,101600,0,0,352,0,0,0,0,0,0,0,230,3.6,10,10,8.0,457,9,999999999,160,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101600,0,0,299,0,0,0,0,0,0,0,250,2.6,0,0,6.4,77777,9,999999999,160,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101600,0,0,296,0,0,0,0,0,0,0,270,3.6,0,0,3.2,77777,9,999999999,160,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101600,0,0,306,0,0,0,0,0,0,0,240,3.6,2,2,3.2,77777,9,999999999,160,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,101700,25,626,306,6,34,5,800,1100,700,80,280,3.1,3,3,3.2,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,101800,245,1365,298,123,481,37,12800,35600,6400,690,260,2.6,0,0,3.2,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101700,502,1365,312,321,716,58,33800,67200,9100,1220,280,3.1,0,0,3.2,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.7,70,101700,732,1365,330,519,825,76,54300,80900,10800,1670,320,4.1,0,0,16.0,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,101700,920,1365,348,626,548,256,66100,56600,27900,6880,30,2.6,10,3,20.8,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.7,44,101700,1052,1365,346,741,722,185,78900,73600,22100,6110,240,4.6,10,2,20.8,77777,9,999999999,170,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,101600,1118,1365,353,767,639,243,80600,64600,27600,9110,230,6.2,9,3,16.0,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.6,59,101600,1116,1365,348,754,638,232,79500,64600,26500,8680,240,6.7,10,2,16.0,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.6,59,101500,1044,1365,343,710,681,189,75400,69300,22200,6140,190,6.2,10,1,16.0,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101500,908,1365,334,626,718,147,66500,73000,17800,3900,190,6.2,10,1,20.8,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,101400,717,1365,339,409,451,172,43500,45500,19500,3710,190,6.7,10,4,20.8,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.7,78,101400,485,1365,339,258,409,113,27200,38100,13700,2150,190,5.7,10,4,20.8,77777,9,999999999,179,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,101400,227,1365,331,94,143,70,9800,9600,8200,1370,200,5.2,9,4,20.8,77777,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,101400,18,535,316,4,27,3,0,0,0,0,230,3.6,7,2,20.8,77777,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,101500,0,0,342,0,0,0,0,0,0,0,190,3.1,9,9,20.8,4267,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101500,0,0,377,0,0,0,0,0,0,0,340,1.5,10,10,20.8,3353,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.7,75,101500,0,0,375,0,0,0,0,0,0,0,210,3.1,10,10,20.8,3048,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,9.4,74,101500,0,0,361,0,0,0,0,0,0,0,220,3.1,10,10,20.8,3962,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.0,75,101400,0,0,364,0,0,0,0,0,0,0,210,2.1,10,10,20.8,3962,9,999999999,189,0.1560,0,88,0.140,0.0,1.0 +1991,4,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,101400,0,0,370,0,0,0,0,0,0,0,250,3.1,10,10,17.6,3353,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9*9*9,14.5,10.1,75,101400,0,0,365,0,0,0,0,0,0,0,230,2.6,10,10,17.6,3658,9,999999999,200,0.1580,0,88,0.140,999.0,99.0 +1991,4,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101400,0,0,349,0,0,0,0,0,0,0,200,2.1,9,9,17.6,3962,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101300,0,0,328,0,0,0,0,0,0,0,240,3.1,4,4,19.2,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.1,77,101400,0,0,359,0,0,0,0,0,0,0,260,4.1,9,9,19.2,3962,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,101400,28,648,325,6,18,5,700,500,700,80,240,4.6,5,2,17.6,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.9,64,101500,251,1364,339,119,152,91,12700,11300,10600,1950,220,3.6,8,5,19.2,6706,9,999999999,209,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,7.8,54,101400,508,1364,337,290,425,131,30200,40000,15300,2550,240,3.6,7,2,19.2,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.3,49,101400,738,1364,336,507,744,104,52600,73200,12900,2190,240,4.6,0,0,19.2,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,101400,925,1364,347,674,811,123,70800,81300,15500,3140,260,5.7,0,0,19.2,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,7.8,37,101300,1056,1364,354,792,848,135,84000,85600,17600,4280,250,6.7,0,0,19.2,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,8.3,33,101200,1123,1364,366,849,846,152,89700,85300,19300,5490,240,6.2,2,0,20.8,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,9.4,34,101200,1120,1364,373,844,832,160,88600,83700,19700,5660,240,6.2,3,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,8.9,34,101100,1048,1364,376,655,595,198,69400,60500,22800,6460,250,7.2,2,1,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,9.4,36,101100,912,1364,367,662,808,122,69600,80900,15400,3050,250,6.7,0,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,10.0,37,101000,721,1364,368,493,737,103,52500,73700,13400,2310,240,6.7,0,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,9.4,35,101000,489,1364,377,261,358,132,27000,33300,15100,2560,260,6.7,8,1,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,101100,231,1364,367,92,204,58,9800,13900,7400,1080,250,6.2,7,2,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.0,41,101100,20,557,375,3,10,3,0,0,0,0,270,5.2,5,3,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.0,47,101200,0,0,361,0,0,0,0,0,0,0,280,5.7,2,2,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,101300,0,0,345,0,0,0,0,0,0,0,270,4.6,1,1,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,101300,0,0,333,0,0,0,0,0,0,0,260,4.1,0,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.0,60,101300,0,0,331,0,0,0,0,0,0,0,250,3.1,0,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101300,0,0,328,0,0,0,0,0,0,0,240,4.6,0,0,24.0,77777,9,999999999,200,0.1580,0,88,0.140,0.0,1.0 +1991,4,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.6,70,101300,0,0,324,0,0,0,0,0,0,0,240,3.1,0,0,24.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.6,67,101300,0,0,327,0,0,0,0,0,0,0,240,2.6,0,0,24.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.6,72,101300,0,0,322,0,0,0,0,0,0,0,230,4.1,0,0,24.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.6,78,101300,0,0,316,0,0,0,0,0,0,0,230,2.6,0,0,24.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.0,75,101300,0,0,316,0,0,0,0,0,0,0,240,2.6,0,0,24.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,101400,31,693,328,7,0,7,800,0,800,270,260,3.6,8,3,19.2,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.1,72,101400,258,1363,331,102,159,72,10700,11600,8500,1380,240,2.6,6,1,19.2,77777,9,999999999,189,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101400,514,1363,343,288,440,121,30300,41600,14500,2330,220,2.6,3,0,19.2,77777,9,999999999,189,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.1,51,101400,744,1363,362,416,456,166,44500,46300,19200,3630,240,3.6,6,2,16.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,10.6,38,101400,930,1363,390,382,295,181,42000,30700,21000,4800,240,4.6,6,4,16.0,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.1,48,101300,1061,1363,367,735,662,220,77400,67000,25100,7300,210,3.6,2,2,16.0,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,11.1,43,101300,1127,1363,379,822,631,300,88200,65900,33600,11900,190,5.2,3,3,19.2,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.7,50,101200,1124,1363,368,779,621,266,81300,62500,29700,10060,200,5.7,6,2,19.2,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,11.7,57,101200,1052,1363,361,739,514,342,77400,53300,36100,11600,190,6.2,10,3,19.2,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.6,49,101100,916,1363,374,497,179,377,53700,18800,41000,11020,200,6.2,10,6,19.2,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.1,67,101000,725,1363,352,424,303,263,44900,31600,28000,6360,190,4.1,10,6,19.2,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.6,65,101000,493,1363,356,225,234,140,23900,22500,15700,2880,180,4.6,10,7,20.8,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,101000,235,1363,354,73,2,73,8000,100,8000,2290,190,5.7,10,8,19.2,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,101000,21,579,339,4,0,4,0,0,0,0,180,1.5,9,6,19.2,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.7,78,101000,0,0,342,0,0,0,0,0,0,0,200,4.1,8,5,19.2,6706,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,101100,0,0,328,0,0,0,0,0,0,0,190,3.6,7,2,17.6,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101100,0,0,329,0,0,0,0,0,0,0,190,4.1,8,3,17.6,77777,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101100,0,0,331,0,0,0,0,0,0,0,190,3.6,9,5,17.6,6096,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101000,0,0,331,0,0,0,0,0,0,0,180,2.6,9,5,14.4,6096,9,999999999,200,0.1590,0,88,0.140,0.0,1.0 +1991,4,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,100900,0,0,324,0,0,0,0,0,0,0,190,3.1,8,3,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,100900,0,0,318,0,0,0,0,0,0,0,180,2.6,7,2,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,100800,0,0,318,0,0,0,0,0,0,0,190,2.6,8,3,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,100800,0,0,315,0,0,0,0,0,0,0,190,2.6,5,2,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,100800,0,0,321,0,0,0,0,0,0,0,190,4.1,8,3,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,100800,34,715,329,7,20,6,800,600,800,90,190,4.1,7,6,12.8,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,100800,265,1362,348,103,32,97,11300,2600,10800,2210,180,2.6,9,9,12.8,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.2,87,100800,521,1362,344,183,180,114,19900,17600,13100,2250,190,3.1,7,7,12.8,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,100800,750,1362,351,521,699,136,54600,69500,16300,3020,190,3.1,3,3,14.4,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,100800,936,1362,405,246,0,246,28700,0,28700,11010,200,3.1,10,10,14.4,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,100700,1066,1362,390,458,293,228,50000,30600,26000,7740,210,4.1,8,8,17.6,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,100700,1132,1362,375,486,270,261,54400,29400,29900,9690,200,5.2,6,6,19.2,3962,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.3,68,100700,1128,1362,365,528,359,231,58200,37600,27000,9070,190,5.2,6,6,19.2,1372,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,100600,1056,1362,362,683,540,265,73600,56300,29800,8890,190,5.7,5,5,19.2,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.8,73,100500,920,1362,375,419,100,351,46000,10300,39100,11720,180,5.7,9,9,19.2,2438,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,100500,729,1362,341,473,594,155,49000,58400,17700,3290,180,4.6,2,2,19.2,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,100500,497,1362,326,306,646,71,32400,60600,10200,1410,190,2.1,0,0,19.2,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,100500,240,1362,326,103,267,56,10700,18800,7400,1010,180,3.6,7,1,19.2,77777,9,999999999,200,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,100500,23,602,319,5,24,4,0,0,0,0,190,2.6,3,1,16.0,77777,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,100500,0,0,318,0,0,0,0,0,0,0,170,1.5,4,1,16.0,77777,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,100500,0,0,315,0,0,0,0,0,0,0,170,2.1,3,0,16.0,77777,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,100500,0,0,322,0,0,0,0,0,0,0,200,1.5,4,1,16.0,77777,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.3,90,100500,0,0,328,0,0,0,0,0,0,0,180,4.1,4,1,16.0,77777,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,100500,0,0,339,0,0,0,0,0,0,0,190,3.6,7,7,16.0,2438,9,999999999,189,0.1600,0,88,0.140,0.0,1.0 +1991,4,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,100400,0,0,336,0,0,0,0,0,0,0,220,4.1,7,7,16.0,3048,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,100300,0,0,313,0,0,0,0,0,0,0,180,4.1,4,1,16.0,77777,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,100300,0,0,310,0,0,0,0,0,0,0,220,1.5,2,0,16.0,77777,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,100300,0,0,307,0,0,0,0,0,0,0,210,2.1,3,0,16.0,77777,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,100300,0,0,332,0,0,0,0,0,0,0,250,4.1,7,2,16.0,77777,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,100400,38,760,341,9,10,8,1000,400,1000,160,250,4.1,8,4,20.8,6706,9,999999999,189,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.8,78,100500,271,1362,352,70,31,63,7600,2500,7100,1620,250,4.6,9,6,20.8,6706,9,999999999,179,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.3,75,100500,527,1362,352,205,213,123,22200,20900,14100,2460,240,6.2,8,4,20.8,6706,9,999999999,179,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,12.8,59,100600,755,1362,378,426,320,248,45400,33700,26700,5980,260,7.2,7,7,24.0,2896,9,999999999,179,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,100500,941,1362,373,580,395,306,62500,42500,33100,8710,270,9.3,8,5,24.0,6706,9,999999999,170,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,4.4,33,100600,1071,1362,360,570,408,249,61800,42600,28300,8590,270,10.8,7,5,32.0,6706,9,999999999,170,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,-3.9,17,100500,1136,1362,355,631,437,266,68600,45700,30400,10750,280,11.8,8,6,32.0,6706,9,999999999,160,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,-0.6,25,100500,1132,1362,348,654,488,249,71700,51100,29100,9930,270,10.3,6,5,32.0,6706,9,999999999,160,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,0.0,25,100500,1060,1362,347,760,759,169,81500,77800,20800,5760,290,7.7,4,3,32.0,77777,9,999999999,160,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,3.9,35,100500,923,1362,345,673,788,138,69900,78600,16400,3360,280,8.8,4,2,32.0,77777,9,999999999,150,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,2.8,32,100500,733,1362,347,509,697,134,53300,69100,16000,2930,270,10.3,4,3,32.0,77777,9,999999999,150,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,1.1,29,100500,501,1362,339,305,579,92,31600,53800,11800,1760,290,12.9,2,2,32.0,77777,9,999999999,139,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,0.6,28,100500,244,1362,342,118,196,83,12200,13800,9800,1670,280,10.8,3,3,24.0,77777,9,999999999,139,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,0.6,30,100600,25,624,333,5,20,4,600,700,600,70,270,9.8,2,2,24.0,77777,9,999999999,139,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,0.0,34,100900,0,0,310,0,0,0,0,0,0,0,300,10.8,0,0,24.0,77777,9,999999999,129,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-1.7,35,101000,0,0,299,0,0,0,0,0,0,0,290,15.5,0,0,24.0,77777,9,999999999,129,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-3.9,33,101100,0,0,287,0,0,0,0,0,0,0,310,11.3,0,0,32.0,77777,9,999999999,120,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-2.8,39,101200,0,0,284,0,0,0,0,0,0,0,290,10.3,0,0,32.0,77777,9,999999999,120,0.1610,0,88,0.140,0.0,1.0 +1991,4,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.2,43,101300,0,0,317,0,0,0,0,0,0,0,290,9.8,9,9,32.0,1676,9,999999999,120,0.1610,0,88,0.140,0.0,1.0 +1991,4,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-4.4,36,101300,0,0,307,0,0,0,0,0,0,0,300,9.8,8,8,32.0,1676,9,999999999,110,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-5.0,37,101500,0,0,294,0,0,0,0,0,0,0,300,10.8,6,6,32.0,1676,9,999999999,110,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-5.6,39,101600,0,0,273,0,0,0,0,0,0,0,330,10.8,1,1,32.0,77777,9,999999999,100,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.6,41,101700,0,0,266,0,0,0,0,0,0,0,320,11.8,0,0,32.0,77777,9,999999999,100,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.0,43,101800,0,0,266,0,0,0,0,0,0,0,320,9.3,0,0,32.0,77777,9,999999999,89,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.0,43,101900,42,805,266,9,18,8,1000,700,1000,160,300,8.2,0,0,32.0,77777,9,999999999,89,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-5.6,38,102000,278,1361,270,125,314,61,13100,23800,8300,1100,300,9.3,0,0,32.0,77777,9,999999999,89,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-6.1,33,102000,533,1361,274,322,566,100,33300,53200,12500,1930,320,8.8,0,0,32.0,77777,9,999999999,89,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-7.2,27,102100,761,1361,279,525,700,133,55200,69900,16000,3000,320,10.3,0,0,32.0,77777,9,999999999,89,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-6.7,26,102100,946,1361,284,695,774,157,74000,78800,19100,4390,330,8.8,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-7.8,23,102100,1075,1361,286,816,815,172,84600,81400,20100,5310,320,9.8,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-10.0,17,102000,1140,1361,290,877,832,179,91200,83300,21200,6550,300,12.4,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-9.4,17,102000,1136,1361,293,873,831,178,90800,83200,21100,6440,290,12.4,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-10.6,14,102000,1063,1361,296,805,812,170,83400,81100,19800,5120,320,10.8,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-10.6,14,102000,927,1361,296,678,768,155,72100,78100,18800,4210,310,12.9,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-11.7,13,102000,736,1361,295,503,689,130,52800,68500,15700,2870,310,9.3,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-11.7,14,102100,504,1361,292,299,546,96,30900,50700,12000,1830,320,10.8,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-13.3,13,102200,248,1361,284,106,275,56,11100,19700,7500,1010,340,9.8,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-15.0,13,102300,27,646,275,6,8,5,600,300,600,100,340,8.2,3,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-13.3,16,102500,0,0,273,0,0,0,0,0,0,0,350,6.7,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-13.9,16,102600,0,0,270,0,0,0,0,0,0,0,320,10.3,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-12.8,18,102700,0,0,267,0,0,0,0,0,0,0,320,6.7,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-10.6,24,102800,0,0,265,0,0,0,0,0,0,0,350,6.7,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-10.6,25,102900,0,0,263,0,0,0,0,0,0,0,320,7.7,0,0,32.0,77777,9,999999999,80,0.1620,0,88,0.140,0.0,1.0 +1991,4,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-10.0,28,102900,0,0,262,0,0,0,0,0,0,0,330,8.8,0,0,32.0,77777,9,999999999,80,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-8.3,33,102900,0,0,261,0,0,0,0,0,0,0,330,7.2,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-7.8,36,102900,0,0,260,0,0,0,0,0,0,0,340,7.2,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.7,41,103000,0,0,258,0,0,0,0,0,0,0,340,6.7,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.7,41,103100,0,0,258,0,0,0,0,0,0,0,330,7.7,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-7.8,39,103200,45,827,255,14,101,9,1600,4600,1300,170,330,6.2,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-9.4,33,103300,284,1360,256,153,530,42,15900,41700,7200,790,340,8.2,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-9.4,30,103300,539,1360,260,359,745,64,37800,70800,9600,1350,340,6.7,0,0,32.0,77777,9,999999999,69,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-10.0,26,103400,766,1360,264,561,847,83,58500,83300,11400,1770,350,7.7,0,0,32.0,77777,9,999999999,80,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-10.0,24,103400,951,1360,270,728,902,97,75600,89900,12700,2390,10,7.7,0,0,32.0,77777,9,999999999,80,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-11.1,21,103300,1080,1360,271,846,931,106,87600,93200,13500,3170,30,5.7,0,0,32.0,77777,9,999999999,80,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-12.2,18,103300,1144,1360,272,904,943,110,93500,94500,13800,3810,350,6.2,0,0,32.0,77777,9,999999999,80,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-12.8,15,103300,1140,1360,278,899,941,110,93000,94300,13800,3760,360,5.7,0,0,32.0,77777,9,999999999,89,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-13.3,14,103200,1067,1360,281,832,926,105,86200,92600,13400,3070,360,7.2,0,0,32.0,77777,9,999999999,89,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-15.0,11,103200,931,1360,282,696,872,99,72300,86800,12700,2330,20,9.3,1,0,32.0,77777,9,999999999,89,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-15.0,11,103200,740,1360,282,534,832,81,57000,82800,11800,1890,360,6.7,0,0,32.0,77777,9,999999999,89,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-13.9,13,103300,508,1360,281,325,700,63,33900,65700,9300,1300,30,6.2,1,0,32.0,77777,9,999999999,100,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-12.8,15,103300,252,1360,285,115,341,52,12200,24700,7600,930,10,6.2,8,1,32.0,77777,9,999999999,100,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-11.7,18,103400,29,669,280,8,52,5,800,2200,700,100,60,3.6,4,1,32.0,77777,9,999999999,100,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-11.1,20,103500,0,0,278,0,0,0,0,0,0,0,40,2.6,4,1,32.0,77777,9,999999999,100,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-9.4,26,103500,0,0,274,0,0,0,0,0,0,0,90,2.1,2,1,32.0,77777,9,999999999,110,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-5.0,40,103500,0,0,276,0,0,0,0,0,0,0,210,2.6,3,1,32.0,77777,9,999999999,110,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.3,46,103600,0,0,278,0,0,0,0,0,0,0,0,0.0,4,1,32.0,77777,9,999999999,110,0.1640,0,88,0.140,0.0,1.0 +1991,4,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,103600,0,0,283,0,0,0,0,0,0,0,150,1.5,8,3,32.0,77777,9,999999999,110,0.1640,0,88,0.140,0.0,1.0 +1991,4,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,103500,0,0,282,0,0,0,0,0,0,0,200,2.6,6,3,32.0,77777,9,999999999,120,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,103400,0,0,295,0,0,0,0,0,0,0,250,2.1,7,7,32.0,4267,9,999999999,120,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,103400,0,0,296,0,0,0,0,0,0,0,260,4.6,8,8,32.0,4267,9,999999999,120,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,103500,0,0,288,0,0,0,0,0,0,0,270,4.6,6,6,32.0,4267,9,999999999,120,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,103400,0,0,285,0,0,0,0,0,0,0,260,3.6,8,6,32.0,4267,9,999999999,120,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,103500,49,872,291,11,0,11,1300,0,1300,410,300,2.1,10,7,32.0,4267,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-3.3,47,103500,290,1359,304,72,10,70,8100,400,8000,2480,240,3.1,10,9,32.0,4267,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,103400,545,1359,317,118,0,118,13600,0,13600,4830,230,2.6,10,10,32.0,3962,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,103400,772,1359,319,183,0,183,21300,0,21300,8000,190,3.1,10,10,24.0,3962,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.2,46,103400,956,1359,321,244,0,244,28600,0,28600,11080,190,2.6,10,10,24.0,3658,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.7,45,103300,1084,1359,311,447,197,289,49300,21400,32200,9920,190,3.6,8,8,24.0,3658,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,103200,1148,1359,328,307,0,307,36400,0,36400,14110,180,4.6,10,10,24.0,3048,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.7,63,103200,1144,1359,325,244,0,244,29400,0,29400,11810,170,5.2,10,10,24.0,2134,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,103100,1071,1359,319,225,0,225,27000,0,27000,10890,190,7.2,10,10,12.8,884,9,999999999,129,0.1650,0,88,0.140,1.0,1.0 +1991,4,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,103100,934,1359,320,189,0,189,22500,0,22500,8990,190,6.7,10,10,11.2,884,9,999999999,129,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,103000,744,1359,317,139,0,139,16500,0,16500,6330,190,4.1,10,10,11.2,762,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,103000,512,1359,317,89,0,89,10400,0,10400,3760,170,3.6,10,10,11.2,823,9,999999999,139,0.1650,0,88,0.140,1.0,1.0 +1991,4,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,102900,256,1359,316,49,0,49,5600,0,5600,1810,110,3.6,10,10,11.2,518,9,999999999,139,0.1650,0,88,0.140,1.0,1.0 +1991,4,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102900,31,691,313,4,0,4,500,0,500,160,90,4.6,10,10,9.6,823,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102900,0,0,312,0,0,0,0,0,0,0,90,4.6,10,10,11.2,1524,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102800,0,0,313,0,0,0,0,0,0,0,80,5.7,10,10,11.2,244,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,102800,0,0,313,0,0,0,0,0,0,0,70,6.2,10,10,16.0,274,9,999999999,139,0.1650,0,88,0.140,1.0,1.0 +1991,4,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,102900,0,0,310,0,0,0,0,0,0,0,70,5.2,10,10,16.0,274,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102800,0,0,309,0,0,0,0,0,0,0,70,6.7,10,10,16.0,244,9,999999999,139,0.1650,0,88,0.140,0.0,1.0 +1991,4,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102800,0,0,309,0,0,0,0,0,0,0,70,5.7,10,10,19.2,244,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102800,0,0,309,0,0,0,0,0,0,0,60,6.2,10,10,19.2,274,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102800,0,0,309,0,0,0,0,0,0,0,80,6.7,10,10,19.2,274,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102800,0,0,309,0,0,0,0,0,0,0,70,5.2,10,10,19.2,396,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,102900,0,0,312,0,0,0,0,0,0,0,70,4.6,10,10,19.2,396,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,102900,53,894,312,7,0,7,900,0,900,270,60,4.6,10,10,19.2,396,9,999999999,139,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,103000,297,1359,312,43,0,43,5000,0,5000,1710,80,5.7,10,10,24.0,457,9,999999999,150,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,103000,550,1359,307,109,49,89,12000,4700,10100,2760,70,6.7,9,9,24.0,579,9,999999999,150,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.2,73,103000,777,1359,298,330,93,277,36300,9400,30900,8540,70,6.7,7,7,24.0,640,9,999999999,150,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,103100,961,1359,297,651,578,242,69700,60000,27200,6880,70,5.2,5,4,24.0,77777,9,999999999,160,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,103100,1089,1359,300,748,663,216,79000,67300,25000,7710,110,3.6,7,2,24.0,77777,9,999999999,160,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,103100,1152,1359,305,715,524,270,77800,54800,31200,11510,130,4.1,8,3,24.0,77777,9,999999999,160,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,103000,1147,1359,303,817,594,315,87500,62000,35000,13350,120,4.6,7,2,24.0,77777,9,999999999,170,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.6,50,103100,1074,1359,295,769,717,202,81600,73000,23800,7020,140,6.2,8,1,24.0,77777,9,999999999,170,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,103000,938,1359,296,594,588,187,62300,59300,21200,5060,130,6.7,7,2,24.0,77777,9,999999999,179,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.1,58,102900,747,1359,298,420,426,185,44500,43200,20700,4100,130,7.2,9,4,24.0,77777,9,999999999,179,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.2,65,102900,516,1359,297,221,312,103,23800,29600,12500,1950,140,6.2,9,4,24.0,77777,9,999999999,179,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.2,70,102900,260,1359,297,93,49,84,10200,4000,9400,1990,140,4.6,9,6,24.0,7010,9,999999999,189,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,102900,33,713,299,7,2,7,900,0,900,270,150,3.1,10,7,24.0,6096,9,999999999,189,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,102900,0,0,320,0,0,0,0,0,0,0,170,3.6,10,10,24.0,6096,9,999999999,200,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,102900,0,0,311,0,0,0,0,0,0,0,160,2.6,10,9,24.0,3658,9,999999999,200,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,102800,0,0,320,0,0,0,0,0,0,0,160,2.1,10,10,24.0,2743,9,999999999,200,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,102700,0,0,321,0,0,0,0,0,0,0,100,2.6,10,10,20.8,2896,9,999999999,209,0.1660,0,88,0.140,0.0,1.0 +1991,4,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,102700,0,0,317,0,0,0,0,0,0,0,110,2.6,10,10,20.8,2896,9,999999999,209,0.1660,0,88,0.140,0.0,1.0 +1991,4,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,102500,0,0,319,0,0,0,0,0,0,0,90,3.6,10,10,19.2,1981,9,999999999,220,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102500,0,0,318,0,0,0,0,0,0,0,90,3.6,10,10,19.2,1829,9,999999999,220,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,102500,0,0,318,0,0,0,0,0,0,0,110,2.6,10,10,19.2,1829,9,999999999,220,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,102400,0,0,321,0,0,0,0,0,0,0,110,2.6,10,10,19.2,1676,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,102300,0,0,321,0,0,0,0,0,0,0,110,3.6,10,10,19.2,1676,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,102300,58,939,321,9,0,9,1100,0,1100,350,130,3.1,10,10,19.2,1311,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,102300,303,1358,322,43,0,43,5000,0,5000,1720,120,3.6,10,10,17.6,1158,9,999999999,240,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,102200,556,1358,325,98,0,98,11500,0,11500,4210,120,3.6,10,10,12.8,853,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,102100,782,1358,326,155,0,155,18300,0,18300,7080,120,4.1,10,10,9.6,488,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,7.2,100,102000,965,1358,326,168,0,168,20300,0,20300,8270,130,5.2,10,10,4.0,213,9,999999999,229,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101900,1093,1358,330,163,0,163,20100,0,20100,8360,110,4.1,10,10,3.2,152,9,999999999,220,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,101800,1156,1358,332,174,0,174,21600,0,21600,8920,120,4.1,10,10,4.0,122,9,999999999,220,0.1670,0,88,0.140,2.0,1.0 +1991,4,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101700,1151,1358,335,173,0,173,21400,0,21400,8870,120,2.6,10,10,4.0,122,9,999999999,220,0.1670,0,88,0.140,1.0,1.0 +1991,4,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,101500,1077,1358,338,161,0,161,19800,0,19800,8240,110,3.6,10,10,4.8,122,9,999999999,209,0.1670,0,88,0.140,2.0,1.0 +1991,4,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101300,941,1358,339,136,0,136,16600,0,16600,6840,110,4.1,10,10,9.6,152,9,999999999,209,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101200,751,1358,339,102,0,102,12400,0,12400,4900,100,4.1,10,10,2.4,122,9,999999999,209,0.1670,0,88,0.140,2.0,1.0 +1991,4,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,520,1358,339,62,0,62,7500,0,7500,2780,110,3.6,10,10,8.0,122,9,999999999,200,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,264,1358,339,27,0,27,3200,0,3200,1110,140,2.1,10,10,0.8,61,9,999999999,200,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,35,735,339,3,0,3,400,0,400,120,170,2.6,10,10,0.8,91,9,999999999,200,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,0,0,339,0,0,0,0,0,0,0,220,3.6,10,10,8.0,213,9,999999999,189,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101100,0,0,339,0,0,0,0,0,0,0,240,4.1,10,10,2.4,61,9,999999999,189,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101100,0,0,343,0,0,0,0,0,0,0,270,4.6,10,10,2.4,61,9,999999999,179,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101200,0,0,349,0,0,0,0,0,0,0,290,7.7,10,10,12.8,244,9,999999999,179,0.1670,0,88,0.140,0.0,1.0 +1991,4,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101200,0,0,311,0,0,0,0,0,0,0,270,6.2,2,2,14.4,77777,9,999999999,179,0.1670,0,88,0.140,0.0,1.0 +1991,4,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101200,0,0,299,0,0,0,0,0,0,0,270,5.7,0,0,16.0,77777,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101200,0,0,296,0,0,0,0,0,0,0,270,4.6,0,0,16.0,77777,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101300,0,0,295,0,0,0,0,0,0,0,270,4.6,0,0,19.2,77777,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101300,0,0,293,0,0,0,0,0,0,0,260,3.6,0,0,19.2,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.8,90,101300,0,0,292,0,0,0,0,0,0,0,250,4.1,0,0,19.2,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101400,62,961,295,19,87,13,2100,3600,1800,220,260,4.6,0,0,19.2,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,101400,309,1357,298,160,475,52,16600,38400,7800,960,250,4.6,0,0,19.2,77777,9,999999999,150,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,101400,562,1357,310,363,686,79,38500,66100,11100,1620,240,4.1,0,0,19.2,77777,9,999999999,150,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,101400,787,1357,319,560,791,101,58900,78600,13200,2300,240,5.7,0,0,19.2,77777,9,999999999,150,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,7.8,54,101400,970,1357,326,725,848,118,77100,85600,15800,3310,270,6.7,0,0,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,101300,1097,1357,333,840,880,128,86500,88000,15200,3590,280,7.2,0,0,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,7.2,42,101300,1160,1357,347,862,858,128,88700,85900,15100,4350,280,7.7,1,1,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,7.2,41,101300,1154,1357,354,859,805,174,89900,80800,21000,6780,270,9.3,2,2,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,7.2,39,101300,1081,1357,380,650,411,322,68800,42800,34600,11640,270,6.7,8,8,24.0,1676,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,101200,944,1357,375,499,385,230,53500,39900,25600,6370,260,5.7,7,7,24.0,1676,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.3,44,101200,754,1357,362,532,659,166,55100,65000,18900,3590,250,7.2,4,4,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.7,37,101200,523,1357,365,289,392,137,30100,37200,15700,2680,270,8.2,4,4,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,101300,268,1357,353,119,269,66,12400,20000,8400,1200,290,7.2,3,3,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.2,47,101300,38,758,353,10,25,8,1100,800,1000,130,250,4.1,5,5,24.0,77777,9,999999999,160,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.9,60,101400,0,0,357,0,0,0,0,0,0,0,250,4.6,8,8,24.0,1981,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,101400,0,0,348,0,0,0,0,0,0,0,260,5.2,6,6,24.0,3353,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,101500,0,0,372,0,0,0,0,0,0,0,220,2.6,10,10,20.8,2134,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101500,0,0,379,0,0,0,0,0,0,0,300,4.6,10,10,24.0,2896,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,101500,0,0,376,0,0,0,0,0,0,0,310,5.2,10,10,24.0,2438,9,999999999,170,0.1680,0,88,0.140,0.0,1.0 +1991,4,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.1,77,101400,0,0,336,0,0,0,0,0,0,0,0,0.0,4,4,24.0,77777,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,101400,0,0,331,0,0,0,0,0,0,0,0,0.0,5,5,20.8,77777,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101500,0,0,361,0,0,0,0,0,0,0,300,3.1,10,10,19.2,1676,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101400,0,0,356,0,0,0,0,0,0,0,360,4.1,10,10,19.2,2438,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,9.4,86,101500,0,0,350,0,0,0,0,0,0,0,20,2.6,10,10,16.0,2591,9,999999999,179,0.1690,0,88,0.140,1.0,1.0 +1991,4,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.0,89,101500,66,1006,351,10,0,10,1200,0,1200,380,0,0.0,10,10,11.2,2438,9,999999999,179,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,9.4,86,101500,315,1356,340,75,33,67,8200,2800,7600,1790,150,1.5,9,9,19.2,3353,9,999999999,179,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.0,83,101500,567,1356,346,214,80,180,23400,7800,20200,5050,120,1.5,9,9,17.6,3962,9,999999999,179,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,101500,792,1356,360,165,0,165,19400,0,19400,7490,60,3.1,10,10,16.0,1981,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101500,974,1356,361,210,0,210,25000,0,25000,9960,60,3.6,10,10,14.4,2591,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.6,78,101500,1101,1356,355,332,204,166,37600,21400,20200,6080,40,3.6,9,9,14.4,3048,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,101500,1164,1356,363,256,0,256,30800,0,30800,12320,50,4.6,10,10,14.4,732,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,101400,1158,1356,363,254,0,254,30600,0,30600,12230,110,4.1,10,10,14.4,732,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.9,83,101400,1084,1356,350,236,0,236,28300,0,28300,11360,110,4.1,10,10,12.8,732,9,999999999,170,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101400,948,1356,341,203,0,203,24100,0,24100,9580,110,4.6,10,10,11.2,732,9,999999999,160,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101400,758,1356,341,156,0,156,18400,0,18400,7020,110,3.6,10,10,11.2,1067,9,999999999,160,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101400,527,1356,338,83,0,83,9800,0,9800,3600,90,5.7,10,10,11.2,213,9,999999999,160,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.8,93,101500,272,1356,335,35,0,35,4100,0,4100,1400,80,5.2,10,10,4.8,213,9,999999999,160,0.1690,0,88,0.140,1.0,1.0 +1991,4,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.8,90,101500,40,780,337,4,0,4,500,0,500,160,90,3.1,10,10,8.0,213,9,999999999,160,0.1690,0,88,0.140,3.0,1.0 +1991,4,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101500,0,0,335,0,0,0,0,0,0,0,80,4.6,10,10,12.8,213,9,999999999,160,0.1690,0,88,0.140,1.0,1.0 +1991,4,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,101600,0,0,332,0,0,0,0,0,0,0,110,5.2,10,10,16.0,945,9,999999999,160,0.1690,0,88,0.140,2.0,1.0 +1991,4,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,101500,0,0,330,0,0,0,0,0,0,0,80,5.7,10,10,16.0,244,9,999999999,150,0.1690,0,88,0.140,1.0,1.0 +1991,4,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,101600,0,0,329,0,0,0,0,0,0,0,70,4.6,10,10,16.0,274,9,999999999,150,0.1690,0,88,0.140,0.0,1.0 +1991,4,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,101600,0,0,329,0,0,0,0,0,0,0,60,5.2,10,10,16.0,274,9,999999999,150,0.1690,0,88,0.140,0.0,1.0 +1991,4,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,101600,0,0,328,0,0,0,0,0,0,0,80,5.7,10,10,16.0,274,9,999999999,150,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,101600,0,0,325,0,0,0,0,0,0,0,70,4.6,10,10,16.0,274,9,999999999,150,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,101600,0,0,324,0,0,0,0,0,0,0,60,5.7,10,10,16.0,274,9,999999999,150,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,101600,0,0,324,0,0,0,0,0,0,0,70,6.2,10,10,12.8,244,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,4.4,82,101600,0,0,323,0,0,0,0,0,0,0,60,6.2,10,10,12.8,274,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,101700,71,1028,321,9,0,9,1100,0,1100,350,70,5.7,10,10,11.2,274,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,101700,321,1355,321,42,0,42,5000,0,5000,1720,70,6.7,10,10,11.2,366,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,101800,573,1355,321,91,0,91,10800,0,10800,4010,50,6.7,10,10,11.2,366,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,101900,797,1355,321,138,0,138,16500,0,16500,6500,60,6.2,10,10,12.8,366,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.0,82,101900,979,1355,326,210,0,210,25000,0,25000,9980,50,7.2,10,10,14.4,457,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,4.4,76,102000,1105,1355,328,241,0,241,28900,0,28900,11620,20,6.2,10,10,14.4,518,9,999999999,139,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,4.4,71,102000,1167,1355,333,256,0,256,30900,0,30900,12330,60,5.7,10,10,16.0,732,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,4.4,71,102000,1161,1355,333,255,0,255,30700,0,30700,12280,50,6.7,10,10,16.0,762,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.0,74,101900,1087,1355,334,237,0,237,28400,0,28400,11410,50,5.7,10,10,16.0,762,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,101900,951,1355,336,203,0,203,24100,0,24100,9600,40,6.7,10,10,16.0,853,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,101900,761,1355,336,156,0,156,18400,0,18400,7030,50,5.7,10,10,16.0,884,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,102000,531,1355,333,99,0,99,11500,0,11500,4170,60,5.7,10,10,17.6,945,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,102000,276,1355,333,42,0,42,4900,0,4900,1640,50,4.6,10,10,17.6,1067,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,102000,42,802,332,6,0,6,700,0,700,240,60,3.6,10,10,20.8,1189,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,102100,0,0,332,0,0,0,0,0,0,0,70,3.6,10,10,20.8,1006,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,4.4,82,102200,0,0,323,0,0,0,0,0,0,0,140,3.6,10,10,20.8,914,9,999999999,129,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,102200,0,0,324,0,0,0,0,0,0,0,140,4.1,10,10,20.8,945,9,999999999,120,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.7,65,102200,0,0,323,0,0,0,0,0,0,0,70,6.7,10,10,24.0,1219,9,999999999,120,0.1700,0,88,0.140,0.0,1.0 +1991,4,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,102200,0,0,288,0,0,0,0,0,0,0,70,4.6,4,4,24.0,77777,9,999999999,120,0.1700,0,88,0.140,0.0,1.0 +1991,4,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,102200,0,0,281,0,0,0,0,0,0,0,70,3.6,3,3,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,102200,0,0,265,0,0,0,0,0,0,0,40,2.6,0,0,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,102200,0,0,265,0,0,0,0,0,0,0,40,4.6,0,0,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,102200,0,0,268,0,0,0,0,0,0,0,50,3.6,7,2,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,102200,0,0,270,0,0,0,0,0,0,0,40,3.1,5,3,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,102300,75,1072,277,21,5,21,2400,0,2400,720,40,3.1,9,5,24.0,6096,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,102300,327,1355,284,119,117,91,13000,9900,10600,1990,60,4.6,10,6,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,102300,578,1355,285,276,225,180,29300,22600,19700,3900,80,5.7,9,5,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,102300,802,1355,289,478,433,222,50400,44200,24100,5240,90,5.2,9,5,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,102400,983,1355,296,599,379,324,64800,40900,35100,9790,120,5.7,10,4,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,102300,1109,1355,298,789,636,268,82300,63900,29900,9890,150,6.7,9,4,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,102300,1171,1355,299,723,470,316,77600,49100,35100,14490,140,5.7,10,4,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,102300,1164,1355,299,838,600,321,89700,62700,35700,14450,140,5.2,10,3,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.6,50,102200,1090,1355,299,759,640,244,79600,64600,27500,8690,130,5.2,10,2,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,0.0,46,102100,954,1355,306,509,416,215,55000,43200,24500,6020,120,5.2,10,4,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,102100,764,1355,302,488,246,349,52100,25300,37800,9150,150,4.6,10,5,24.0,77777,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,102100,534,1355,310,205,107,163,22300,10500,18200,3810,170,5.2,10,8,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-0.6,55,102100,280,1355,311,60,17,57,6600,1400,6400,1510,180,4.1,10,9,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,102100,45,824,309,9,0,9,1100,0,1100,340,160,3.6,10,9,24.0,6706,9,999999999,120,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.0,60,102100,0,0,290,0,0,0,0,0,0,0,150,3.1,7,4,24.0,77777,9,999999999,129,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,102100,0,0,279,0,0,0,0,0,0,0,130,3.1,5,1,24.0,77777,9,999999999,129,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,102100,0,0,316,0,0,0,0,0,0,0,130,4.6,10,10,24.0,3962,9,999999999,129,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,102100,0,0,283,0,0,0,0,0,0,0,140,3.6,3,3,24.0,77777,9,999999999,129,0.1710,0,88,0.140,0.0,1.0 +1991,4,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,102100,0,0,285,0,0,0,0,0,0,0,140,3.6,10,4,24.0,77777,9,999999999,129,0.1710,0,88,0.140,0.0,1.0 +1991,4,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,102100,0,0,312,0,0,0,0,0,0,0,130,3.1,10,10,24.0,732,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,102000,0,0,315,0,0,0,0,0,0,0,120,2.6,10,10,20.8,610,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,102000,0,0,312,0,0,0,0,0,0,0,110,3.6,10,10,20.8,732,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101900,0,0,312,0,0,0,0,0,0,0,90,4.1,10,10,20.8,457,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,101900,0,0,317,0,0,0,0,0,0,0,90,4.6,10,10,20.8,549,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.2,73,101900,80,1094,318,13,0,13,1500,0,1500,490,100,5.2,10,10,19.2,640,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,101900,332,1354,319,49,0,49,5700,0,5700,1980,100,5.7,10,10,20.8,732,9,999999999,129,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,101900,583,1354,321,106,0,106,12400,0,12400,4580,100,6.2,10,10,20.8,579,9,999999999,139,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.9,80,101900,807,1354,322,162,0,162,19200,0,19200,7450,100,4.6,10,10,20.8,457,9,999999999,150,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,3.9,76,101800,987,1354,325,208,0,208,24800,0,24800,9950,90,6.2,10,10,20.8,457,9,999999999,160,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.9,74,101800,1113,1354,328,239,0,239,28800,0,28800,11560,90,5.2,10,10,20.8,488,9,999999999,170,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,101800,1174,1354,331,255,0,255,30800,0,30800,12310,130,4.6,10,10,20.8,640,9,999999999,179,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.1,83,101700,1168,1354,333,253,0,253,30500,0,30500,12220,120,4.6,10,10,20.8,732,9,999999999,189,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.1,83,101600,1094,1354,333,235,0,235,28200,0,28200,11360,100,4.1,10,10,20.8,640,9,999999999,200,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,101500,957,1354,329,200,0,200,23800,0,23800,9520,110,4.6,10,10,24.0,640,9,999999999,209,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101500,768,1354,332,152,0,152,18000,0,18000,6920,110,4.6,10,10,24.0,884,9,999999999,220,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,101500,538,1354,329,95,0,95,11100,0,11100,4050,100,5.7,10,10,24.0,914,9,999999999,229,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,101400,284,1354,330,40,0,40,4700,0,4700,1590,80,6.7,10,10,20.8,457,9,999999999,240,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.6,80,101400,47,846,332,7,0,7,900,0,900,270,70,4.6,10,10,20.8,427,9,999999999,250,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101300,0,0,332,0,0,0,0,0,0,0,70,5.7,10,10,20.8,610,9,999999999,259,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.0,74,101200,0,0,334,0,0,0,0,0,0,0,70,7.7,10,10,20.8,762,9,999999999,270,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,4.4,71,101200,0,0,333,0,0,0,0,0,0,0,60,5.7,10,10,20.8,762,9,999999999,279,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,101100,0,0,329,0,0,0,0,0,0,0,70,6.7,10,10,16.0,610,9,999999999,290,0.1720,0,88,0.140,0.0,1.0 +1991,4,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,101000,0,0,324,0,0,0,0,0,0,0,60,7.7,10,10,11.2,579,9,999999999,300,0.1720,0,88,0.140,1.0,1.0 +1991,4,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,100800,0,0,321,0,0,0,0,0,0,0,40,7.2,10,10,9.6,579,9,999999999,309,0.1740,0,88,0.140,2.0,1.0 +1991,4,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,100600,0,0,318,0,0,0,0,0,0,0,40,8.8,10,10,6.4,579,9,999999999,320,0.1740,0,88,0.140,3.0,1.0 +1991,4,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100500,0,0,316,0,0,0,0,0,0,0,30,9.8,10,10,8.0,579,9,999999999,329,0.1740,0,88,0.140,2.0,1.0 +1991,4,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100400,0,0,316,0,0,0,0,0,0,0,30,9.8,10,10,8.0,396,9,999999999,340,0.1740,0,88,0.140,1.0,1.0 +1991,4,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100200,0,0,316,0,0,0,0,0,0,0,20,9.8,10,10,8.0,396,9,999999999,350,0.1740,0,88,0.140,3.0,1.0 +1991,4,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100000,85,1139,316,13,0,13,1500,0,1500,490,30,10.8,10,10,6.4,396,9,999999999,359,0.1740,0,88,0.140,3.0,1.0 +1991,4,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,99900,338,1353,319,47,0,47,5500,0,5500,1920,40,10.3,10,10,6.4,396,9,999999999,370,0.1740,0,88,0.140,3.0,1.0 +1991,4,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,99700,588,1353,319,84,0,84,10000,0,10000,3790,40,10.3,10,10,6.4,396,9,999999999,359,0.1740,0,88,0.140,3.0,1.0 +1991,4,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,99600,811,1353,319,131,0,131,15800,0,15800,6270,30,10.3,10,10,4.0,396,9,999999999,350,0.1740,0,88,0.140,4.0,1.0 +1991,4,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,99400,991,1353,319,204,0,204,24400,0,24400,9810,30,10.3,10,10,6.4,427,9,999999999,340,0.1740,0,88,0.140,4.0,1.0 +1991,4,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,99200,1116,1353,322,198,0,198,24200,0,24200,9910,30,10.3,10,10,8.0,396,9,999999999,340,0.1740,0,88,0.140,2.0,1.0 +1991,4,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,99000,1177,1353,322,252,0,252,30500,0,30500,12200,20,9.8,10,10,4.8,427,9,999999999,329,0.1740,0,88,0.140,4.0,1.0 +1991,4,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,98900,1171,1353,323,209,0,209,25600,0,25600,10450,350,6.2,10,10,4.8,366,9,999999999,320,0.1740,0,88,0.140,1.0,1.0 +1991,4,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,98900,1097,1353,326,193,0,193,23500,0,23500,9670,340,6.7,10,10,3.2,396,9,999999999,309,0.1740,0,88,0.140,4.0,1.0 +1991,4,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,98900,960,1353,326,164,0,164,19900,0,19900,8090,330,7.2,10,10,4.0,274,9,999999999,300,0.1740,0,88,0.140,2.0,1.0 +1991,4,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,98800,771,1353,328,122,0,122,14700,0,14700,5780,310,5.7,10,10,4.0,274,9,999999999,290,0.1740,0,88,0.140,1.0,1.0 +1991,4,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,98900,541,1353,329,75,0,75,9000,0,9000,3330,300,6.7,10,10,6.4,305,9,999999999,290,0.1740,0,88,0.140,1.0,1.0 +1991,4,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,99000,288,1353,328,50,0,50,5800,0,5800,1920,290,6.2,10,10,11.2,579,9,999999999,279,0.1740,0,88,0.140,1.0,1.0 +1991,4,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,99000,50,868,328,8,0,8,1000,0,1000,310,260,6.7,10,10,11.2,732,9,999999999,270,0.1740,0,88,0.140,0.0,1.0 +1991,4,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,99100,0,0,323,0,0,0,0,0,0,0,260,8.2,10,10,16.0,488,9,999999999,259,0.1740,0,88,0.140,0.0,1.0 +1991,4,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,99100,0,0,322,0,0,0,0,0,0,0,260,6.7,10,10,20.8,762,9,999999999,250,0.1740,0,88,0.140,0.0,1.0 +1991,4,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,99100,0,0,322,0,0,0,0,0,0,0,250,6.7,10,10,19.2,335,9,999999999,250,0.1740,0,88,0.140,0.0,1.0 +1991,4,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,99200,0,0,322,0,0,0,0,0,0,0,260,8.2,10,10,24.0,396,9,999999999,240,0.1740,0,88,0.140,0.0,1.0 +1991,4,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,99200,0,0,319,0,0,0,0,0,0,0,230,7.7,10,10,24.0,396,9,999999999,229,0.1740,0,88,0.140,0.0,1.0 +1991,4,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,99100,0,0,321,0,0,0,0,0,0,0,240,6.7,10,10,24.0,396,9,999999999,220,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,99100,0,0,321,0,0,0,0,0,0,0,230,6.2,10,10,24.0,366,9,999999999,209,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,99200,0,0,321,0,0,0,0,0,0,0,240,5.7,10,10,24.0,732,9,999999999,200,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,99200,0,0,315,0,0,0,0,0,0,0,230,7.2,10,10,24.0,823,9,999999999,200,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,99300,0,0,315,0,0,0,0,0,0,0,240,7.7,10,10,19.2,488,9,999999999,189,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,99400,90,1161,312,14,0,14,1600,0,1600,530,240,7.7,10,10,19.2,396,9,999999999,179,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,99400,344,1352,312,56,0,56,6500,0,6500,2230,260,7.2,10,10,19.2,396,9,999999999,170,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,99500,593,1352,316,93,0,93,11000,0,11000,4140,260,7.2,10,10,16.0,396,9,999999999,170,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,99600,816,1352,318,158,0,158,18800,0,18800,7340,270,7.7,10,10,17.6,457,9,999999999,170,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,99600,995,1352,317,206,0,206,24700,0,24700,9910,280,7.7,10,10,17.6,488,9,999999999,170,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,4.4,82,99700,1120,1352,323,239,0,239,28800,0,28800,11580,270,8.8,10,10,16.0,488,9,999999999,160,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,99700,1181,1352,331,255,0,255,30800,0,30800,12320,260,11.8,10,10,16.0,610,9,999999999,160,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.9,63,99700,1174,1352,317,758,464,355,80500,48400,38400,16640,270,9.3,7,7,19.2,1372,9,999999999,160,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,99800,1100,1352,331,418,26,397,48300,2600,46200,16580,270,9.3,9,9,20.8,1433,9,999999999,160,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,99800,963,1352,328,258,64,212,28500,6500,23900,8100,250,8.8,9,9,20.8,1372,9,999999999,160,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,99900,774,1352,340,148,0,148,17500,0,17500,6800,260,7.7,10,10,20.8,1463,9,999999999,150,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,100000,545,1352,328,230,25,220,25300,2200,24400,7170,260,9.8,10,9,19.2,1433,9,999999999,150,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,100100,292,1352,338,58,0,58,6600,0,6600,2170,270,6.7,10,10,19.2,1494,9,999999999,150,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,100100,53,890,338,8,0,8,1000,0,1000,310,270,6.7,10,10,19.2,1676,9,999999999,150,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.9,66,100200,0,0,336,0,0,0,0,0,0,0,250,6.2,10,10,20.8,1676,9,999999999,150,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,100300,0,0,335,0,0,0,0,0,0,0,240,4.1,10,10,20.8,1829,9,999999999,139,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,100300,0,0,332,0,0,0,0,0,0,0,240,4.6,10,10,20.8,1829,9,999999999,139,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,100400,0,0,329,0,0,0,0,0,0,0,230,4.6,10,10,20.8,3353,9,999999999,139,0.1750,0,88,0.140,0.0,1.0 +1991,4,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.8,63,100400,0,0,331,0,0,0,0,0,0,0,240,4.6,10,10,19.2,2896,9,999999999,139,0.1750,0,88,0.140,0.0,1.0 +1991,4,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,100500,0,0,298,0,0,0,0,0,0,0,250,5.2,3,3,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,100500,0,0,286,0,0,0,0,0,0,0,260,5.2,0,0,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,100500,0,0,283,0,0,0,0,0,0,0,250,4.6,0,0,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.8,71,100600,0,0,281,0,0,0,0,0,0,0,250,4.6,0,0,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,100600,0,0,285,0,0,0,0,0,0,0,270,5.7,0,0,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,100700,95,1205,283,33,164,20,3400,8500,2700,360,250,4.1,0,0,20.8,77777,9,999999999,120,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,100800,349,1352,288,194,549,52,20300,46600,8200,990,250,5.7,0,0,20.8,77777,9,999999999,120,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,100900,598,1352,293,400,731,76,41800,70600,10500,1590,240,4.1,0,0,19.2,77777,9,999999999,120,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,100900,820,1352,298,596,823,97,63400,82400,13300,2340,240,4.6,0,0,19.2,77777,9,999999999,120,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,100900,999,1352,308,753,854,121,80300,86300,16300,3580,240,5.2,2,0,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.6,51,100900,1123,1352,330,777,742,160,81800,74700,19500,5880,240,5.7,5,3,19.2,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.1,55,100900,1184,1352,320,864,821,144,92600,83300,19500,6550,180,6.2,4,1,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,100900,1177,1352,318,859,835,131,88300,83600,15300,4730,190,7.2,3,1,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.1,57,100900,1102,1352,312,845,886,123,87200,88600,14800,3640,190,7.7,1,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,100900,966,1352,315,674,782,115,71900,79000,15300,3250,190,8.8,3,1,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,100800,777,1352,312,529,729,110,56600,73600,14200,2600,180,8.2,2,1,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.0,57,100800,548,1352,306,356,701,71,37000,66700,9900,1450,190,9.3,0,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.6,64,100900,296,1352,302,154,489,47,16000,39100,7500,880,200,8.2,0,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.0,63,100900,55,912,299,17,92,11,1800,4400,1500,210,210,7.2,0,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.1,66,101000,0,0,302,0,0,0,0,0,0,0,190,6.2,0,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.1,71,101000,0,0,298,0,0,0,0,0,0,0,200,5.7,0,0,20.8,77777,9,999999999,129,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,101000,0,0,295,0,0,0,0,0,0,0,200,5.2,0,0,20.8,77777,9,999999999,139,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.6,80,101100,0,0,288,0,0,0,0,0,0,0,240,2.1,0,0,20.8,77777,9,999999999,139,0.1760,0,88,0.140,0.0,1.0 +1991,4,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.1,83,101000,0,0,288,0,0,0,0,0,0,0,200,3.1,0,0,19.2,77777,9,999999999,139,0.1760,0,88,0.140,0.0,1.0 +1991,4,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,101000,0,0,287,0,0,0,0,0,0,0,210,2.6,0,0,19.2,77777,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,101000,0,0,287,0,0,0,0,0,0,0,180,2.1,0,0,19.2,77777,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,101000,0,0,285,0,0,0,0,0,0,0,160,2.6,0,0,19.2,77777,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,101000,0,0,315,0,0,0,0,0,0,0,180,2.6,8,8,17.6,2896,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,101000,0,0,308,0,0,0,0,0,0,0,100,1.5,7,7,17.6,3353,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,101000,100,1227,324,21,16,19,2200,1000,2200,480,130,2.1,9,9,16.0,3353,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,6.7,83,101000,354,1351,336,70,0,70,8000,0,8000,2700,130,1.5,10,10,16.0,3353,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,101000,603,1351,342,143,0,143,16500,0,16500,5880,120,2.6,10,10,16.0,3353,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.8,72,101000,825,1351,328,450,412,198,48100,42300,22200,4730,140,3.1,7,6,16.0,3353,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,100900,1003,1351,340,471,90,404,51800,9300,44900,14400,170,4.1,8,8,16.0,1219,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,100900,1127,1351,352,245,0,245,29500,0,29500,11830,150,4.6,10,10,16.0,1219,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,100900,1187,1351,352,259,0,259,31300,0,31300,12490,160,2.1,10,10,14.4,1219,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.9,86,100900,1180,1351,347,258,0,258,31200,0,31200,12440,70,3.1,10,10,12.8,1219,9,999999999,139,0.1770,0,88,0.140,1.0,1.0 +1991,4,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,9.4,86,100800,1105,1351,350,239,0,239,28700,0,28700,11550,80,4.1,10,10,14.4,1219,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,100800,969,1351,359,206,0,206,24600,0,24600,9800,120,2.1,10,10,12.8,1250,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,100800,780,1351,353,159,0,159,18800,0,18800,7230,140,4.1,10,10,12.8,1250,9,999999999,139,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,100800,552,1351,353,102,0,102,11900,0,11900,4340,110,3.6,10,10,12.8,1128,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,100900,300,1351,344,45,0,45,5300,0,5300,1780,210,4.1,10,10,9.6,1128,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101000,58,934,338,9,0,9,1100,0,1100,350,200,4.1,10,10,6.4,1219,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101000,0,0,338,0,0,0,0,0,0,0,200,2.6,10,10,6.4,1402,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101000,0,0,338,0,0,0,0,0,0,0,50,2.6,10,10,8.0,274,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101000,0,0,338,0,0,0,0,0,0,0,50,3.1,10,10,8.0,1981,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101000,0,0,341,0,0,0,0,0,0,0,10,5.2,10,10,8.0,2743,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,101100,0,0,338,0,0,0,0,0,0,0,140,1.5,10,10,8.0,1981,9,999999999,129,0.1770,0,88,0.140,0.0,1.0 +1991,4,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101100,0,0,341,0,0,0,0,0,0,0,350,3.1,10,10,9.6,1829,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101200,0,0,302,0,0,0,0,0,0,0,290,2.6,2,2,9.6,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,101200,0,0,293,0,0,0,0,0,0,0,290,3.6,0,0,9.6,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101300,0,0,295,0,0,0,0,0,0,0,320,3.1,0,0,12.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.8,90,101400,0,0,292,0,0,0,0,0,0,0,310,3.6,0,0,11.2,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.8,83,101500,105,1249,297,31,69,25,3300,3000,3100,440,340,4.6,0,0,11.2,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,101600,360,1350,304,181,398,74,19100,33800,10100,1340,10,6.2,0,0,12.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,101700,608,1350,313,383,600,113,39900,58000,13700,2280,350,7.2,0,0,14.4,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.2,57,101700,829,1350,324,532,635,142,56300,64000,16900,3450,10,8.8,1,1,14.4,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,7.2,52,101700,1007,1350,325,745,775,166,79500,79200,20300,5190,350,7.2,0,0,16.0,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.1,45,101700,1130,1350,329,859,810,180,89300,81100,21200,6550,350,8.8,0,0,17.6,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.1,42,101700,1190,1350,334,914,825,187,95400,82700,22300,8270,350,7.7,0,0,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,6.1,39,101700,1182,1350,339,907,823,186,94600,82500,22200,8010,20,5.7,0,0,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,4.4,33,101700,1108,1350,351,806,752,189,86300,77000,23000,7290,360,2.6,2,2,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,5.6,43,101700,972,1350,348,492,355,236,52900,36900,26300,6870,200,5.7,5,5,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.1,45,101700,783,1350,346,489,552,169,52800,56500,20000,3840,190,4.6,4,4,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.7,45,101700,555,1350,347,313,454,126,33200,43900,15100,2460,200,5.7,3,3,20.8,77777,9,999999999,120,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.2,53,101700,304,1350,323,141,334,65,14800,26400,8800,1170,160,3.1,0,0,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,101800,61,979,318,15,18,14,1700,800,1700,290,180,3.6,3,1,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.7,62,101900,0,0,310,0,0,0,0,0,0,0,200,4.1,0,0,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,7.2,67,101900,0,0,308,0,0,0,0,0,0,0,210,3.1,0,0,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.7,69,101900,0,0,309,0,0,0,0,0,0,0,0,0.0,2,1,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.9,86,102000,0,0,306,0,0,0,0,0,0,0,80,3.1,3,1,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.2,77,102000,0,0,299,0,0,0,0,0,0,0,60,3.1,5,0,20.8,77777,9,999999999,129,0.1780,0,88,0.140,0.0,1.0 +1991,4,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,102000,0,0,300,0,0,0,0,0,0,0,80,2.6,7,1,20.8,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,102000,0,0,300,0,0,0,0,0,0,0,40,2.6,8,1,20.8,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.2,86,102000,0,0,301,0,0,0,0,0,0,0,50,2.1,10,2,19.2,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,102100,0,0,307,0,0,0,0,0,0,0,40,3.1,10,3,19.2,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,102100,0,0,292,0,0,0,0,0,0,0,50,2.6,4,1,17.6,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,102200,110,1293,309,32,3,32,3600,0,3600,1020,50,2.6,8,3,17.6,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,102200,365,1349,312,157,151,116,17000,13300,13400,2560,80,2.1,9,2,11.2,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,102200,613,1349,330,317,267,195,33600,27100,21300,4310,170,1.5,6,3,11.2,77777,9,999999999,129,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.8,52,102200,833,1349,335,527,451,248,55100,46200,26500,6110,170,2.1,7,1,11.2,77777,9,999999999,139,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.0,67,102300,1011,1349,337,659,440,328,68800,45600,34600,10470,220,3.6,9,3,11.2,77777,9,999999999,139,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.2,47,102200,1133,1349,344,795,401,458,85500,43400,48900,18720,160,4.6,10,2,12.8,77777,9,999999999,150,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.7,45,102200,1193,1349,347,796,460,389,84000,47900,41500,19690,170,5.7,9,3,16.0,77777,9,999999999,150,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,102100,1185,1349,348,685,355,373,75300,38600,41300,16870,170,4.6,10,4,16.0,77777,9,999999999,160,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.9,54,102000,1111,1349,352,711,366,409,76800,39600,44100,15690,170,5.2,10,5,17.6,77777,9,999999999,160,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,9.4,60,102000,975,1349,338,634,433,321,68600,46700,34800,9640,190,6.7,9,2,17.6,77777,9,999999999,160,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.7,47,101900,786,1349,336,483,452,219,50700,46100,23800,5110,190,5.7,3,1,17.6,77777,9,999999999,170,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.3,58,101900,559,1349,324,299,353,152,32000,35200,17400,3170,190,7.7,1,0,17.6,77777,9,999999999,170,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,101900,307,1349,328,114,141,82,12500,11700,9800,1780,190,7.2,3,3,17.6,77777,9,999999999,179,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,101900,64,1001,338,14,0,14,1600,0,1600,510,190,8.8,7,7,19.2,4267,9,999999999,179,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.2,62,101900,0,0,344,0,0,0,0,0,0,0,190,9.3,8,8,19.2,4267,9,999999999,179,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.3,69,101900,0,0,337,0,0,0,0,0,0,0,200,6.7,10,7,19.2,4267,9,999999999,189,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101900,0,0,308,0,0,0,0,0,0,0,210,4.1,3,0,17.6,77777,9,999999999,189,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101900,0,0,308,0,0,0,0,0,0,0,200,3.6,2,0,16.0,77777,9,999999999,200,0.1790,0,88,0.140,0.0,1.0 +1991,4,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101800,0,0,329,0,0,0,0,0,0,0,220,3.1,6,6,16.0,4267,9,999999999,200,0.1790,0,88,0.140,0.0,1.0 +1991,4,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,101800,0,0,340,0,0,0,0,0,0,0,240,3.1,8,8,16.0,4267,9,999999999,209,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101700,0,0,359,0,0,0,0,0,0,0,240,3.6,10,10,14.4,4267,9,999999999,209,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101600,0,0,359,0,0,0,0,0,0,0,220,3.1,10,10,14.4,2591,9,999999999,209,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.0,83,101600,0,0,356,0,0,0,0,0,0,0,190,2.1,10,10,16.0,2743,9,999999999,220,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.9,83,101600,0,0,324,0,0,0,0,0,0,0,180,2.6,6,6,16.0,2743,9,999999999,220,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,9.4,86,101600,115,1315,328,26,36,23,2900,1900,2800,480,190,3.1,7,7,12.8,4267,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101600,370,1349,356,60,0,60,7000,0,7000,2420,200,3.6,10,10,12.8,2743,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,101600,617,1349,358,118,0,118,13800,0,13800,5130,230,4.1,10,10,12.8,2591,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,101600,837,1349,353,293,266,128,32800,27500,15700,3000,230,4.1,8,8,11.2,2743,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.6,70,101600,1014,1349,350,474,214,313,52300,22800,35200,10260,220,4.6,7,7,11.2,2743,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101500,1137,1349,367,472,181,319,52600,19400,36200,12670,220,4.6,9,9,11.2,2743,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.7,70,101500,1196,1349,370,575,114,473,63300,11800,52800,21490,230,3.6,9,9,11.2,2896,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.2,70,101400,1188,1349,374,517,275,274,58100,30000,31600,12160,220,4.1,9,9,11.2,2896,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,101400,1113,1349,357,413,164,277,46300,17600,31700,10530,200,5.2,7,7,11.2,2896,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,101300,977,1349,359,693,753,147,72100,75300,17400,3930,180,4.6,4,4,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.8,78,101300,789,1349,340,536,639,161,55800,63600,18500,3660,190,5.7,2,2,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.8,78,101200,562,1349,343,335,446,149,35000,43100,17000,2970,180,5.2,3,3,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,101200,311,1349,327,150,371,65,15900,29700,9100,1170,190,4.1,7,1,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101200,67,1023,322,21,56,17,2300,2100,2100,290,190,2.6,8,1,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.2,87,101200,0,0,318,0,0,0,0,0,0,0,140,2.6,7,0,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.2,87,101300,0,0,324,0,0,0,0,0,0,0,140,1.5,8,1,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,101300,0,0,324,0,0,0,0,0,0,0,190,2.6,4,1,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101300,0,0,320,0,0,0,0,0,0,0,0,0.0,8,0,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,101300,0,0,327,0,0,0,0,0,0,0,0,0.0,9,1,11.2,77777,9,999999999,229,0.1800,0,88,0.140,0.0,1.0 +1991,4,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101300,0,0,327,0,0,0,0,0,0,0,10,2.1,5,1,11.2,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.2,87,101400,0,0,324,0,0,0,0,0,0,0,30,3.6,8,1,9.6,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,101400,0,0,336,0,0,0,0,0,0,0,40,5.2,4,1,11.2,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.6,78,101500,0,0,330,0,0,0,0,0,0,0,70,5.7,6,3,12.8,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,6.7,64,101600,0,11,307,0,0,0,0,0,0,0,50,7.7,0,0,12.8,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,4.4,59,101700,120,1348,306,40,115,30,4200,5000,3800,540,60,5.7,5,1,17.6,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.3,52,101900,375,1348,302,203,500,64,21100,43200,9000,1200,60,6.7,0,0,24.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.2,44,101900,622,1348,307,405,676,93,42900,66300,12200,1960,60,6.2,0,0,32.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,1.1,36,102000,841,1348,314,591,747,125,63200,75900,15800,3130,70,4.6,2,0,32.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,1.7,35,102100,1018,1348,333,732,655,236,76200,65800,26400,7240,110,3.1,6,3,32.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.3,38,102100,1140,1348,330,808,775,152,85700,78300,19300,5990,130,6.2,2,1,32.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,4.4,44,102100,1199,1348,326,864,753,195,93300,77400,24300,9930,120,6.7,5,1,32.0,77777,9,999999999,229,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,4.4,46,102200,1191,1348,323,850,767,172,89500,77300,21100,7830,100,9.8,5,1,24.0,77777,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.9,44,102200,1116,1348,330,757,654,215,80300,66600,25100,8410,110,8.2,8,3,24.0,77777,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.6,55,102200,980,1348,321,675,638,211,70700,64300,23800,6110,110,7.7,9,2,24.0,77777,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,102200,792,1348,330,398,271,239,43000,28700,26000,5850,90,6.7,9,6,24.0,1676,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,102200,565,1348,328,220,161,153,24200,16100,17500,3620,110,7.2,10,7,24.0,1676,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.0,63,102300,315,1348,345,46,0,46,5400,0,5400,1850,120,5.7,10,10,24.0,1524,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,4.4,61,102300,70,1045,344,11,0,11,1300,0,1300,420,110,4.6,10,10,24.0,1524,9,999999999,240,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,102300,0,0,340,0,0,0,0,0,0,0,110,5.2,10,10,24.0,1676,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,4.4,65,102300,0,0,318,0,0,0,0,0,0,0,100,5.7,7,7,24.0,1829,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.6,71,102300,0,0,331,0,0,0,0,0,0,0,100,4.1,9,9,24.0,1829,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,102400,0,0,327,0,0,0,0,0,0,0,100,3.6,9,9,24.0,2286,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.9,66,102300,0,0,336,0,0,0,0,0,0,0,110,4.1,10,10,24.0,1676,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,102300,0,0,336,0,0,0,0,0,0,0,100,4.1,10,10,24.0,1524,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,102400,0,0,338,0,0,0,0,0,0,0,90,3.6,10,10,24.0,1524,9,999999999,250,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,102400,0,0,338,0,0,0,0,0,0,0,90,4.6,10,10,24.0,1494,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,102400,0,0,338,0,0,0,0,0,0,0,100,4.6,10,10,24.0,1463,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,102300,0,34,341,0,0,0,0,0,0,0,110,3.6,10,10,24.0,2134,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,102300,125,1347,338,22,0,22,2500,0,2500,790,100,4.6,10,10,19.2,2286,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,102400,380,1347,341,58,0,58,6800,0,6800,2380,100,4.1,10,10,17.6,2286,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.7,71,102300,626,1347,347,144,0,144,16600,0,16600,6030,110,4.6,10,10,16.0,4572,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.2,69,102300,845,1347,343,361,101,298,39700,10300,33300,9690,110,4.6,9,9,16.0,1280,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,7.8,69,102400,1021,1347,356,216,0,216,25900,0,25900,10400,120,4.6,10,10,17.6,1250,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.8,72,102400,1143,1347,354,246,0,246,29700,0,29700,11910,110,4.6,10,10,17.6,1189,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,102300,1201,1347,357,261,0,261,31600,0,31600,12610,120,4.6,10,10,17.6,2438,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,102300,1193,1347,354,259,0,259,31300,0,31300,12510,120,4.6,10,10,17.6,2286,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102300,1119,1347,351,240,0,240,28900,0,28900,11620,110,5.2,10,10,17.6,2286,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102200,983,1347,351,206,0,206,24600,0,24600,9870,110,4.6,10,10,17.6,2134,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,102300,795,1347,349,158,0,158,18700,0,18700,7270,130,3.1,10,10,14.4,1341,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,102200,568,1347,349,101,0,101,11900,0,11900,4370,120,3.6,10,10,12.8,1341,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.3,83,102200,319,1347,346,46,0,46,5400,0,5400,1850,140,3.1,10,10,16.0,1829,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.8,83,102200,73,1067,343,12,0,12,1400,0,1400,450,150,2.6,10,10,20.8,579,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102100,0,0,343,0,0,0,0,0,0,0,110,3.6,10,10,24.0,457,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102200,0,0,343,0,0,0,0,0,0,0,100,3.1,10,10,24.0,488,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.3,83,102100,0,0,346,0,0,0,0,0,0,0,120,3.1,10,10,24.0,457,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102100,0,0,343,0,0,0,0,0,0,0,130,2.1,10,10,24.0,457,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,102000,0,0,344,0,0,0,0,0,0,0,130,2.1,10,10,17.6,457,9,999999999,259,0.1810,0,88,0.140,0.0,1.0 +1991,4,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,102000,0,0,345,0,0,0,0,0,0,0,100,2.6,10,10,17.6,396,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,101900,0,0,345,0,0,0,0,0,0,0,110,2.6,10,10,12.8,152,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101900,0,0,345,0,0,0,0,0,0,0,80,2.6,10,10,3.2,61,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101900,0,0,346,0,0,0,0,0,0,0,80,2.6,10,10,3.2,91,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101800,0,56,346,0,0,0,0,0,0,0,110,2.6,10,10,0.4,61,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101700,130,1347,346,17,0,17,2000,0,2000,640,110,3.6,10,10,0.4,91,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101700,384,1347,346,41,0,41,4900,0,4900,1770,110,3.1,10,10,0.8,61,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101700,630,1347,349,79,0,79,9600,0,9600,3690,80,2.6,10,10,8.0,91,9,999999999,259,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101700,848,1347,352,118,0,118,14400,0,14400,5840,210,2.6,10,10,2.4,91,9,999999999,259,0.1820,0,88,0.140,2.0,1.0 +1991,4,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101500,1024,1347,359,149,0,149,18400,0,18400,7620,110,2.1,10,10,9.6,122,9,999999999,250,0.1820,0,88,0.140,1.0,1.0 +1991,4,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101500,1146,1347,362,171,0,171,21200,0,21200,8780,130,2.1,10,10,8.0,91,9,999999999,250,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.3,96,101400,1204,1347,366,182,0,182,22600,0,22600,9330,100,2.1,10,10,1.2,61,9,999999999,250,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101300,1196,1347,366,180,0,180,22400,0,22400,9240,190,2.1,10,10,0.4,30,9,999999999,240,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101200,1121,1347,370,167,0,167,20700,0,20700,8580,10,2.1,10,10,0.8,61,9,999999999,240,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101200,985,1347,375,142,0,142,17500,0,17500,7230,340,4.1,10,10,3.2,152,9,999999999,229,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101300,798,1347,374,130,0,130,15600,0,15600,6200,340,4.1,10,10,8.0,244,9,999999999,229,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101200,572,1347,341,282,281,162,30100,28200,18100,3430,20,3.1,7,4,8.0,77777,9,999999999,220,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101100,322,1347,346,99,110,73,11000,9300,8700,1590,50,2.6,8,6,8.0,7620,9,999999999,220,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101100,76,1088,340,20,6,20,2200,300,2200,490,60,2.1,7,5,4.8,7620,9,999999999,220,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.8,93,101200,0,0,322,0,0,0,0,0,0,0,70,3.1,4,1,6.4,77777,9,999999999,209,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101200,0,0,320,0,0,0,0,0,0,0,100,1.5,4,1,6.4,77777,9,999999999,209,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.4,11.3,97,101200,0,0,356,0,0,0,0,0,0,0,190,1.7,10,10,0.8,61,9,999999999,200,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.4,9.8,100,101200,0,0,349,0,0,0,0,0,0,0,0,1.8,10,10,0.2,0,9,999999999,200,0.1820,0,88,0.140,0.0,1.0 +1991,4,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.5,8.3,100,101300,0,0,343,0,0,0,0,0,0,0,50,2.0,10,10,0.2,0,9,999999999,189,0.1820,0,88,0.140,0.0,1.0 +1999,5,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.5,6.7,70,102500,0,0,291,0,0,0,0,0,0,0,10,2.1,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.6,5.2,65,102500,0,0,286,0,0,0,0,0,0,0,20,2.3,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.6,3.7,70,102400,0,0,281,0,0,0,0,0,0,0,10,2.4,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.2,73,102400,0,0,276,0,0,0,0,0,0,0,10,2.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,102500,0,101,273,0,0,0,0,0,0,0,40,3.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,102500,136,1346,278,51,0,51,5500,0,5500,1400,30,3.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,102500,389,1346,287,226,378,116,23100,32900,13600,2220,30,5.2,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-1.1,39,102500,635,1346,295,410,551,150,43500,54700,17700,3070,40,4.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-3.3,29,102500,852,1346,299,577,628,179,60200,62800,20300,4350,50,5.2,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,-3.9,25,102500,1028,1346,316,717,641,226,75000,64700,25500,7150,30,3.6,2,2,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,-3.3,24,102500,1149,1346,327,837,711,229,88700,72300,26800,9820,90,3.1,3,3,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,-2.2,27,102500,1207,1346,323,865,589,336,92900,61600,37500,17940,140,6.2,2,2,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-2.2,28,102400,1198,1346,323,637,228,433,69900,24300,48200,19930,110,6.2,3,3,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-2.8,26,102400,1124,1346,319,590,197,425,64500,20900,47000,16550,150,5.7,2,2,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,-2.2,29,102300,988,1346,321,509,173,382,55400,18300,41900,12170,140,6.2,3,3,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-2.2,30,102300,801,1346,315,400,177,294,43300,18500,32300,7910,110,7.2,2,2,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-1.1,34,102300,575,1346,317,274,145,212,29500,14400,23400,5050,110,6.2,3,3,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-1.7,36,102300,326,1346,297,134,99,110,14400,8300,12400,2400,130,5.2,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.0,48,102300,79,1110,289,15,20,14,1800,1000,1700,290,110,3.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,102300,0,0,284,0,0,0,0,0,0,0,80,2.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,102300,0,0,284,0,0,0,0,0,0,0,70,2.1,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-0.6,47,102300,0,0,286,0,0,0,0,0,0,0,30,2.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,102300,0,0,284,0,0,0,0,0,0,0,30,3.6,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,102300,0,0,282,0,0,0,0,0,0,0,30,4.1,0,0,16.0,77777,9,999999999,100,0.1830,0,88,0.150,0.0,1.0 +1999,5,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,102200,0,0,282,0,0,0,0,0,0,0,30,4.1,0,0,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,102200,0,0,279,0,0,0,0,0,0,0,30,4.1,0,0,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,102100,0,0,279,0,0,0,0,0,0,0,20,4.1,0,0,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,102100,0,0,279,0,0,0,0,0,0,0,20,4.6,0,0,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.7,63,102100,1,123,291,0,0,0,0,0,0,0,30,5.2,2,2,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.1,58,102200,140,1345,300,64,53,59,7000,3600,6600,1220,40,5.2,5,5,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.0,44,102200,394,1345,303,233,364,126,24400,32500,14900,2580,30,6.2,2,2,16.0,77777,9,999999999,100,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,0.6,39,102200,639,1345,324,416,539,160,43900,53500,18500,3300,50,6.7,5,5,16.0,77777,9,999999999,110,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,0.6,35,102300,856,1345,332,583,628,183,60700,62800,20700,4450,60,7.7,5,5,16.0,77777,9,999999999,120,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,0.0,31,102300,1031,1345,336,742,714,194,78600,72600,22800,6300,40,8.2,5,5,16.0,77777,9,999999999,120,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,1.7,35,102300,1151,1345,338,825,681,241,87100,69100,27800,10390,110,8.8,5,5,16.0,77777,9,999999999,129,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,2.0,36,102200,1209,1345,337,865,643,286,90800,64800,32400,14890,110,8.7,5,5,16.1,77777,9,999999999,139,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,2.8,37,102200,1201,1345,349,839,575,324,90200,60100,36400,16920,110,8.2,7,7,16.0,6706,9,999999999,139,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,2.2,36,102200,1126,1345,359,725,478,324,77200,49900,35400,13370,100,8.2,9,9,16.0,6706,9,999999999,150,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,2.8,39,102100,991,1345,357,693,637,223,72300,64100,25000,6560,110,8.2,9,9,16.0,6706,9,999999999,160,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,0.6,31,102100,804,1345,360,528,591,174,54800,58800,19600,3980,110,9.3,9,9,16.0,6706,9,999999999,160,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,1.7,36,102000,578,1345,356,348,471,145,36600,45900,16800,2900,90,8.8,9,9,16.0,6706,9,999999999,170,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,2.8,44,102000,330,1345,349,149,194,101,15600,16100,11600,2010,80,4.1,9,9,16.0,6706,9,999999999,179,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.9,53,101900,82,1132,342,9,0,9,1100,0,1100,350,100,3.6,9,9,16.0,7620,9,999999999,179,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,3.9,57,102000,0,0,337,0,0,0,0,0,0,0,100,1.5,9,9,16.0,7620,9,999999999,189,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.0,63,102000,0,0,317,0,0,0,0,0,0,0,360,4.1,5,5,16.0,77777,9,999999999,200,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,2.8,51,101900,0,0,338,0,0,0,0,0,0,0,30,6.2,9,9,16.0,7620,9,999999999,200,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,101900,0,0,334,0,0,0,0,0,0,0,20,5.2,9,9,16.0,7620,9,999999999,209,0.1840,0,88,0.150,0.0,1.0 +1999,5,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.2,50,101800,0,0,344,0,0,0,0,0,0,0,30,6.7,10,10,16.0,1433,9,999999999,220,0.1840,0,88,0.150,0.0,1.0 +1999,5,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.0,61,101700,0,0,347,0,0,0,0,0,0,0,20,7.2,10,10,16.0,1189,9,999999999,220,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.3,51,101700,0,0,351,0,0,0,0,0,0,0,40,10.3,10,10,16.0,1250,9,999999999,229,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,7.0,76,101700,0,0,344,0,0,0,0,0,0,0,40,8.7,10,10,16.1,630,9,999999999,240,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,101600,0,0,348,0,0,0,0,0,0,0,30,10.3,10,10,16.0,640,9,999999999,240,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,101600,1,146,349,0,0,0,0,0,0,0,30,9.8,10,10,16.0,579,9,999999999,250,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,101700,145,1344,351,31,0,31,3500,0,3500,1070,40,10.3,10,10,16.0,1036,9,999999999,259,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,101700,398,1344,352,108,0,108,12100,0,12100,3900,40,9.8,10,10,16.0,640,9,999999999,259,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101700,642,1344,355,150,0,150,17300,0,17300,6310,40,10.8,10,10,16.0,610,9,999999999,270,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101700,859,1344,355,207,6,203,24300,500,24000,9190,40,9.8,10,10,16.0,549,9,999999999,270,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,101700,1034,1344,357,157,0,157,19300,0,19300,8000,40,12.4,10,10,16.0,671,9,999999999,270,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.0,83,101700,1154,1344,356,215,0,215,26200,0,26200,10690,30,11.3,10,10,16.0,671,9,999999999,270,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,9.4,74,101700,1212,1344,361,236,0,236,28800,0,28800,11640,30,9.3,10,10,16.0,610,9,999999999,270,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.3,64,101600,1203,1344,365,214,0,214,26300,0,26300,10720,20,12.9,10,10,16.0,792,9,999999999,279,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,101600,1128,1344,368,263,6,258,31600,500,31100,12340,30,9.3,10,10,16.0,853,9,999999999,279,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.8,58,101600,993,1344,370,206,0,206,24700,0,24700,9920,30,10.3,10,10,16.0,975,9,999999999,279,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.1,55,101600,807,1344,363,161,0,161,19100,0,19100,7430,20,10.8,10,10,16.0,914,9,999999999,279,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.1,59,101500,581,1344,357,174,17,167,19700,1300,19200,6450,10,8.8,10,10,16.0,1067,9,999999999,290,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.6,55,101500,333,1344,359,107,39,97,11700,3400,10800,2460,20,7.7,10,10,16.0,1250,9,999999999,290,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.8,46,101500,86,1154,356,12,0,12,1400,0,1400,460,20,7.2,10,10,16.0,2743,9,999999999,290,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.8,46,101500,0,0,356,0,0,0,0,0,0,0,30,5.7,10,10,16.0,975,9,999999999,290,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,4.4,53,101500,0,0,355,0,0,0,0,0,0,0,30,8.2,10,10,16.0,975,9,999999999,300,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,101500,0,0,354,0,0,0,0,0,0,0,20,6.7,10,10,16.0,853,9,999999999,300,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.6,62,101400,0,0,351,0,0,0,0,0,0,0,20,7.2,10,10,16.0,792,9,999999999,300,0.1850,0,88,0.150,0.0,1.0 +1999,5,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.6,62,101400,0,0,351,0,0,0,0,0,0,0,30,6.7,10,10,16.0,792,9,999999999,300,0.1850,0,88,0.150,0.0,1.0 +1999,5,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,7.2,71,101400,0,0,350,0,0,0,0,0,0,0,20,7.7,10,10,16.0,671,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.0,93,101400,0,0,341,0,0,0,0,0,0,0,360,5.1,10,10,6.4,480,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101400,0,0,342,0,0,0,0,0,0,0,360,5.7,10,10,14.4,701,9,999999999,309,0.1860,0,88,0.150,2.0,1.0 +1999,5,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101300,0,0,342,0,0,0,0,0,0,0,360,5.2,10,10,8.0,488,9,999999999,309,0.1860,0,88,0.150,3.0,1.0 +1999,5,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101300,2,168,342,0,0,0,0,0,0,0,350,3.6,10,10,16.0,305,9,999999999,320,0.1860,0,88,0.150,1.0,1.0 +1999,5,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,10.0,94,101400,150,1344,347,15,0,15,1800,0,1800,590,360,4.6,10,10,2.4,390,9,999999999,320,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101400,402,1344,346,38,0,38,4600,0,4600,1670,360,3.6,10,10,4.8,213,9,999999999,320,0.1860,0,88,0.150,3.0,1.0 +1999,5,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101400,646,1344,349,95,0,95,11400,0,11400,4370,20,3.6,10,10,9.6,213,9,999999999,320,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101400,863,1344,352,104,0,104,12900,0,12900,5250,20,2.6,10,10,6.4,213,9,999999999,320,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,101400,1037,1344,355,138,0,138,17100,0,17100,7150,360,2.6,10,10,16.0,213,9,999999999,320,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101400,1156,1344,359,197,0,197,24200,0,24200,9940,350,1.5,10,10,4.0,274,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.3,93,101400,1214,1344,368,194,0,194,24100,0,24100,9880,20,4.1,10,10,4.8,244,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,101300,1205,1344,370,208,0,208,25600,0,25600,10470,20,3.6,10,10,16.0,366,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,101400,1131,1344,376,158,0,158,19700,0,19700,8190,80,1.5,10,10,16.0,640,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.3,86,101300,996,1344,374,155,0,155,19000,0,19000,7830,40,3.6,10,10,16.0,640,9,999999999,309,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101400,809,1344,374,239,18,228,27600,1500,26600,9700,220,1.5,10,10,16.0,701,9,999999999,300,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.3,93,101300,585,1344,368,137,0,137,15800,0,15800,5620,220,3.1,10,10,9.6,762,9,999999999,300,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.3,90,101400,337,1344,371,98,17,94,11000,900,10700,3260,220,2.6,10,10,11.2,823,9,999999999,300,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,101400,89,1176,370,19,37,17,2300,1800,2100,350,60,2.1,10,10,14.4,701,9,999999999,300,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.1,77,101400,0,0,369,0,0,0,0,0,0,0,30,4.1,10,10,16.0,701,9,999999999,300,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,101400,0,0,366,0,0,0,0,0,0,0,40,2.6,10,10,16.0,640,9,999999999,290,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,101400,0,0,366,0,0,0,0,0,0,0,30,2.1,10,10,16.0,640,9,999999999,290,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101400,0,0,364,0,0,0,0,0,0,0,40,2.1,10,10,16.0,640,9,999999999,290,0.1860,0,88,0.150,0.0,1.0 +1999,5,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,101400,0,0,366,0,0,0,0,0,0,0,40,2.1,10,10,16.0,518,9,999999999,290,0.1860,0,88,0.150,0.0,1.0 +1999,5,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,101400,0,0,366,0,0,0,0,0,0,0,360,2.6,10,10,16.0,518,9,999999999,290,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101300,0,0,364,0,0,0,0,0,0,0,10,2.6,10,10,16.0,518,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101400,0,0,364,0,0,0,0,0,0,0,350,1.5,10,10,16.0,518,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101400,0,0,362,0,0,0,0,0,0,0,360,1.5,10,10,11.2,457,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101400,2,190,362,0,0,0,0,0,0,0,280,1.5,10,10,9.6,244,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101500,154,1343,362,43,0,43,4700,0,4700,1370,250,2.6,10,10,0.8,152,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101500,407,1343,363,107,0,107,12000,0,12000,3920,240,2.1,10,10,2.0,183,9,999999999,270,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.3,96,101500,650,1343,366,122,0,122,14400,0,14400,5400,250,2.6,10,10,2.0,213,9,999999999,270,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101500,866,1343,369,201,0,201,23600,0,23600,9160,230,2.6,10,10,9.6,427,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101600,1039,1343,375,220,0,220,26400,0,26400,10630,210,3.6,10,10,8.0,488,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,101500,1159,1343,384,375,42,339,41500,4300,37800,15350,170,2.1,10,10,14.4,610,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,101400,1216,1343,384,895,613,339,96100,64100,38000,18970,260,1.5,9,9,11.2,1097,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101400,1207,1343,399,393,54,344,43500,5500,38500,16900,350,2.1,10,10,16.0,945,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,101400,1133,1343,382,269,18,254,32400,1500,31100,12200,160,4.1,9,9,16.0,1036,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.9,76,101400,998,1343,379,475,184,338,52100,19500,37600,10920,190,5.7,9,9,16.0,1097,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.3,78,101400,812,1343,372,234,24,219,27000,2000,25800,9450,160,3.1,9,9,16.0,1219,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.3,75,101400,588,1343,349,365,448,169,37900,43700,18700,3450,150,3.6,3,3,16.0,77777,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101500,340,1343,332,183,395,83,19100,32800,10800,1530,180,4.6,2,2,16.0,77777,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101500,92,1198,335,25,88,19,2800,4000,2500,330,160,2.6,5,5,16.0,77777,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101600,0,0,331,0,0,0,0,0,0,0,130,3.1,5,5,16.0,77777,9,999999999,279,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101600,0,0,331,0,0,0,0,0,0,0,120,1.5,5,5,14.4,77777,9,999999999,290,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.0,12.0,94,101600,0,0,350,0,0,0,0,0,0,0,120,2.1,9,9,12.9,540,9,999999999,290,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101600,0,0,361,0,0,0,0,0,0,0,80,2.6,10,10,12.8,610,9,999999999,290,0.1870,0,88,0.150,0.0,1.0 +1999,5,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101600,0,0,364,0,0,0,0,0,0,0,120,2.1,10,10,14.4,610,9,999999999,290,0.1870,0,88,0.150,0.0,1.0 +1999,5,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101600,0,0,364,0,0,0,0,0,0,0,50,3.1,10,10,14.4,549,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101600,0,0,361,0,0,0,0,0,0,0,150,1.5,10,10,14.4,549,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,101500,0,0,358,0,0,0,0,0,0,0,180,2.6,10,10,16.0,549,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,101500,0,0,358,0,0,0,0,0,0,0,120,1.5,10,10,16.0,549,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,101500,3,235,358,0,0,0,0,0,0,0,140,2.1,10,10,11.2,671,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101600,159,1342,361,69,25,66,7500,1800,7300,1380,100,2.1,10,10,11.2,732,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101700,411,1342,364,46,0,46,5500,0,5500,2000,90,3.1,10,10,12.8,396,9,999999999,290,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,101600,653,1342,370,143,0,143,16600,0,16600,6140,90,4.6,10,10,14.4,549,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101700,869,1342,371,162,0,162,19400,0,19400,7720,130,3.1,10,10,16.0,610,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.0,88,101800,1042,1342,371,232,0,232,27700,0,27700,11110,140,2.6,10,10,16.1,600,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101800,1161,1342,371,338,12,328,40100,1100,39100,14900,130,3.6,10,10,16.0,457,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101700,1218,1342,371,369,18,353,43800,1600,42300,15920,170,3.1,10,10,14.4,457,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,101600,1209,1342,376,488,84,412,53900,8700,46100,19860,120,5.2,10,10,16.0,457,9,999999999,300,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,101600,1135,1342,376,368,24,348,43200,2200,41400,15430,110,6.2,10,10,16.0,335,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101600,1000,1342,374,430,125,336,47100,13300,37200,10890,110,4.6,10,10,16.0,335,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101600,815,1342,364,150,0,150,17900,0,17900,7050,140,4.1,10,10,16.0,244,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,12.2,89,101700,591,1342,364,148,0,148,17000,0,17000,5980,140,3.6,10,10,14.4,244,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101700,344,1342,361,75,0,75,8500,0,8500,2810,150,3.1,10,10,12.8,183,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101700,96,1219,356,15,0,15,1800,0,1800,560,130,2.1,10,10,1.2,91,9,999999999,309,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101600,0,0,359,0,0,0,0,0,0,0,90,4.1,10,10,9.6,122,9,999999999,320,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,101700,0,0,358,0,0,0,0,0,0,0,100,3.6,10,10,16.0,183,9,999999999,320,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,101600,0,0,355,0,0,0,0,0,0,0,90,4.6,10,10,16.0,183,9,999999999,320,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,101700,0,0,355,0,0,0,0,0,0,0,110,2.6,10,10,14.4,183,9,999999999,320,0.1880,0,88,0.150,0.0,1.0 +1999,5,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101600,0,0,352,0,0,0,0,0,0,0,80,4.1,10,10,12.8,122,9,999999999,320,0.1880,0,88,0.150,0.0,1.0 +1999,5,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101600,0,0,352,0,0,0,0,0,0,0,90,4.1,10,10,12.8,122,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101500,0,0,352,0,0,0,0,0,0,0,80,3.1,10,10,12.8,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101500,0,0,352,0,0,0,0,0,0,0,80,3.6,10,10,12.8,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,101500,0,0,355,0,0,0,0,0,0,0,80,3.6,10,10,14.4,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101600,4,257,359,0,0,0,0,0,0,0,70,4.1,10,10,16.0,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101700,163,1342,359,80,50,74,8700,3600,8300,1490,80,4.1,10,10,16.0,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101700,415,1342,359,84,0,84,9700,0,9700,3320,90,5.7,10,10,16.0,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101700,657,1342,360,197,12,191,22400,1000,21900,7600,90,5.7,10,10,7.2,122,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101700,872,1342,362,110,0,110,13600,0,13600,5550,90,6.2,10,10,16.0,122,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.3,96,101700,1045,1342,366,138,0,138,17200,0,17200,7170,80,5.2,10,10,16.0,122,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.3,93,101700,1163,1342,368,142,0,142,17900,0,17900,7470,90,4.6,10,10,2.4,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101600,1220,1342,366,145,0,145,18400,0,18400,7650,80,5.2,10,10,3.2,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101600,1211,1342,369,143,0,143,18100,0,18100,7550,70,5.7,10,10,14.4,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101700,1137,1342,369,140,0,140,17600,0,17600,7360,80,4.6,10,10,11.2,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101600,1003,1342,370,126,0,126,15700,0,15700,6540,70,4.6,10,10,6.4,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,101600,817,1342,373,89,0,89,11000,0,11000,4490,80,5.2,10,10,16.0,183,9,999999999,329,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,101500,594,1342,373,74,0,74,9000,0,9000,3410,90,6.7,10,10,16.0,183,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101500,347,1342,369,80,0,80,9100,0,9100,2960,90,6.2,10,10,16.0,152,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101500,99,1241,369,5,0,5,600,0,600,210,90,5.7,10,10,12.8,122,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101500,0,0,369,0,0,0,0,0,0,0,100,6.7,10,10,11.2,122,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.3,96,101500,0,0,366,0,0,0,0,0,0,0,100,7.7,10,10,12.8,122,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101500,0,0,363,0,0,0,0,0,0,0,100,6.7,10,10,2.4,91,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101600,0,0,363,0,0,0,0,0,0,0,90,6.2,10,10,1.6,91,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101600,0,0,366,0,0,0,0,0,0,0,100,3.6,10,10,2.4,61,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101500,0,0,363,0,0,0,0,0,0,0,100,3.6,10,10,1.2,61,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101500,0,0,363,0,0,0,0,0,0,0,110,3.6,10,10,2.0,61,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101400,0,0,360,0,0,0,0,0,0,0,80,5.2,10,10,0.4,61,9,999999999,320,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101400,0,0,360,0,0,0,0,0,0,0,90,6.7,10,10,0.3,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101400,5,279,360,0,0,0,0,0,0,0,90,5.2,10,10,0.3,30,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.0,13.0,100,101400,167,1341,361,78,41,73,8500,2900,8100,1500,90,5.7,10,10,0.4,15,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101400,418,1341,360,38,0,38,4700,0,4700,1690,100,5.2,10,10,0.3,30,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101300,660,1341,363,88,0,88,10600,0,10600,4120,80,5.7,10,10,0.4,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101300,875,1341,370,207,6,203,24400,500,24000,9280,100,6.2,10,10,2.0,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101300,1047,1341,370,195,0,195,23600,0,23600,9660,110,5.7,10,10,7.2,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101200,1166,1341,366,246,0,246,29800,0,29800,11960,80,5.2,10,10,0.4,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101200,1222,1341,366,266,6,261,32400,500,31900,12660,110,4.6,10,10,0.3,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101100,1213,1341,370,196,6,191,24400,500,24000,9750,120,5.2,10,10,0.0,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101100,1139,1341,370,298,12,288,35500,1000,34700,13470,130,3.6,10,10,0.3,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101000,1005,1341,373,195,0,195,23500,0,23500,9530,140,2.6,10,10,2.0,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,100900,820,1341,373,150,0,150,17900,0,17900,7070,110,3.6,10,10,3.6,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101000,597,1341,370,180,17,172,20400,1300,19800,6690,130,3.1,10,10,0.4,61,9,999999999,309,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101000,351,1341,356,61,0,61,7100,0,7100,2410,90,3.6,10,9,2.4,61,9,999999999,300,0.1890,0,88,0.150,1.0,1.0 +1999,5,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101000,103,1263,366,5,0,5,600,0,600,210,140,3.1,10,10,2.4,61,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101100,0,0,360,0,0,0,0,0,0,0,0,0.0,10,10,4.8,122,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101200,0,0,363,0,0,0,0,0,0,0,300,2.1,10,10,8.0,4267,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101200,0,0,370,0,0,0,0,0,0,0,350,3.1,10,10,2.4,61,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101200,0,0,356,0,0,0,0,0,0,0,0,0.0,10,9,6.4,4267,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101200,0,0,350,0,0,0,0,0,0,0,0,0.0,10,9,4.8,3048,9,999999999,300,0.1890,0,88,0.150,0.0,1.0 +1999,5,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101100,0,0,346,0,0,0,0,0,0,0,0,0.0,9,9,2.0,61,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,101100,0,0,353,0,0,0,0,0,0,0,230,2.6,10,10,0.3,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101100,0,0,356,0,0,0,0,0,0,0,260,2.1,10,10,0.3,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101100,0,0,356,0,0,0,0,0,0,0,0,0.0,10,10,0.3,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,101200,5,302,349,0,0,0,0,0,0,0,0,0.0,10,10,0.4,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101300,171,1341,346,38,0,38,4300,0,4300,1310,230,2.1,9,9,0.8,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101300,422,1341,356,204,135,162,21900,12400,18000,3650,200,2.1,9,9,0.4,30,9,999999999,300,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101300,663,1341,363,318,130,254,34300,13200,27800,6310,210,2.6,9,9,4.8,3048,9,999999999,290,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101300,877,1341,372,446,201,314,48600,21100,34700,8990,230,4.6,9,9,6.4,3962,9,999999999,279,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,101200,1049,1341,360,766,683,230,80300,69000,26200,7680,230,5.2,5,5,11.2,77777,9,999999999,279,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.0,12.0,56,101200,1168,1341,369,880,783,196,91000,78300,22700,8130,280,5.7,5,5,16.1,77777,9,999999999,270,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,101200,1224,1341,373,895,655,296,93900,66000,33500,16660,260,6.7,5,5,16.0,77777,9,999999999,270,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,101200,1215,1341,376,821,545,326,88500,57000,36700,18320,250,7.2,5,5,16.0,77777,9,999999999,259,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,101200,1141,1341,376,538,143,416,59000,15200,46000,16920,220,8.2,5,5,16.0,77777,9,999999999,259,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,101200,1007,1341,395,510,214,349,55900,22700,38800,11430,270,4.1,9,9,16.0,2438,9,999999999,250,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,9.4,42,101200,822,1341,397,279,35,257,30600,3500,28500,8470,270,4.1,9,9,16.0,2591,9,999999999,250,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,101200,599,1341,394,265,134,205,28700,13500,22700,4940,270,7.2,9,9,16.0,2743,9,999999999,240,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.9,44,101200,354,1341,390,128,78,107,14000,6900,12100,2720,270,6.2,9,9,16.0,2743,9,999999999,240,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.9,46,101200,106,1285,373,30,75,25,3400,3300,3100,440,280,4.6,7,7,16.0,2591,9,999999999,229,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,9.4,50,101300,0,0,361,0,0,0,0,0,0,0,270,6.2,5,5,16.0,77777,9,999999999,229,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.0,53,101400,0,0,383,0,0,0,0,0,0,0,300,4.1,9,9,16.0,2438,9,999999999,220,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,101400,0,0,353,0,0,0,0,0,0,0,320,4.1,5,5,16.0,77777,9,999999999,220,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.0,60,101400,0,0,345,0,0,0,0,0,0,0,360,2.1,3,3,16.0,77777,9,999999999,209,0.1900,0,88,0.150,0.0,1.0 +1999,5,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,101400,0,0,366,0,0,0,0,0,0,0,340,2.6,9,9,16.0,2134,9,999999999,209,0.1900,0,88,0.150,0.0,1.0 +1999,5,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,101400,0,0,337,0,0,0,0,0,0,0,340,4.1,2,2,16.0,77777,9,999999999,200,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,9.4,64,101400,0,0,323,0,0,0,0,0,0,0,330,5.2,0,0,16.0,77777,9,999999999,200,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.3,64,101500,0,0,317,0,0,0,0,0,0,0,340,5.2,0,0,16.0,77777,9,999999999,189,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,101500,0,0,311,0,0,0,0,0,0,0,320,4.6,0,0,16.0,77777,9,999999999,179,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,101500,6,324,305,0,0,0,0,0,0,0,320,6.2,0,0,16.0,77777,9,999999999,179,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,101600,175,1340,306,86,112,72,9200,7000,8300,1520,320,6.7,0,0,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,101600,426,1340,309,249,360,134,26200,33100,15600,2750,320,6.7,0,0,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.6,55,101700,667,1340,311,426,500,177,44800,50000,19900,3750,320,6.7,0,0,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.6,51,101700,880,1340,327,581,578,200,62600,59800,23300,5110,330,5.7,2,2,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,6.1,50,101700,1052,1340,336,741,653,227,77700,66000,25800,7640,320,4.1,3,3,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.1,46,101700,1170,1340,341,836,657,262,88000,66500,29900,12080,320,3.6,3,3,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.1,43,101600,1226,1340,346,901,691,267,95200,70100,30900,15310,310,6.2,3,3,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,5.6,39,101500,1217,1340,347,910,761,218,97600,77900,26600,12180,330,6.2,2,2,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,5.6,36,101600,1143,1340,352,837,723,218,88900,73700,25800,9370,350,4.1,2,2,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,5.6,34,101500,1009,1340,358,711,696,185,75300,70800,21800,5820,340,5.7,2,2,16.0,77777,9,999999999,170,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.1,35,101500,825,1340,362,557,638,163,58200,63900,18800,3890,330,5.7,3,3,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,5.6,34,101600,602,1340,358,372,530,133,39700,52200,16200,2660,290,3.6,2,2,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,5.0,33,101600,357,1340,360,195,369,97,20200,31200,11900,1820,310,5.7,3,3,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,4.4,33,101700,110,1306,360,34,111,25,3700,5300,3200,440,320,5.7,5,5,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,5.0,37,101800,0,0,355,0,0,0,0,0,0,0,360,4.6,5,5,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.1,45,101800,0,0,340,0,0,0,0,0,0,0,30,3.6,2,2,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,5.6,48,101900,0,0,321,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,6.1,53,101900,0,0,317,0,0,0,0,0,0,0,30,3.1,0,0,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.0,49,102000,0,0,316,0,0,0,0,0,0,0,20,3.6,0,0,16.0,77777,9,999999999,160,0.1910,0,88,0.150,0.0,1.0 +1999,5,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.0,53,102100,0,0,310,0,0,0,0,0,0,0,10,4.6,0,0,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,102100,0,0,308,0,0,0,0,0,0,0,10,4.6,0,0,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,102200,0,0,304,0,0,0,0,0,0,0,10,4.6,0,0,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.0,61,102200,0,0,319,0,0,0,0,0,0,0,40,4.1,5,5,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.6,71,102300,7,346,331,0,0,0,0,0,0,0,30,3.1,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.1,68,102400,179,1339,337,72,47,66,7900,3400,7400,1450,40,3.1,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.9,53,102400,429,1339,342,256,385,132,26100,34600,15000,2560,50,4.1,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,4.4,53,102400,670,1339,345,446,605,143,46100,59000,16500,2930,60,3.1,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,3.3,47,102400,883,1339,327,607,633,188,63200,63500,21300,4760,0,0.0,5,5,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,5.0,51,102400,1054,1339,332,734,641,229,77100,64800,26000,7750,180,5.7,5,5,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,102400,1172,1339,326,842,657,267,88600,66400,30400,12400,190,5.2,3,3,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,102400,1228,1339,331,943,799,209,97700,79900,24300,11060,180,6.2,5,5,16.0,77777,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,102300,1219,1339,338,934,827,180,98200,83300,22300,9410,180,6.2,7,7,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.0,49,102200,1145,1339,354,866,807,175,90500,81000,21100,6930,180,5.2,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.2,60,102200,1011,1339,354,734,750,166,78400,76700,20300,5310,180,5.7,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,102200,827,1339,350,563,650,161,59000,65200,18600,3860,180,7.2,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.8,67,102100,605,1339,349,388,595,119,40200,57400,14300,2380,180,7.7,9,9,16.0,7620,9,999999999,160,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.2,69,102100,361,1339,324,200,425,86,21000,36100,11300,1590,180,6.2,5,5,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,102000,113,1328,323,35,126,24,3700,6100,3200,420,190,6.2,5,5,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102000,0,0,314,0,0,0,0,0,0,0,190,6.2,2,2,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102000,0,0,318,0,0,0,0,0,0,0,200,6.7,3,3,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102000,0,0,304,0,0,0,0,0,0,0,210,5.2,0,0,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,102000,0,0,302,0,0,0,0,0,0,0,220,4.1,0,0,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,102000,0,0,302,0,0,0,0,0,0,0,220,4.6,0,0,16.0,77777,9,999999999,170,0.1920,0,88,0.150,0.0,1.0 +1999,5,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,101900,0,0,305,0,0,0,0,0,0,0,240,4.6,0,0,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.9,83,101900,0,0,303,0,0,0,0,0,0,0,240,4.1,0,0,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,101800,0,0,302,0,0,0,0,0,0,0,300,2.1,0,0,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.3,80,101800,0,0,339,0,0,0,0,0,0,0,310,1.5,10,9,16.0,7620,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.8,80,101800,8,368,336,0,0,0,0,0,0,0,360,2.6,10,9,16.0,7620,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.9,83,101800,183,1339,340,83,94,70,8800,6000,8000,1480,20,1.5,10,9,16.0,7620,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,101800,433,1339,329,255,417,120,26400,37700,14200,2300,10,2.1,6,5,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,101800,672,1339,334,426,512,168,45000,51300,19200,3550,20,2.6,6,5,16.0,77777,9,999999999,179,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,2.2,36,101700,885,1339,339,619,651,188,64600,65300,21300,4780,20,4.1,6,5,16.0,77777,9,999999999,179,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,1.7,32,101700,1056,1339,346,740,653,224,77800,66100,25600,7650,10,2.6,6,5,16.0,77777,9,999999999,179,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,5.6,42,101600,1174,1339,371,836,645,270,87900,65100,30600,12630,190,3.6,10,9,16.0,3658,9,999999999,189,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.1,43,101600,1230,1339,351,889,655,286,93500,66200,32600,16670,190,4.1,6,5,16.0,77777,9,999999999,189,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,4.4,36,101500,1221,1339,355,893,695,257,94500,70600,30000,14490,170,2.1,6,5,16.0,77777,9,999999999,189,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.7,44,101400,1147,1339,354,837,711,226,88700,72400,26600,9830,150,5.7,6,5,16.0,77777,9,999999999,200,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.7,47,101400,1013,1339,340,711,661,210,74800,66900,24000,6580,150,5.7,5,2,16.0,77777,9,999999999,200,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.7,44,101300,830,1339,349,558,639,161,58400,64100,18600,3880,140,5.2,5,3,16.0,77777,9,999999999,200,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,101200,608,1339,353,383,548,134,40900,54100,16300,2690,140,4.6,6,5,16.0,77777,9,999999999,209,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,7.2,52,101200,364,1339,365,187,331,97,19400,28200,11700,1820,140,4.6,10,9,16.0,7620,9,999999999,209,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.6,75,101200,117,1339,358,36,104,27,3800,4500,3400,480,0,0.0,10,9,16.0,7620,9,999999999,209,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,101200,0,11,353,0,0,0,0,0,0,0,210,1.5,10,9,16.0,7620,9,999999999,220,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,101300,0,0,353,0,0,0,0,0,0,0,0,0.0,10,9,16.0,7620,9,999999999,220,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,101200,0,0,353,0,0,0,0,0,0,0,200,2.6,10,9,16.0,3962,9,999999999,229,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,101300,0,0,360,0,0,0,0,0,0,0,0,0.0,10,10,16.0,3658,9,999999999,229,0.1930,0,88,0.150,0.0,1.0 +1999,5,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.6,78,101200,0,0,365,0,0,0,0,0,0,0,50,2.6,10,10,16.0,3048,9,999999999,229,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.6,51,101300,0,0,365,0,0,0,0,0,0,0,20,4.6,10,10,16.0,3048,9,999999999,240,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,-0.6,33,101300,0,0,357,0,0,0,0,0,0,0,30,3.6,10,10,16.0,2134,9,999999999,240,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,2.2,42,101300,0,0,358,0,0,0,0,0,0,0,10,5.7,10,10,16.0,3048,9,999999999,240,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,0.6,39,101300,0,0,353,0,0,0,0,0,0,0,30,5.2,10,10,16.0,3048,9,999999999,250,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-3.9,28,101200,9,390,345,0,0,0,0,0,0,0,30,5.7,10,10,16.0,3048,9,999999999,250,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-1.7,36,101300,187,1338,342,46,0,46,5100,0,5100,1550,30,7.2,10,10,16.0,2591,9,999999999,250,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.7,50,101300,436,1338,341,120,0,120,13500,0,13500,4400,40,4.1,10,10,16.0,3048,9,999999999,259,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.0,40,101400,675,1338,337,189,6,186,21600,500,21400,7590,40,4.6,10,9,16.0,4267,9,999999999,250,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,101400,888,1338,337,213,6,209,25100,500,24800,9570,40,4.6,10,9,16.0,4267,9,999999999,240,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,-2.8,28,101400,1058,1338,342,201,12,191,24400,900,23700,9530,30,3.1,10,9,16.0,2896,9,999999999,240,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-2.8,26,101400,1175,1338,347,670,271,432,72800,29400,46900,19860,100,2.6,10,9,16.0,7620,9,999999999,229,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,2.8,38,101300,1231,1338,359,871,547,366,93000,57100,40300,22380,170,5.2,10,9,16.0,7620,9,999999999,229,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.1,55,101300,1222,1338,340,893,671,278,94000,67900,31900,15730,190,6.7,8,7,16.0,7620,9,999999999,220,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,4.4,51,101300,1149,1338,328,825,669,249,86900,67800,28600,10810,180,4.6,5,5,16.0,77777,9,999999999,220,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,3.9,49,101300,1015,1338,328,717,696,187,75900,70900,22000,5970,190,6.2,5,5,16.0,77777,9,999999999,209,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,101300,832,1338,325,563,639,166,59000,64100,19100,3990,180,4.6,5,5,16.0,77777,9,999999999,209,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,1.7,44,101300,611,1338,342,383,566,125,39700,54600,14700,2490,170,5.2,10,9,16.0,7620,9,999999999,200,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.3,52,101400,367,1338,339,201,370,100,20800,31600,12100,1880,130,5.2,10,9,16.0,7620,9,999999999,189,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.2,50,101500,120,1338,335,39,124,28,4100,5900,3500,500,130,5.2,10,9,16.0,7620,9,999999999,189,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.3,56,101600,0,33,334,0,0,0,0,0,0,0,110,5.7,10,9,16.0,4267,9,999999999,179,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.1,71,101700,0,0,334,0,0,0,0,0,0,0,90,5.2,10,9,16.0,4267,9,999999999,179,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,101800,0,0,310,0,0,0,0,0,0,0,90,2.6,5,5,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,101800,0,0,306,0,0,0,0,0,0,0,40,2.6,3,3,16.0,77777,9,999999999,170,0.1930,0,88,0.150,0.0,1.0 +1999,5,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.6,77,101900,0,0,300,0,0,0,0,0,0,0,30,3.1,2,2,16.0,77777,9,999999999,160,0.1930,0,88,0.150,0.0,1.0 +1999,5,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.6,80,101900,0,0,297,0,0,0,0,0,0,0,40,2.6,2,2,16.0,77777,9,999999999,150,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,101900,0,0,298,0,0,0,0,0,0,0,50,3.1,3,3,16.0,77777,9,999999999,150,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.0,82,102000,0,0,283,0,0,0,0,0,0,0,30,2.6,0,0,16.0,77777,9,999999999,139,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,102000,0,0,293,0,0,0,0,0,0,0,40,3.6,3,3,16.0,77777,9,999999999,139,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,102100,10,412,300,0,0,0,0,0,0,0,50,4.6,5,5,16.0,77777,9,999999999,129,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,102200,190,1337,324,91,123,74,9700,8100,8600,1560,60,4.1,9,9,16.0,7620,9,999999999,129,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,4.4,63,102200,439,1337,332,261,429,120,27000,38900,14200,2300,50,4.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.3,52,102300,678,1337,339,452,598,148,46600,58400,17000,3050,70,5.2,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,2.8,47,102300,890,1337,343,593,578,208,63900,59800,24000,5410,100,3.1,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,3.9,47,102300,1060,1337,350,746,647,232,78300,65400,26300,7980,120,2.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,102300,1177,1337,353,873,741,219,93100,75700,26300,10590,120,3.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,2.2,40,102300,1233,1337,351,895,667,279,94400,67500,32000,16620,120,6.7,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.3,42,102300,1224,1337,355,893,683,266,94300,69300,30800,15250,140,7.2,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,4.4,51,102400,1150,1337,348,808,592,298,87200,61900,33900,13370,160,7.2,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,102300,1017,1337,346,740,720,191,78300,73200,22500,6110,150,5.7,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.0,57,102300,834,1337,343,552,562,201,59100,57800,22900,4890,160,4.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.0,57,102300,614,1337,343,378,461,167,39600,45400,18700,3440,160,4.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,4.4,59,102300,370,1337,337,159,157,115,17200,13900,13300,2550,150,4.1,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,102300,124,1337,334,40,129,28,4200,6300,3600,500,140,3.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.9,61,102400,0,56,331,0,0,0,0,0,0,0,150,2.6,9,9,16.0,7620,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,4.4,65,102500,0,0,311,0,0,0,0,0,0,0,140,2.1,5,5,16.0,77777,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,102500,0,0,309,0,0,0,0,0,0,0,140,1.5,5,5,16.0,77777,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.0,68,102500,0,0,312,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,102500,0,0,309,0,0,0,0,0,0,0,230,1.5,5,5,16.0,77777,9,999999999,120,0.1940,0,88,0.150,0.0,1.0 +1999,5,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.3,61,102400,0,0,310,0,0,0,0,0,0,0,0,0.0,5,5,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,102500,0,0,303,0,0,0,0,0,0,0,70,2.1,5,5,16.0,77777,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,102400,0,0,315,0,0,0,0,0,0,0,60,3.1,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,102500,0,0,315,0,0,0,0,0,0,0,70,2.6,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.0,82,102500,12,434,317,0,0,0,0,0,0,0,50,2.6,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.0,74,102600,194,1337,325,90,107,74,9500,7100,8500,1570,40,1.5,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.6,64,102600,442,1337,339,246,339,133,25900,31600,15500,2720,30,3.1,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,3.9,47,102700,680,1337,350,431,499,177,45500,50100,19900,3780,50,3.1,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,2.8,37,102700,892,1337,362,625,651,190,65200,65400,21500,4880,70,4.6,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,1.7,31,102700,1062,1337,369,759,689,210,80200,70000,24400,7340,70,4.6,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,0.6,28,102700,1179,1337,378,824,584,307,88900,61100,34900,15170,100,6.7,10,10,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,0.0,27,102800,1235,1337,377,859,619,286,90400,62600,32500,17180,100,6.7,10,10,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,1.1,27,102700,1225,1337,385,833,575,305,90600,60200,35300,18100,100,8.2,10,10,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,5.6,45,102700,1152,1337,376,778,556,299,84100,58100,33900,13510,160,8.8,10,10,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.0,6.0,45,102700,1019,1337,378,671,554,248,72400,57800,28300,8010,160,8.7,10,10,16.1,7500,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,102700,837,1337,362,480,361,254,51900,38500,27800,6490,130,4.6,10,10,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.1,59,102700,616,1337,347,363,391,182,38800,39900,20300,3970,120,5.7,10,9,16.0,7620,9,999999999,120,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,102700,374,1337,341,154,129,118,16700,11500,13500,2620,110,5.7,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.3,52,102700,127,1337,339,41,125,29,4300,6200,3700,520,80,3.1,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,2.8,54,102700,0,78,333,0,0,0,0,0,0,0,80,1.5,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.3,56,102800,0,0,334,0,0,0,0,0,0,0,70,2.1,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,4.4,65,102800,0,0,330,0,0,0,0,0,0,0,60,2.6,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.9,63,102800,0,0,329,0,0,0,0,0,0,0,40,3.1,10,9,16.0,7620,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,3.9,63,102700,0,0,311,0,0,0,0,0,0,0,30,2.6,5,5,16.0,77777,9,999999999,129,0.1950,0,88,0.150,0.0,1.0 +1999,5,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,102700,0,0,305,0,0,0,0,0,0,0,40,3.1,5,5,16.0,77777,9,999999999,129,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,102700,0,0,322,0,0,0,0,0,0,0,30,2.6,10,9,16.0,7620,9,999999999,129,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,102700,0,0,304,0,0,0,0,0,0,0,10,2.6,5,5,16.0,77777,9,999999999,129,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,102600,0,0,322,0,0,0,0,0,0,0,20,3.6,10,9,16.0,7620,9,999999999,129,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,102700,13,457,306,0,0,0,0,0,0,0,20,3.6,5,5,16.0,77777,9,999999999,129,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,102700,197,1336,314,100,145,78,10600,9700,9100,1650,30,4.1,5,5,16.0,77777,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.7,66,102800,445,1336,324,267,454,116,27800,41400,14000,2210,40,4.1,5,5,16.0,77777,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.7,58,102800,683,1336,334,384,296,232,40700,30700,25000,5410,50,3.6,5,5,16.0,77777,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.2,53,102800,894,1336,362,638,627,218,68400,64900,24900,5720,90,4.1,10,9,16.0,7620,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.2,48,102800,1064,1336,370,621,345,346,67700,37400,37900,12110,120,5.7,10,9,16.0,1280,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,102800,1180,1336,374,701,337,402,76500,36600,44100,18670,110,6.7,10,9,16.0,1402,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.2,47,102800,1236,1336,384,804,493,347,86400,51600,38600,21790,120,8.2,10,10,16.0,7620,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.7,45,102800,1227,1336,383,821,533,331,88600,55800,37300,19890,120,7.7,10,10,16.0,7620,9,999999999,139,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.7,45,102700,1154,1336,373,738,460,339,78500,48000,37000,15530,110,7.2,10,9,16.0,7620,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.7,47,102700,1021,1336,370,666,530,260,71500,55200,29200,8460,120,7.2,10,9,16.0,7620,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,102700,839,1336,371,503,426,235,53000,43800,25500,5830,110,6.2,10,9,16.0,7620,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.8,56,102600,619,1336,363,390,543,138,41600,53800,16700,2790,100,7.7,10,9,16.0,7620,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,102600,377,1336,358,208,377,101,21500,32500,12300,1900,100,4.6,10,9,16.0,7620,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,102600,131,1336,333,45,131,32,4700,6200,4100,580,100,5.2,5,5,16.0,77777,9,999999999,150,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,102700,1,100,328,0,0,0,0,0,0,0,80,3.6,5,5,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,102600,0,0,317,0,0,0,0,0,0,0,80,3.1,4,2,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,102700,0,0,318,0,0,0,0,0,0,0,80,3.1,4,3,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,102600,0,0,302,0,0,0,0,0,0,0,60,2.6,0,0,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.8,80,102600,0,0,299,0,0,0,0,0,0,0,80,3.1,0,0,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.3,83,102600,0,0,313,0,0,0,0,0,0,0,40,2.1,3,3,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102500,0,0,307,0,0,0,0,0,0,0,30,3.1,2,2,16.0,77777,9,999999999,160,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,102500,0,0,307,0,0,0,0,0,0,0,40,3.6,3,3,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,102500,0,0,295,0,0,0,0,0,0,0,30,2.1,0,0,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,102500,14,479,312,0,0,0,0,0,0,0,30,3.1,5,5,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,102600,200,1336,320,98,144,77,10500,9700,9000,1630,30,3.6,5,5,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,102600,448,1336,331,267,428,123,27600,39100,14500,2360,50,3.1,5,5,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,9.4,62,102600,685,1336,345,451,555,166,47900,55800,19200,3530,50,3.1,5,5,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,102600,896,1336,348,612,602,207,63500,60200,23000,5280,110,5.2,3,3,16.0,77777,9,999999999,170,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.1,57,102600,1065,1336,360,746,647,229,78400,65500,26100,8010,100,5.7,4,4,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.6,55,102600,1182,1336,362,842,644,271,88500,65100,30800,13170,100,4.6,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,102600,1237,1336,363,895,655,287,94200,66200,32800,17570,120,5.7,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,9.4,47,102500,1228,1336,366,905,707,253,96000,71900,29700,14960,130,6.2,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.3,45,102500,1155,1336,362,849,723,222,90200,73700,26300,10010,120,6.2,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.3,45,102400,1023,1336,362,717,655,215,75400,66300,24500,6890,100,6.2,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,102500,841,1336,363,547,580,182,57000,57900,20400,4380,110,5.7,5,5,16.0,77777,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.6,55,102400,622,1336,383,379,496,148,40200,49100,17300,3010,100,5.2,9,9,16.0,7620,9,999999999,179,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.6,63,102400,380,1336,372,203,349,104,21000,30200,12400,1960,110,6.2,9,9,16.0,7620,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.1,67,102400,134,1336,370,36,57,30,3900,3200,3600,630,100,4.1,9,9,16.0,7620,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,102400,1,122,362,0,0,0,0,0,0,0,100,5.2,9,9,16.0,7620,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,102400,0,0,339,0,0,0,0,0,0,0,90,4.1,5,5,16.0,77777,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,102300,0,0,336,0,0,0,0,0,0,0,80,2.6,5,5,16.0,77777,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,102300,0,0,336,0,0,0,0,0,0,0,50,2.1,5,5,16.0,77777,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,102300,0,0,315,0,0,0,0,0,0,0,70,2.6,0,0,16.0,77777,9,999999999,189,0.1960,0,88,0.150,0.0,1.0 +1999,5,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,102200,0,0,324,0,0,0,0,0,0,0,40,1.5,7,2,16.0,77777,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,102200,0,0,313,0,0,0,0,0,0,0,10,3.1,1,0,16.0,77777,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,102200,0,0,329,0,0,0,0,0,0,0,360,3.1,9,5,16.0,77777,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.7,97,102200,0,0,321,0,0,0,0,0,0,0,20,2.6,8,3,16.0,77777,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,102200,15,501,324,0,0,0,0,0,0,0,20,2.6,9,5,16.0,77777,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,102200,203,1335,352,75,23,72,8200,1700,8000,1630,30,3.6,10,9,16.0,1494,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,102200,450,1335,375,192,83,164,21000,7800,18400,4190,40,3.6,10,10,16.0,1067,9,999999999,200,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,102200,687,1335,388,397,320,231,42100,33300,24900,5390,40,3.6,10,10,16.0,853,9,999999999,209,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,102200,898,1335,398,560,389,298,60300,41700,32200,8240,60,3.6,10,10,16.0,610,9,999999999,220,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.0,18.0,100,102200,1067,1335,393,257,12,247,30700,1000,29900,11780,30,4.6,10,10,4.0,240,9,999999999,229,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,102200,1183,1335,391,295,12,284,35400,1000,34500,13460,40,4.1,10,10,4.0,305,9,999999999,229,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,102100,1239,1335,392,218,0,218,26900,0,26900,10950,60,4.1,10,10,1.6,244,9,999999999,240,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,102000,1230,1335,392,256,6,250,31200,500,30700,12250,70,3.6,10,10,1.6,213,9,999999999,250,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,102000,1157,1335,391,164,0,164,20500,0,20500,8490,90,4.1,10,10,11.2,213,9,999999999,259,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101900,1025,1335,394,224,0,224,26800,0,26800,10760,100,5.7,10,10,14.4,213,9,999999999,270,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101900,843,1335,394,218,6,214,25400,500,25100,9510,100,5.2,10,10,16.0,213,9,999999999,270,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,101900,624,1335,391,150,0,150,17300,0,17300,6240,100,6.2,10,10,8.0,213,9,999999999,279,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,101900,383,1335,387,82,0,82,9400,0,9400,3150,100,5.7,10,10,1.6,152,9,999999999,290,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101800,137,1335,384,26,0,26,3000,0,3000,920,110,6.7,10,10,1.6,152,9,999999999,300,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9?9?9,16.1,16.1,100,101800,1,145,380,0,0,0,0,0,0,0,100,5.2,10,10,1.6,61,9,999999999,309,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,101800,0,0,380,0,0,0,0,0,0,0,100,7.2,10,10,1.6,91,9,999999999,309,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,101800,0,0,380,0,0,0,0,0,0,0,110,4.6,10,10,2.0,61,9,999999999,320,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9?9?9,16.1,16.1,100,101800,0,0,380,0,0,0,0,0,0,0,100,4.6,10,10,2.0,61,9,999999999,329,0.1970,0,88,0.150,0.0,1.0 +1999,5,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.0,16.0,100,101700,0,0,380,0,0,0,0,0,0,0,100,4.6,10,10,0.4,15,9,999999999,340,0.1970,0,88,0.150,0.0,1.0 +1999,5,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,101600,0,0,380,0,0,0,0,0,0,0,110,4.1,10,10,0.4,61,9,999999999,350,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.0,16.0,100,101600,0,0,380,0,0,0,0,0,0,0,110,4.1,10,10,2.0,60,9,999999999,350,0.1980,0,88,0.150,1.0,1.0 +1999,5,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,101600,0,0,377,0,0,0,0,0,0,0,90,2.1,10,10,0.4,61,9,999999999,359,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,101600,0,0,377,0,0,0,0,0,0,0,80,1.5,10,10,0.3,61,9,999999999,370,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.0,16.0,100,101600,16,523,380,0,0,0,0,0,0,0,80,1.5,10,10,0.4,15,9,999999999,379,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,101600,206,1335,380,85,67,75,9300,5100,8500,1680,80,2.6,10,10,0.3,30,9,999999999,390,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,101500,453,1335,380,140,26,132,15400,2400,14600,3570,90,3.1,10,10,0.0,61,9,999999999,390,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,101600,690,1335,384,148,0,148,17300,0,17300,6490,80,2.6,10,10,2.0,61,9,999999999,379,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,101500,900,1335,388,245,12,236,28500,1000,27800,10580,80,3.6,10,10,2.0,61,9,999999999,370,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101500,1069,1335,392,169,0,169,20800,0,20800,8610,100,2.6,10,10,3.2,122,9,999999999,359,0.1980,0,88,0.150,1.0,1.0 +1999,5,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101500,1185,1335,394,240,6,234,29200,500,28800,11530,120,7.2,10,10,4.8,122,9,999999999,350,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101400,1240,1335,398,466,90,382,51500,9200,42900,20250,130,7.2,10,10,16.0,183,9,999999999,340,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101400,1231,1335,397,286,6,280,34600,500,34100,13420,140,6.2,10,10,16.0,183,9,999999999,329,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,101400,1158,1335,393,293,12,282,35000,1000,34200,13320,150,3.6,10,10,16.0,183,9,999999999,320,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,101300,1027,1335,384,121,0,121,15200,0,15200,6360,0,0.0,10,10,1.6,122,9,999999999,309,0.1980,0,88,0.150,9.0,1.0 +1999,5,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,101300,845,1335,388,95,0,95,11800,0,11800,4820,0,0.0,10,10,1.6,152,9,999999999,300,0.1980,0,88,0.150,13.0,1.0 +1999,5,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,101300,627,1335,388,64,0,64,7900,0,7900,3060,0,0.0,10,10,3.2,213,9,999999999,290,0.1980,0,88,0.150,11.0,1.0 +1999,5,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101300,386,1335,394,117,28,109,12800,2500,12100,2870,330,3.6,10,10,4.8,244,9,999999999,279,0.1980,0,88,0.150,1.0,1.0 +1999,5,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,101300,141,1335,391,47,100,36,4900,5000,4400,660,330,5.7,10,10,4.8,244,9,999999999,270,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101300,1,167,384,0,0,0,0,0,0,0,360,6.2,10,10,6.4,762,9,999999999,259,0.1980,0,88,0.150,2.0,1.0 +1999,5,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101400,0,0,380,0,0,0,0,0,0,0,360,7.2,10,10,16.0,2286,9,999999999,240,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101400,0,0,379,0,0,0,0,0,0,0,10,6.2,10,10,16.0,1128,9,999999999,229,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101500,0,0,379,0,0,0,0,0,0,0,340,4.6,10,10,16.0,1676,9,999999999,220,0.1980,0,88,0.150,0.0,1.0 +1999,5,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101400,0,0,377,0,0,0,0,0,0,0,330,5.7,10,10,16.0,1128,9,999999999,209,0.1980,0,88,0.150,1.0,1.0 +1999,5,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101400,0,0,376,0,0,0,0,0,0,0,340,5.2,10,10,16.0,1981,9,999999999,200,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.8,87,101400,0,0,361,0,0,0,0,0,0,0,350,5.7,9,9,16.0,3962,9,999999999,189,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101400,0,0,354,0,0,0,0,0,0,0,340,4.6,9,9,16.0,7620,9,999999999,179,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101500,0,0,312,0,0,0,0,0,0,0,330,4.1,0,0,16.0,77777,9,999999999,170,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101500,17,545,349,0,0,0,0,0,0,0,340,5.7,9,9,16.0,3962,9,999999999,160,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101600,209,1334,349,95,112,77,10100,7700,8900,1630,340,5.7,9,9,16.0,7620,9,999999999,150,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.0,77,101600,455,1334,352,184,76,158,20100,7200,17700,4100,350,6.2,9,9,16.0,7620,9,999999999,139,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,9.4,69,101600,692,1334,357,329,154,249,35600,15800,27400,6290,340,8.8,9,9,16.0,7620,9,999999999,139,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.9,60,101700,901,1334,344,643,626,219,69000,64800,25100,5820,350,8.2,5,5,16.0,77777,9,999999999,139,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,101700,1070,1334,350,789,756,182,84400,77400,22200,6610,350,10.3,5,5,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,7.8,45,101600,1186,1334,350,860,681,254,90900,69100,29400,12670,330,9.3,2,2,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,5.0,34,101600,1241,1334,358,955,799,210,99100,79900,24600,12180,340,7.2,3,3,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,3.9,30,101500,1232,1334,356,917,719,251,97400,73200,29600,15240,330,9.8,2,2,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.1,34,101500,1160,1334,365,843,693,239,89200,70400,27800,10930,330,7.7,3,3,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,4.4,29,101500,1029,1334,362,735,720,178,78300,73600,21400,5900,320,8.8,2,2,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,3.9,28,101500,847,1334,364,593,704,145,62800,71200,17400,3640,320,7.2,3,3,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,2.8,27,101500,629,1334,357,396,543,140,42400,54000,16900,2850,330,7.2,2,2,16.0,77777,9,999999999,129,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,1.7,26,101500,389,1334,356,205,356,101,21300,31100,12200,1900,340,6.7,3,3,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,2.2,29,101600,144,1334,348,51,158,34,5300,8500,4400,610,360,5.7,2,2,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,2.8,32,101700,2,189,333,0,0,0,0,0,0,0,350,5.2,0,0,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,4.4,41,101800,0,0,325,0,0,0,0,0,0,0,340,2.6,0,0,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,1.1,32,101800,0,0,321,0,0,0,0,0,0,0,340,5.7,0,0,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,1.1,35,101800,0,0,316,0,0,0,0,0,0,0,330,5.7,0,0,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,2.2,40,101800,0,0,313,0,0,0,0,0,0,0,330,5.2,0,0,16.0,77777,9,999999999,120,0.1980,0,88,0.150,0.0,1.0 +1999,5,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.2,44,101800,0,0,307,0,0,0,0,0,0,0,340,4.6,0,0,16.0,77777,9,999999999,120,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,2.8,49,101900,0,0,303,0,0,0,0,0,0,0,340,4.1,0,0,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,3.3,54,101900,0,0,299,0,0,0,0,0,0,0,300,3.1,0,0,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.3,56,101900,0,0,297,0,0,0,0,0,0,0,320,2.6,0,0,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,101900,18,545,311,0,0,0,0,0,0,0,320,2.1,3,3,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,4.4,55,101900,212,1334,315,104,156,79,10700,10200,9000,1610,300,3.6,2,2,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,102000,458,1334,328,272,433,123,28200,39800,14600,2360,330,3.6,3,3,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,3.9,41,102000,694,1334,332,463,603,149,47900,59100,17100,3120,10,4.6,2,2,16.0,77777,9,999999999,110,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,4.4,40,102000,903,1334,327,617,626,192,64400,62900,21700,5020,10,5.7,0,0,16.0,77777,9,999999999,120,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,4.4,37,102000,1071,1334,343,764,677,219,80600,68700,25300,7850,20,3.1,2,2,16.0,77777,9,999999999,120,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,3.9,35,101900,1187,1334,354,866,711,232,92200,72500,27500,11730,30,3.1,5,5,16.0,77777,9,999999999,120,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,5.0,35,101800,1242,1334,361,913,697,262,96800,70800,30700,16710,230,5.2,5,5,16.0,77777,9,999999999,129,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,6.7,38,101700,1234,1334,366,917,731,239,97800,74600,28600,14670,230,6.7,5,5,16.0,77777,9,999999999,129,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.1,34,101600,1161,1334,370,855,711,234,90600,72300,27500,10780,220,4.6,5,5,16.0,77777,9,999999999,139,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.3,44,101600,1030,1334,386,678,542,258,73000,56500,29200,8570,210,6.2,9,9,16.0,7620,9,999999999,139,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,101600,850,1334,374,548,515,220,58400,53100,24500,5500,180,6.2,9,9,16.0,7620,9,999999999,139,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,9.4,56,101600,632,1334,373,284,134,220,30700,13600,24300,5380,170,4.6,9,9,16.0,7620,9,999999999,150,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.0,60,101600,391,1334,371,186,220,121,19500,19700,13800,2450,180,3.1,9,9,16.0,7620,9,999999999,150,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.1,72,101600,147,1334,364,38,43,33,4200,2500,3900,690,180,2.1,9,9,16.0,7620,9,999999999,150,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.7,78,101600,2,189,362,0,0,0,0,0,0,0,150,1.5,9,9,16.0,7620,9,999999999,160,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101700,0,0,359,0,0,0,0,0,0,0,70,2.6,9,9,16.0,7620,9,999999999,160,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101600,0,0,359,0,0,0,0,0,0,0,70,2.6,9,9,16.1,7500,9,999999999,170,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101600,0,0,359,0,0,0,0,0,0,0,0,0.0,9,9,16.0,7620,9,999999999,170,0.1990,0,88,0.150,0.0,1.0 +1999,5,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101600,0,0,359,0,0,0,0,0,0,0,0,0.0,9,9,16.0,7620,9,999999999,170,0.1990,0,88,0.150,0.0,1.0 +1999,5,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101600,0,0,334,0,0,0,0,0,0,0,40,2.1,5,5,16.0,77777,9,999999999,179,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,101500,0,0,336,0,0,0,0,0,0,0,60,1.5,5,5,16.0,77777,9,999999999,179,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,101500,0,0,357,0,0,0,0,0,0,0,0,0.0,9,9,16.0,7620,9,999999999,189,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.0,83,101500,0,0,346,0,0,0,0,0,0,0,0,0.0,9,9,16.0,7620,9,999999999,189,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,101600,20,567,353,0,0,0,0,0,0,0,40,1.5,9,9,16.0,7620,9,999999999,189,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.6,78,101600,214,1333,355,72,15,70,7900,400,7800,2150,30,2.1,9,9,16.0,7620,9,999999999,200,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,9.4,56,101600,460,1333,373,191,64,169,20900,6100,18800,4330,50,2.1,9,9,16.0,7620,9,999999999,200,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,6.7,39,101600,695,1333,384,302,86,257,33100,8700,28600,7550,80,2.6,9,9,16.0,7620,9,999999999,209,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.7,37,101600,904,1333,390,405,97,339,44500,10000,37800,11460,130,3.1,9,9,16.0,7620,9,999999999,209,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,6.7,34,101600,1073,1333,396,482,115,390,52900,12200,43000,14140,130,3.6,9,9,16.0,7620,9,999999999,220,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,5.6,32,101600,1188,1333,394,541,102,449,59600,10500,50200,20820,120,4.1,9,9,16.0,7620,9,999999999,220,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,7.8,41,101600,1244,1333,389,568,132,445,62600,14100,49500,24600,170,3.6,9,9,16.0,7620,9,999999999,220,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.2,38,101500,1235,1333,391,566,138,438,62400,14700,48700,23420,160,3.1,9,9,16.0,7620,9,999999999,229,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.8,40,101500,1163,1333,391,527,108,433,58200,11200,48400,19280,160,4.1,9,9,16.0,7620,9,999999999,229,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,8.3,41,101500,1032,1333,392,460,113,372,50600,11600,41600,14170,130,4.6,9,9,16.0,7620,9,999999999,240,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,9.4,50,101400,852,1333,393,369,101,305,40600,10300,34000,10020,150,4.6,10,10,16.0,7620,9,999999999,240,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.6,57,101400,634,1333,391,263,76,227,28900,7600,25300,6480,120,5.2,10,10,16.0,7620,9,999999999,250,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.7,63,101400,394,1333,390,147,79,123,16000,7200,13900,3180,110,5.2,10,10,16.0,7620,9,999999999,250,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,101400,150,1333,381,52,112,39,5400,5800,4800,720,120,4.1,10,10,16.0,7620,9,999999999,259,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101500,3,211,367,0,0,0,0,0,0,0,120,4.1,9,9,16.0,7620,9,999999999,259,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,101500,0,0,372,0,0,0,0,0,0,0,140,2.6,10,10,16.0,7620,9,999999999,270,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,101500,0,0,369,0,0,0,0,0,0,0,100,2.6,10,10,16.0,7620,9,999999999,270,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.2,87,101400,0,0,349,0,0,0,0,0,0,0,90,3.1,8,8,16.0,7620,9,999999999,279,0.2000,0,88,0.150,0.0,1.0 +1999,5,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.7,78,101300,0,0,342,0,0,0,0,0,0,0,110,3.6,5,5,16.0,7620,9,999999999,279,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,101300,0,0,376,0,0,0,0,0,0,0,110,2.6,10,10,16.0,3962,9,999999999,290,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,101200,0,0,378,0,0,0,0,0,0,0,110,5.2,10,10,16.0,335,9,999999999,290,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101200,0,0,377,0,0,0,0,0,0,0,100,4.1,10,10,12.8,335,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101100,0,0,377,0,0,0,0,0,0,0,70,4.1,10,10,11.2,3353,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101100,21,589,376,0,0,0,0,0,0,0,80,2.6,10,10,9.6,2743,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101200,217,1332,377,20,0,20,2400,0,2400,820,90,3.6,10,10,11.2,1402,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101100,462,1332,380,198,114,158,21300,10800,17600,3610,120,2.1,10,10,6.4,1402,9,999999999,309,0.2000,0,88,0.150,1.0,1.0 +1999,5,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.0,16.0,100,101100,697,1332,380,315,129,247,34100,13300,27200,6260,120,2.1,10,10,6.4,1380,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101100,906,1332,383,231,6,227,27100,500,26800,10320,120,4.1,10,10,8.0,183,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101100,1074,1332,383,282,12,272,33500,1000,32600,12720,130,4.6,10,10,8.0,183,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101100,1189,1332,380,258,0,258,31300,0,31300,12490,120,6.2,10,10,6.4,244,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101000,1245,1332,377,272,6,266,33100,500,32600,12920,120,5.7,10,10,4.8,183,9,999999999,309,0.2000,0,88,0.150,1.0,1.0 +1999,5,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100900,1236,1332,377,268,6,262,32600,500,32100,12750,130,4.6,10,10,4.8,152,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100900,1164,1332,377,252,0,252,30500,0,30500,12210,120,4.6,10,10,2.4,152,9,999999999,309,0.2000,0,88,0.150,1.0,1.0 +1999,5,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100800,1034,1332,377,138,0,138,17100,0,17100,7160,110,4.1,10,10,2.4,213,9,999999999,309,0.2000,0,88,0.150,1.0,1.0 +1999,5,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,100800,854,1332,379,403,178,289,44100,18700,32000,8140,120,4.6,10,10,2.4,213,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,100800,636,1332,376,295,111,242,32300,11100,27000,6810,120,3.6,10,10,4.0,213,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,100800,397,1332,376,162,91,135,17700,8300,15300,3420,100,2.6,10,10,4.0,213,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,100800,153,1332,376,42,39,37,4500,2300,4300,770,80,3.1,10,10,4.0,1036,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100800,3,233,373,0,0,0,0,0,0,0,90,2.6,10,10,4.0,152,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,100800,0,0,373,0,0,0,0,0,0,0,0,0.0,10,10,4.0,152,9,999999999,309,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,100700,0,0,373,0,0,0,0,0,0,0,90,1.5,10,10,3.2,152,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,100700,0,0,370,0,0,0,0,0,0,0,0,0.0,10,10,1.6,91,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100700,0,0,373,0,0,0,0,0,0,0,0,0.0,10,10,1.2,91,9,999999999,300,0.2000,0,88,0.150,0.0,1.0 +1999,5,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100600,0,0,373,0,0,0,0,0,0,0,0,0.0,10,10,1.6,152,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100600,0,0,377,0,0,0,0,0,0,0,0,0.0,10,10,2.4,152,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100600,0,0,377,0,0,0,0,0,0,0,110,1.5,10,10,1.6,91,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100500,0,0,373,0,0,0,0,0,0,0,110,2.1,10,10,0.4,61,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100500,22,610,373,0,0,0,0,0,0,0,60,3.6,10,10,0.3,30,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100500,219,1332,373,20,0,20,2400,0,2400,820,70,2.6,10,10,0.3,30,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100400,464,1332,377,161,38,148,17700,3600,16400,3950,80,3.6,10,10,0.3,30,9,999999999,300,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100400,699,1332,373,201,6,198,23000,500,22800,8110,110,5.2,10,10,2.0,61,9,999999999,290,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100300,907,1332,373,135,0,135,16500,0,16500,6750,90,5.2,10,10,2.0,61,9,999999999,290,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,100100,1075,1332,377,150,0,150,18600,0,18600,7770,80,5.2,10,10,3.2,122,9,999999999,279,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100200,1190,1332,373,141,0,141,17900,0,17900,7450,110,5.1,10,10,3.2,120,9,999999999,279,0.2010,0,88,0.150,9.0,1.0 +1999,5,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.0,14.0,100,100200,1246,1332,367,151,0,151,19200,0,19200,7960,180,2.6,10,10,2.0,120,9,999999999,279,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,100000,1237,1332,380,149,0,149,18900,0,18900,7860,190,9.3,10,10,3.2,122,9,999999999,270,0.2010,0,88,0.150,1.0,1.0 +1999,5,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,99900,1165,1332,380,176,0,176,21900,0,21900,9040,170,6.7,10,10,4.0,457,9,999999999,270,0.2010,0,88,0.150,4.0,1.0 +1999,5,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,17.0,100,99900,1035,1332,386,126,0,126,15800,0,15800,6610,160,4.1,10,10,9.7,1500,9,999999999,259,0.2010,0,88,0.150,1.0,1.0 +1999,5,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,99900,856,1332,387,101,0,101,12500,0,12500,5120,170,6.2,10,10,14.4,3962,9,999999999,259,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,16.0,94,100000,639,1332,385,75,0,75,9200,0,9200,3550,180,6.7,10,10,12.9,2400,9,999999999,250,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,100000,400,1332,387,34,0,34,4200,0,4200,1510,230,3.6,10,10,11.2,579,9,999999999,250,0.2010,0,88,0.150,2.0,1.0 +1999,5,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,100000,156,1332,386,53,69,45,5800,4100,5300,940,210,4.1,10,10,16.0,2743,9,999999999,240,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,100200,4,255,369,0,0,0,0,0,0,0,250,4.6,9,9,16.0,3048,9,999999999,240,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,100300,0,0,379,0,0,0,0,0,0,0,240,5.7,10,10,16.0,2743,9,999999999,229,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,100300,0,0,346,0,0,0,0,0,0,0,250,5.7,5,5,16.0,77777,9,999999999,229,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.6,75,100500,0,0,330,0,0,0,0,0,0,0,250,6.7,2,2,16.0,77777,9,999999999,220,0.2010,0,88,0.150,0.0,1.0 +1999,5,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,100500,0,0,315,0,0,0,0,0,0,0,250,5.7,0,0,16.0,77777,9,999999999,220,0.2010,0,88,0.150,0.0,1.0 +1999,5,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.0,77,100500,0,0,314,0,0,0,0,0,0,0,240,5.7,0,0,16.0,77777,9,999999999,209,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,100500,0,0,310,0,0,0,0,0,0,0,250,5.2,0,0,16.0,77777,9,999999999,209,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,100600,0,0,308,0,0,0,0,0,0,0,220,5.7,0,0,16.0,77777,9,999999999,200,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,100600,0,0,307,0,0,0,0,0,0,0,250,6.2,0,0,16.0,77777,9,999999999,200,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,100700,23,610,304,0,0,0,0,0,0,0,230,5.2,0,0,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,100800,221,1331,320,111,153,85,11800,10800,10000,1810,210,5.7,4,2,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,100800,466,1331,333,270,407,128,28100,37600,14900,2470,220,4.6,5,5,16.0,77777,9,999999999,179,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,100800,700,1331,330,469,615,145,48700,60500,16800,3070,210,6.2,4,2,16.0,77777,9,999999999,179,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.7,72,100800,908,1331,347,636,657,187,66600,66200,21400,4970,180,8.2,5,5,16.0,77777,9,999999999,179,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,100800,1076,1331,366,751,538,316,79800,56100,34400,11800,210,8.8,10,9,16.0,2438,9,999999999,179,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.7,48,100800,1191,1331,367,375,36,342,41400,3700,38100,16630,230,10.8,10,9,16.0,2286,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,7.2,43,100700,1247,1331,379,508,96,418,56200,9900,46900,22470,230,7.7,10,9,16.0,2286,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.8,48,100700,1238,1331,366,881,545,373,94100,56900,41000,24240,230,9.8,8,8,16.0,2438,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,7.8,44,100700,1167,1331,365,867,705,248,91600,71500,28800,11650,230,7.7,7,6,16.0,2591,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,7.2,39,100600,1037,1331,366,701,542,278,75000,56500,30900,9440,230,8.8,5,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,6.1,38,100600,857,1331,383,353,101,288,38900,10300,32200,9640,240,8.2,10,9,16.0,2743,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,5.6,36,100700,641,1331,383,86,0,86,10400,0,10400,4010,250,9.3,10,9,16.0,3353,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,100700,403,1331,359,197,215,132,20700,19400,14800,2720,250,9.3,5,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,3.3,34,100800,159,1331,350,57,177,36,6000,10100,4800,640,280,6.7,5,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,3.3,37,100900,4,277,345,0,0,0,0,0,0,0,270,6.2,5,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.6,50,101000,0,0,332,0,0,0,0,0,0,0,230,3.6,4,3,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.3,60,101000,0,0,341,0,0,0,0,0,0,0,210,4.6,5,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,101000,0,0,330,0,0,0,0,0,0,0,210,4.1,4,3,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,100900,0,0,319,0,0,0,0,0,0,0,200,3.6,4,2,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,100800,0,0,324,0,0,0,0,0,0,0,190,5.2,5,2,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.3,64,100800,0,0,335,0,0,0,0,0,0,0,200,7.2,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,100800,0,0,326,0,0,0,0,0,0,0,210,7.2,5,2,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.2,57,100800,0,0,357,0,0,0,0,0,0,0,220,7.2,10,9,16.0,3353,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,100800,24,632,368,0,0,0,0,0,0,0,220,6.7,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,100800,224,1331,358,90,65,79,9800,5100,9000,1800,220,6.7,10,9,16.0,3353,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.3,58,100800,467,1331,343,270,362,143,28600,34400,16500,2960,220,6.7,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.3,50,100800,702,1331,354,475,597,160,50800,60300,19000,3430,230,8.8,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,9.4,50,100800,910,1331,361,655,705,172,69000,71300,20200,4630,230,7.7,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.3,44,100800,1077,1331,365,745,580,275,80300,60600,31200,10210,230,11.3,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.7,35,100700,1192,1331,371,737,391,386,80900,42500,42800,18770,240,9.3,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.7,35,100700,1247,1331,371,895,559,370,95800,58400,40900,25270,250,8.8,6,5,16.0,77777,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.1,35,100600,1239,1331,375,268,24,246,29800,2400,27600,13680,260,9.3,8,7,16.0,2438,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.1,35,100700,1168,1331,389,498,96,414,55000,9900,46300,18800,280,7.2,10,9,16.0,2743,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,6.7,38,100700,1038,1331,398,368,30,345,40600,3100,38200,13450,280,7.2,10,10,16.0,2743,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,6.7,39,100700,859,1331,395,297,30,278,34100,2700,32300,11570,290,8.2,10,10,16.0,2896,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,6.1,38,100700,643,1331,383,258,82,218,28300,8200,24300,6350,280,6.7,10,9,16.0,4267,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,5.6,39,100800,405,1331,377,113,17,108,12700,1000,12400,3950,270,9.3,10,9,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,5.6,40,100800,162,1331,385,50,89,40,5400,4900,4800,730,280,7.2,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.2,48,100900,5,299,381,0,0,0,0,0,0,0,320,4.6,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.7,48,101000,0,0,378,0,0,0,0,0,0,0,310,4.6,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,6.7,50,101000,0,0,375,0,0,0,0,0,0,0,300,5.7,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.2,53,101000,0,0,373,0,0,0,0,0,0,0,320,5.7,10,10,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.2,56,101000,0,0,359,0,0,0,0,0,0,0,310,6.7,10,9,16.0,3048,9,999999999,189,0.2020,0,88,0.150,0.0,1.0 +1999,5,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.2,57,101000,0,0,367,0,0,0,0,0,0,0,330,3.1,10,10,16.0,2896,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,101000,0,0,355,0,0,0,0,0,0,0,330,4.6,9,9,16.0,2896,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,101000,0,0,352,0,0,0,0,0,0,0,310,5.7,9,9,16.0,1829,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,101000,0,0,352,0,0,0,0,0,0,0,320,5.7,9,9,16.0,2438,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.8,67,101000,25,654,330,0,0,0,0,0,0,0,330,5.7,5,5,16.0,2438,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,101100,225,1331,352,50,0,50,5600,0,5600,1770,300,6.2,9,9,16.0,2286,9,999999999,189,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,101100,469,1331,339,255,260,163,26700,24700,18000,3470,310,4.6,7,7,16.0,7620,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.8,58,101100,703,1331,340,462,560,166,49300,56600,19300,3570,330,3.1,5,5,16.0,77777,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.8,52,101100,911,1331,369,565,444,261,59700,45900,28200,7150,330,5.2,9,9,16.0,2438,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,101000,1078,1331,371,676,477,289,72500,49800,32100,10790,290,6.2,9,9,16.0,2591,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.2,50,101000,1193,1331,368,756,434,366,80400,45300,39700,19600,300,5.7,9,9,16.0,1494,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,7.8,47,101000,1248,1331,377,550,132,426,60800,14100,47600,24220,330,7.2,9,9,16.0,1524,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,100900,1240,1331,359,905,605,340,97600,63300,38500,22330,340,5.7,5,5,16.0,77777,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,3.3,29,100900,1169,1331,364,885,771,206,94800,79000,25200,9930,310,8.2,5,5,16.0,77777,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,2.8,29,100900,1040,1331,361,753,733,180,80400,74900,21700,6140,340,5.7,5,5,16.0,77777,9,999999999,179,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,3.9,31,100900,861,1331,362,577,604,186,60200,60500,20900,4600,320,7.2,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,3.3,30,100900,646,1331,361,420,603,127,43600,58900,15000,2610,320,9.3,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,2.8,30,100900,408,1331,358,222,380,106,23200,33800,12800,2000,330,6.7,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,3.3,32,101000,165,1331,356,62,164,42,6600,9200,5500,770,310,5.2,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,2.8,32,101100,6,322,353,0,0,0,0,0,0,0,330,5.2,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,2.2,32,101200,0,0,349,0,0,0,0,0,0,0,320,5.2,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,2.8,34,101200,0,0,368,0,0,0,0,0,0,0,320,3.6,9,9,16.0,3353,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,3.3,37,101300,0,0,345,0,0,0,0,0,0,0,310,3.1,5,5,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.3,38,101200,0,0,334,0,0,0,0,0,0,0,310,2.6,2,2,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,6.7,54,101200,0,0,330,0,0,0,0,0,0,0,280,3.6,2,2,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,5.0,51,101200,0,0,327,0,0,0,0,0,0,0,250,2.6,3,3,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.6,55,101300,0,0,321,0,0,0,0,0,0,0,270,3.1,2,2,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,101300,0,0,312,0,0,0,0,0,0,0,290,2.6,0,0,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,101300,26,654,312,0,0,0,0,0,0,0,300,4.1,0,0,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.0,48,101400,227,1330,332,108,166,80,11200,11300,9300,1610,300,4.1,3,3,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,5.6,43,101400,471,1330,339,284,463,120,29700,43000,14500,2300,310,5.7,2,2,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.7,44,101500,704,1330,354,462,584,152,47800,57400,17300,3210,320,5.2,5,5,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,6.7,40,101500,912,1330,368,649,675,185,68000,68100,21300,4950,310,5.2,7,7,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,6.7,37,101500,1079,1330,390,745,616,244,78000,62200,27500,8860,310,3.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,7.8,36,101500,1194,1330,401,829,578,309,89700,60500,35300,16490,320,4.1,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,7.2,33,101500,1249,1330,402,889,589,335,96200,61700,38100,23100,300,4.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,6.7,31,101400,1241,1330,405,857,563,331,92700,58900,37600,21870,340,4.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,6.1,29,101200,1170,1330,407,703,335,408,76700,36400,44700,18710,340,6.2,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,7.2,29,101200,1041,1330,415,719,566,275,77100,59000,30800,9440,310,4.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.0,41,101400,863,1330,403,448,243,291,48200,26000,31300,7800,170,4.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.1,53,101400,648,1330,390,285,105,234,31300,10500,26200,6730,180,3.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101500,410,1330,385,143,57,126,15700,5200,14100,3300,170,4.6,9,9,16.0,7620,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.1,59,101500,168,1330,351,62,135,45,6500,7600,5600,840,170,4.6,2,2,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,101600,6,321,347,0,0,0,0,0,0,0,150,2.1,3,3,16.0,77777,9,999999999,160,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.2,68,101600,0,0,347,0,0,0,0,0,0,0,150,1.5,2,2,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.3,78,101600,0,0,346,0,0,0,0,0,0,0,190,2.1,3,3,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,101600,0,0,329,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.3,86,101600,0,0,325,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.2030,0,88,0.150,0.0,1.0 +1999,5,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.3,86,101600,0,0,325,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,101700,0,0,329,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,101700,0,0,327,0,0,0,0,0,0,0,300,2.1,0,0,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,14.4,90,101700,0,0,328,0,0,0,0,0,0,0,230,1.5,0,0,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,101800,27,676,332,0,28,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.2,65,101800,229,1330,350,118,173,88,12100,11800,10000,1810,310,2.6,2,2,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.2,55,101800,472,1330,367,284,450,124,29600,41800,14700,2390,260,1.5,3,3,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,12.2,48,101900,705,1330,374,475,621,145,49300,61200,16800,3090,240,2.6,2,2,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,10.6,38,101900,912,1330,387,649,675,185,68100,68100,21300,4960,240,4.1,3,3,16.0,77777,9,999999999,170,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,12.2,41,101900,1079,1330,388,783,731,188,83600,74800,22700,7030,230,3.6,2,2,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,12.2,38,101900,1194,1330,398,878,711,239,93400,72400,28200,12560,200,5.2,3,3,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,12.2,36,101900,1250,1330,434,967,805,209,100600,80600,24600,13030,200,5.7,9,9,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,10.6,35,101800,1242,1330,423,935,743,239,99800,75900,28800,15570,180,7.2,9,9,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.2,42,101800,1171,1330,419,850,622,301,88600,62400,33500,14210,190,7.7,9,9,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,101700,1043,1330,415,575,256,374,62100,27700,40400,12890,190,8.8,9,9,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,12.2,45,101700,865,1330,412,230,18,218,26900,1500,25900,9790,190,7.7,9,9,16.0,2896,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.9,57,101700,650,1330,403,296,146,225,32200,14900,24900,5560,190,5.7,9,9,16.0,3048,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,14.4,54,101700,413,1330,412,104,6,102,11800,400,11700,3840,70,3.6,9,9,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,101700,171,1330,400,67,105,53,7200,6600,6300,1110,0,0.0,7,7,16.0,7620,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.9,54,101800,7,343,386,0,0,0,0,0,0,0,230,2.6,5,5,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,14.4,63,101800,0,0,369,0,0,0,0,0,0,0,240,2.6,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.9,59,101900,0,0,377,0,0,0,0,0,0,0,250,3.1,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,14.4,63,101900,0,0,369,0,0,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.0,76,101900,0,0,364,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.0,78,101900,0,0,353,0,0,0,0,0,0,0,240,2.1,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,14.4,84,102000,0,0,347,0,0,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,102000,0,0,357,0,0,0,0,0,0,0,360,1.5,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,102000,0,0,353,0,0,0,0,0,0,0,10,2.1,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,102100,28,676,353,0,28,0,0,0,0,0,360,2.1,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.2,61,102100,231,1329,358,117,166,88,12400,12000,10400,1880,360,2.1,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.7,50,102200,473,1329,368,276,412,129,28600,38300,15000,2500,20,3.1,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,9.4,37,102200,706,1329,380,468,603,147,48500,59400,16900,3130,10,4.6,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.1,39,102200,913,1329,384,616,590,210,64000,59100,23400,5540,340,4.1,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,11.7,37,102200,1080,1329,397,764,647,237,80200,65400,27000,8680,340,3.1,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,9.4,30,102200,1195,1329,406,866,687,248,91900,69800,29000,13050,290,1.5,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,10.0,30,102200,1251,1329,410,931,727,246,99300,74200,29400,16790,240,3.6,5,5,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,10.6,30,102100,1243,1329,404,923,725,244,98500,74000,29200,15980,220,5.2,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,8.3,27,102100,1172,1329,401,873,735,223,93000,75000,26700,10860,190,4.6,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.0,32,102000,1044,1329,398,742,685,203,78500,69700,23700,6930,180,5.2,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,11.1,34,102000,866,1329,399,583,610,185,60800,61200,20900,4620,170,4.6,3,3,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,14.4,50,102000,652,1329,385,404,527,145,43200,52700,17300,2990,180,5.7,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.3,55,102000,415,1329,370,228,369,113,23700,33000,13300,2150,180,4.6,2,2,16.0,77777,9,999999999,189,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.7,53,102000,174,1329,363,67,181,44,7000,10800,5600,800,190,1.5,2,2,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.8,63,102000,8,366,359,0,0,0,0,0,0,0,200,2.6,3,3,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,102000,0,0,353,0,0,0,0,0,0,0,190,2.1,2,2,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.2,65,102000,0,0,353,0,0,0,0,0,0,0,190,2.1,3,3,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.9,76,102000,0,0,337,0,0,0,0,0,0,0,210,1.5,0,0,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.0,78,102000,0,0,341,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.2040,0,88,0.150,0.0,1.0 +1999,5,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,102000,0,0,336,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,102000,0,0,332,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.9,84,102000,0,0,330,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.3,83,102000,0,0,327,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,102000,28,698,342,0,33,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,102000,232,1329,336,116,194,83,12100,13400,9700,1670,0,0.0,0,0,12.8,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,102000,474,1329,353,291,475,121,30400,44200,14600,2320,0,0.0,0,0,12.8,77777,9,999999999,170,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.7,68,102000,707,1329,362,468,566,166,49900,57300,19400,3590,0,0.0,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.7,60,102000,914,1329,373,642,650,194,67100,65400,22000,5190,80,2.1,0,0,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,102000,1080,1329,388,751,610,254,78500,61500,28400,9250,160,3.1,2,2,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.2,60,102000,1196,1329,393,872,705,237,92800,71900,28000,12560,150,3.1,3,3,16.0,77777,9,999999999,179,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,101900,1251,1329,392,919,673,284,97000,68100,32700,19330,140,4.1,2,2,16.0,77777,9,999999999,189,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.8,60,101800,1244,1329,402,965,815,200,100700,81800,24000,12180,140,4.1,5,5,16.0,77777,9,999999999,189,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,17.2,54,101800,1173,1329,408,873,729,228,92900,74300,27100,11140,140,6.2,5,5,16.0,77777,9,999999999,189,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,16.1,54,101800,1045,1329,400,725,596,255,78300,62200,29300,8800,160,6.7,5,5,16.0,77777,9,999999999,189,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,101800,868,1329,393,561,533,212,60100,55100,24100,5410,170,6.2,5,5,16.0,77777,9,999999999,189,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101800,654,1329,408,383,416,178,40100,41500,19700,3760,160,5.7,10,9,16.0,7620,9,999999999,200,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101700,418,1329,401,214,290,122,22600,26600,14200,2460,160,5.2,10,9,14.4,7620,9,999999999,200,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101700,176,1329,380,68,201,41,7100,12200,5400,730,160,3.1,8,7,14.4,7620,9,999999999,200,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.7,81,101800,8,388,369,0,0,0,0,0,0,0,170,2.1,5,5,16.0,77777,9,999999999,200,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,101800,0,0,372,0,0,0,0,0,0,0,130,1.5,5,5,16.0,77777,9,999999999,200,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.9,15.8,78,101800,0,0,389,0,0,0,0,0,0,0,120,1.9,10,9,16.0,7620,9,999999999,209,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.2,15.5,84,101700,0,0,385,0,0,0,0,0,0,0,100,2.4,10,9,16.0,7620,9,999999999,209,0.2050,0,88,0.150,0.0,1.0 +1999,5,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.5,15.2,84,101700,0,0,381,0,0,0,0,0,0,0,170,2.8,10,9,16.0,7620,9,999999999,209,0.2050,0,88,0.150,0.0,1.0 +1994,6,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.7,14.8,83,101100,0,0,336,0,0,0,0,0,0,0,210,3.3,0,0,24.0,77777,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,14.5,86,101100,0,0,332,0,0,0,0,0,0,0,190,3.7,3,0,24.0,77777,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.3,14.2,83,101000,0,0,335,0,0,0,0,0,0,0,180,4.2,2,1,24.0,77777,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,100900,0,0,339,0,0,0,0,0,0,0,190,4.6,5,3,24.0,77777,9,999999999,270,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,100900,29,697,333,6,5,6,700,200,700,160,190,4.6,7,2,24.0,77777,9,999999999,270,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,100900,234,1328,343,90,143,65,9500,10000,7700,1240,200,4.1,4,3,19.2,77777,9,999999999,270,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,100900,476,1328,337,276,472,107,29300,44100,13500,2030,200,3.1,6,0,19.2,77777,9,999999999,270,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,100800,708,1328,378,267,133,196,29400,13800,22100,5000,200,4.1,8,8,19.2,3962,9,999999999,270,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,100800,915,1328,389,188,0,188,22400,0,22400,8950,210,3.1,10,10,19.2,2743,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,100800,1081,1328,392,701,283,470,75900,29900,51500,17400,230,4.6,8,8,16.0,3658,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,100700,1196,1328,393,699,445,299,76100,46600,34100,16200,230,5.2,6,6,19.2,3658,9,999999999,259,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,16.1,54,100600,1252,1328,394,874,675,237,93500,69000,28400,16400,240,6.7,3,3,19.2,77777,9,999999999,250,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,12.2,37,100600,1245,1328,397,924,765,207,96200,76600,24300,12620,280,7.2,2,2,24.0,77777,9,999999999,250,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.0,32,100600,1175,1328,398,837,690,226,89200,70400,26800,11110,290,7.2,3,3,24.0,77777,9,999999999,250,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,7.8,26,100600,1047,1328,397,717,531,298,76300,55300,32700,10440,300,8.8,2,2,24.0,77777,9,999999999,240,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,7.8,27,100600,870,1328,401,559,553,197,60500,57200,22900,5010,290,8.2,4,4,24.0,77777,9,999999999,240,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,8.9,31,100600,656,1328,397,351,386,160,37200,38600,18100,3340,300,6.7,4,4,24.0,77777,9,999999999,229,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,8.3,29,100600,420,1328,403,166,254,86,17800,22900,10500,1590,290,7.2,6,6,24.0,3353,9,999999999,229,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,7.8,29,100600,179,1328,392,58,104,44,6200,6200,5300,810,340,6.2,4,4,24.0,77777,9,999999999,229,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,9.4,39,100700,9,410,377,1,0,1,0,0,0,0,340,6.2,3,3,24.0,77777,9,999999999,220,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,100800,0,0,351,0,0,0,0,0,0,0,340,6.2,0,0,32.0,77777,9,999999999,220,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,9.4,49,100900,0,0,343,0,0,0,0,0,0,0,350,7.7,0,0,32.0,77777,9,999999999,220,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.9,52,100900,0,0,335,0,0,0,0,0,0,0,340,7.2,0,0,32.0,77777,9,999999999,209,0.2120,0,88,0.140,0.0,1.0 +1994,6,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,101000,0,0,337,0,0,0,0,0,0,0,340,5.7,1,1,32.0,77777,9,999999999,209,0.2120,0,88,0.140,0.0,1.0 +1994,6,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,6.7,52,101000,0,0,322,0,0,0,0,0,0,0,350,6.2,3,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.0,48,101100,0,0,328,0,0,0,0,0,0,0,350,6.7,2,2,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,3.3,45,101100,0,0,325,0,0,0,0,0,0,0,340,5.2,3,3,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.8,46,101100,0,0,318,0,0,0,0,0,0,0,330,5.7,2,2,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,101200,30,719,325,6,16,5,700,400,600,80,330,5.2,6,5,32.0,7620,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,101200,235,1328,328,82,148,55,8700,10400,6800,1010,320,5.7,7,6,32.0,7620,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,1.1,40,101200,477,1328,322,273,236,189,29300,22500,21200,4340,320,5.2,6,4,40.0,7620,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,1.7,38,101200,709,1328,325,459,646,114,48600,64500,14100,2540,290,5.2,2,2,40.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,2.8,41,101200,915,1328,321,633,678,166,67100,68800,19600,4550,270,5.2,1,1,40.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,2.2,36,101100,1082,1328,320,828,873,116,85500,87400,14200,3530,280,6.2,0,0,40.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,2.2,34,101100,1197,1328,324,931,896,124,96000,89800,14900,5360,270,7.2,0,0,40.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,3.9,36,101100,1252,1328,331,982,906,127,101000,90900,15100,7170,280,7.7,0,0,40.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,3.9,33,101000,1245,1328,337,975,904,127,100300,90700,15100,6880,300,5.7,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,3.9,28,101000,1176,1328,356,877,857,118,90500,85900,14300,4790,290,6.7,1,1,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,3.9,30,101000,1048,1328,365,704,601,229,73900,60800,25900,7800,300,7.2,5,5,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,5.0,33,101100,872,1328,369,465,271,287,50100,29000,31000,7740,320,6.7,6,6,32.0,1981,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,5.0,35,101100,658,1328,355,436,628,124,45400,61600,14900,2600,330,7.7,3,3,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.1,43,101300,423,1328,343,216,420,82,23200,37900,11100,1510,320,10.8,2,2,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,3.3,41,101400,182,1328,319,79,324,34,8000,21100,5100,610,320,8.8,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.3,42,101500,10,409,316,1,18,1,0,0,0,0,330,6.7,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,101600,0,0,314,0,0,0,0,0,0,0,330,5.7,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,101600,0,0,314,0,0,0,0,0,0,0,320,7.7,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,101700,0,0,312,0,0,0,0,0,0,0,330,6.2,0,0,32.0,77777,9,999999999,179,0.2130,0,88,0.140,0.0,1.0 +1994,6,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.0,53,101700,0,0,310,0,0,0,0,0,0,0,330,5.7,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,101700,0,0,309,0,0,0,0,0,0,0,330,5.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,101700,0,0,308,0,0,0,0,0,0,0,320,5.7,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,101700,0,0,306,0,0,0,0,0,0,0,320,4.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.0,57,101700,0,0,306,0,0,0,0,0,0,0,330,5.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,101700,31,719,306,6,13,6,800,500,800,120,330,4.1,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.1,57,101700,236,1328,312,100,268,52,10500,19000,7100,930,290,5.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.2,60,101800,478,1328,315,276,521,88,28600,48200,11200,1690,280,5.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.2,56,101900,710,1328,320,475,662,121,50100,65900,14800,2670,280,4.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.2,47,101900,916,1328,333,660,744,147,70500,75900,18100,4090,350,4.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,7.8,45,101800,1082,1328,339,812,793,165,84800,79600,19800,5640,310,2.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,7.2,41,101800,1197,1328,343,917,821,176,96600,82700,21900,8790,10,4.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.2,38,101700,1253,1328,348,968,833,181,102400,84000,22900,11900,350,3.6,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,8.3,39,101700,1246,1328,352,962,832,181,101700,83900,22800,11420,220,3.1,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.9,44,101600,1176,1328,348,898,816,174,94400,82200,21500,8010,220,6.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.9,44,101500,1049,1328,348,782,784,161,81500,78600,19200,5080,210,5.7,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.1,59,101500,873,1328,339,621,729,142,66200,74100,17400,3720,220,8.2,0,0,32.0,77777,9,999999999,189,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,101400,660,1328,333,431,637,114,45300,62800,14000,2420,210,7.7,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.6,63,101500,425,1328,332,233,477,81,24100,42700,10400,1510,210,6.7,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.7,72,101500,184,1328,328,70,193,43,7300,12000,5600,770,210,7.2,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101500,11,431,327,1,3,1,0,0,0,0,220,4.6,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.7,75,101500,0,0,325,0,0,0,0,0,0,0,180,2.1,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.9,60,101600,0,0,325,0,0,0,0,0,0,0,240,1.5,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,7.2,45,101600,0,0,335,0,0,0,0,0,0,0,330,4.1,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,3.9,36,101600,0,0,331,0,0,0,0,0,0,0,340,3.1,0,0,32.0,77777,9,999999999,200,0.2130,0,88,0.140,0.0,1.0 +1994,6,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.3,38,101600,0,0,323,0,0,0,0,0,0,0,20,2.1,0,0,32.0,77777,9,999999999,200,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,101600,0,0,314,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,200,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,2.8,41,101600,0,0,315,0,0,0,0,0,0,0,340,1.5,0,0,32.0,77777,9,999999999,200,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.3,44,101700,0,0,314,0,0,0,0,0,0,0,290,3.1,2,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.0,48,101700,32,741,318,6,0,6,700,0,700,230,310,2.6,3,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.9,40,101700,237,1327,330,85,92,68,9200,6800,8000,1450,300,2.6,4,1,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,3.3,32,101800,478,1327,336,247,321,131,26400,30800,15200,2650,310,4.1,3,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,3.9,30,101800,710,1327,344,439,477,184,46500,48200,20600,4020,340,4.1,2,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,3.9,28,101800,916,1327,349,624,564,235,66800,58500,26400,6450,360,3.1,3,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,2.8,24,101800,1082,1327,353,774,639,253,81100,64400,28400,9290,360,2.6,1,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,2.8,23,101700,1197,1327,359,889,689,267,93900,69800,30800,14210,260,1.5,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,4.4,26,101700,1253,1327,358,942,704,276,99700,71400,32200,19220,220,5.2,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,5.0,29,101700,1247,1327,356,935,702,275,99000,71200,32000,18430,200,5.2,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,5.0,29,101700,1177,1327,356,863,670,269,91000,67700,30700,13230,200,6.2,1,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,5.0,29,101700,1050,1327,360,725,580,266,78200,60500,30200,9340,190,6.2,5,1,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,8.9,43,101600,875,1327,362,549,463,244,58100,47800,26600,6360,200,5.2,7,2,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.0,49,101600,662,1327,361,402,373,215,42700,38600,23500,4910,200,6.2,9,3,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,9.4,50,101700,427,1327,358,182,167,128,19800,15500,14800,2890,190,5.7,9,4,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.0,56,101700,186,1327,350,60,23,56,6500,1700,6200,1320,190,5.2,8,3,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.9,54,101700,12,453,343,1,0,1,0,0,0,0,200,4.6,7,2,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.9,56,101800,0,0,344,0,0,0,0,0,0,0,210,3.6,5,3,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,101800,0,0,337,0,0,0,0,0,0,0,220,4.1,5,2,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.8,56,101900,0,0,340,0,0,0,0,0,0,0,210,2.1,9,4,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101900,0,0,339,0,0,0,0,0,0,0,250,3.1,7,2,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,101900,0,0,325,0,0,0,0,0,0,0,230,3.1,2,1,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101900,0,0,327,0,0,0,0,0,0,0,230,2.1,0,0,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,9.4,64,101900,0,0,333,0,0,0,0,0,0,0,0,0.0,2,2,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,101900,0,0,315,0,0,0,0,0,0,0,190,1.5,0,0,40.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,102000,32,741,315,6,10,6,800,400,700,120,170,1.5,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.6,70,102000,238,1327,324,99,244,55,10300,17400,7200,990,160,2.1,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.6,61,102000,479,1327,334,272,494,94,28100,45600,11700,1780,180,2.6,0,0,32.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.8,68,102000,710,1327,339,470,637,129,49300,63200,15400,2830,180,3.6,0,0,24.0,77777,9,999999999,209,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,102000,916,1327,343,652,711,160,69200,72300,19100,4410,200,4.6,1,0,24.0,77777,9,999999999,220,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,102000,1083,1327,363,738,597,250,77300,60200,28000,9210,190,5.2,6,3,20.8,77777,9,999999999,220,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.0,70,102100,1198,1327,361,860,611,308,89900,61300,34400,16240,200,5.2,7,2,19.2,77777,9,999999999,220,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.9,61,102000,1254,1327,369,896,569,358,96400,59500,40100,25840,190,5.7,8,3,19.2,77777,9,999999999,229,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.3,57,101900,1247,1327,367,886,641,283,93600,64900,32500,19030,180,6.2,9,2,20.8,77777,9,999999999,229,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.3,61,101900,1178,1327,368,711,395,359,75600,41200,38900,18400,170,5.7,10,4,20.8,77777,9,999999999,240,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,101900,1052,1327,376,585,294,352,63700,31800,38400,12240,170,5.7,10,7,20.8,3658,9,999999999,240,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101800,876,1327,396,222,0,222,26000,0,26000,10000,180,7.2,10,10,20.8,3962,9,999999999,250,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101900,664,1327,396,153,0,153,17800,0,17800,6550,170,6.2,10,10,20.8,3962,9,999999999,250,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.2,65,101800,429,1327,359,167,203,101,18000,18900,11900,1950,180,6.2,9,5,20.8,7620,9,999999999,259,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,101800,189,1327,360,50,25,47,5500,1800,5300,1150,180,6.2,9,6,20.8,7620,9,999999999,259,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.9,78,101800,12,453,355,1,0,1,0,0,0,0,170,5.7,8,5,20.8,7620,9,999999999,270,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.8,73,101800,0,0,361,0,0,0,0,0,0,0,180,6.2,7,7,20.8,1981,9,999999999,270,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.8,73,101800,0,0,367,0,0,0,0,0,0,0,180,5.2,8,8,20.8,1981,9,999999999,279,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,14.4,84,101800,0,0,384,0,0,0,0,0,0,0,190,3.1,10,10,20.8,1981,9,999999999,279,0.2140,0,88,0.140,0.0,1.0 +1994,6,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,101800,0,0,385,0,0,0,0,0,0,0,190,3.6,10,10,20.8,1829,9,999999999,279,0.2140,0,88,0.140,0.0,1.0 +1994,6,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,101700,0,0,385,0,0,0,0,0,0,0,190,3.6,10,10,20.8,1676,9,999999999,290,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101600,0,0,389,0,0,0,0,0,0,0,190,4.6,10,10,20.8,1676,9,999999999,290,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,101600,0,0,386,0,0,0,0,0,0,0,190,4.6,10,10,20.8,1524,9,999999999,300,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,101600,0,0,386,0,0,0,0,0,0,0,210,4.1,10,10,20.8,1219,9,999999999,300,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101600,33,741,378,8,1,8,1000,0,1000,300,190,5.2,9,9,17.6,1219,9,999999999,309,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,101500,239,1326,367,81,63,69,8700,4700,7900,1470,180,5.7,7,7,16.0,1524,9,999999999,309,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.1,87,101600,479,1326,373,257,178,193,27500,17000,21400,4440,190,5.2,8,8,16.0,1676,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.1,87,101600,711,1326,392,140,0,140,16500,0,16500,6310,190,4.6,10,10,12.8,1280,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,101500,917,1326,387,193,0,193,23000,0,23000,9160,200,4.6,10,10,11.2,457,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101500,1083,1326,392,234,0,234,28200,0,28200,11350,190,6.7,10,10,4.0,975,9,999999999,320,0.2150,0,88,0.140,10.0,1.0 +1994,6,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101500,1198,1326,394,263,0,263,31900,0,31900,12720,200,6.7,10,10,9.6,518,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101400,1254,1326,400,277,0,277,33700,0,33700,13380,190,7.2,10,10,11.2,579,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101200,1248,1326,396,275,0,275,33400,0,33400,13290,190,7.2,10,10,12.8,823,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101100,1179,1326,399,258,0,258,31200,0,31200,12480,200,8.8,10,10,14.4,884,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101000,1053,1326,376,406,152,285,45300,16300,32300,10090,190,10.3,8,8,16.0,853,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101000,877,1326,369,439,215,296,48000,22700,33000,8540,200,9.8,7,6,16.0,4267,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101000,665,1326,396,161,0,161,18600,0,18600,6820,190,8.8,10,10,14.4,4267,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101000,431,1326,394,72,0,72,8400,0,8400,2990,190,8.8,10,10,9.6,1433,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,100900,191,1326,391,29,0,29,3400,0,3400,1100,190,9.8,10,10,9.6,1219,9,999999999,329,0.2150,0,88,0.140,1.0,1.0 +1994,6,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,100900,13,475,391,1,0,1,0,0,0,0,200,6.7,10,10,12.8,2743,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100800,0,0,388,0,0,0,0,0,0,0,190,7.2,10,10,6.4,122,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100900,0,0,388,0,0,0,0,0,0,0,200,6.7,10,10,6.4,91,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,100900,0,0,392,0,0,0,0,0,0,0,210,8.8,10,10,6.4,1097,9,999999999,329,0.2150,0,88,0.140,6.0,1.0 +1994,6,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100700,0,0,388,0,0,0,0,0,0,0,180,7.7,10,10,6.4,91,9,999999999,329,0.2150,0,88,0.140,2.0,1.0 +1994,6,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100600,0,0,384,0,0,0,0,0,0,0,190,5.7,10,10,8.0,91,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,100600,0,0,380,0,0,0,0,0,0,0,200,4.1,10,10,4.8,91,9,999999999,329,0.2150,0,88,0.140,1.0,1.0 +1994,6,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100600,0,0,377,0,0,0,0,0,0,0,220,2.1,10,10,3.2,91,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100500,0,0,377,0,0,0,0,0,0,0,200,4.1,10,10,0.4,30,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100600,33,740,384,3,0,3,400,0,400,120,200,5.2,10,10,0.4,61,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100500,240,1326,384,48,0,48,5500,0,5500,1760,200,5.7,10,10,1.2,610,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100600,480,1326,377,182,24,173,20100,1900,19400,5860,210,4.1,9,9,1.2,61,9,999999999,340,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,18.3,100,100600,711,1326,395,133,0,133,15800,0,15800,6050,230,3.6,10,10,2.4,457,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,100500,917,1326,419,187,0,187,22300,0,22300,8930,230,4.6,10,10,4.0,701,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,100600,1083,1326,412,534,286,300,59000,31100,33600,10850,240,5.2,8,8,8.0,732,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,20.0,65,100600,1198,1326,408,802,582,276,84500,58800,31200,14750,280,5.7,4,4,11.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.9,57,100500,1254,1326,413,879,578,332,95300,60500,38000,24080,290,5.7,4,4,12.8,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.3,51,100500,1248,1326,418,807,466,368,86500,48700,40600,25850,290,4.6,4,4,16.0,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,17.8,46,100500,1180,1326,421,812,553,319,87500,57800,35900,16390,280,5.7,4,3,16.0,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.1,43,100400,1054,1326,411,709,561,263,76600,58600,30000,9310,260,5.2,4,2,20.8,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,14.4,39,100400,879,1326,413,522,348,291,56200,37300,31500,7920,290,5.7,3,3,20.8,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,13.9,36,100400,667,1326,411,372,389,176,39100,39000,19500,3740,290,4.6,2,2,20.8,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,15.0,43,100500,433,1326,408,197,225,124,21000,20900,14100,2500,360,6.7,3,3,19.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,14.4,45,100500,193,1326,401,56,29,52,6200,2100,5800,1260,360,6.2,5,4,19.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,100600,14,497,386,2,0,2,0,0,0,0,20,4.6,8,3,19.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,12.2,48,100700,0,0,369,0,0,0,0,0,0,0,20,5.2,4,1,19.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.9,57,100800,0,0,366,0,0,0,0,0,0,0,40,3.6,4,1,19.2,77777,9,999999999,329,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,100700,0,0,364,0,0,0,0,0,0,0,60,2.6,4,2,19.2,77777,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,100700,0,0,355,0,0,0,0,0,0,0,100,1.5,3,1,19.2,77777,9,999999999,320,0.2150,0,88,0.140,0.0,1.0 +1994,6,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,14.4,70,100700,0,0,361,0,0,0,0,0,0,0,0,0.0,3,3,19.2,77777,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.0,76,100700,0,0,355,0,0,0,0,0,0,0,0,0.0,2,2,19.2,77777,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,100700,0,0,339,0,0,0,0,0,0,0,0,0.0,3,0,16.0,77777,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,100700,0,0,366,0,0,0,0,0,0,0,310,2.1,6,6,16.0,3353,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,100700,33,762,396,6,0,6,700,0,700,230,0,0.0,10,10,11.2,3353,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,100800,240,1326,401,49,0,49,5600,0,5600,1790,30,2.6,10,10,11.2,4267,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,100800,480,1326,398,157,13,152,17500,1000,17200,5450,10,3.6,9,9,11.2,4267,9,999999999,320,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,14.4,59,100800,711,1326,415,135,0,135,16000,0,16000,6130,350,3.6,10,10,12.8,1676,9,999999999,309,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,14.4,61,100800,917,1326,411,236,0,236,27700,0,27700,10710,20,5.7,10,10,12.8,4267,9,999999999,309,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.0,60,100800,1083,1326,418,289,0,289,34200,0,34200,13370,350,2.6,10,10,12.8,4267,9,999999999,300,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,14.4,57,100800,1198,1326,406,778,361,451,84600,39200,49100,23100,20,2.6,9,9,12.8,1676,9,999999999,290,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,14.4,54,100800,1255,1326,412,527,99,432,58100,10200,48500,24050,360,2.6,9,9,17.6,1219,9,999999999,290,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,100900,1249,1326,405,743,355,409,82000,38600,45500,25490,360,5.7,8,8,19.2,4267,9,999999999,279,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,13.3,53,100900,1180,1326,390,741,373,408,81000,40500,44800,19510,350,6.2,7,7,19.2,4267,9,999999999,270,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.8,55,100900,1055,1326,398,438,85,370,48300,8700,41300,14610,30,5.7,9,9,24.0,4267,9,999999999,270,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.7,53,101000,880,1326,380,584,380,332,62400,40700,35300,9280,360,6.7,7,7,32.0,4267,9,999999999,259,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,101000,668,1326,381,334,211,227,36300,21600,25300,5670,30,4.6,8,8,32.0,4267,9,999999999,250,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.9,46,101100,435,1326,387,110,9,107,12500,500,12300,4080,50,4.1,9,9,32.0,4267,9,999999999,250,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,101100,195,1326,376,46,20,43,5000,1500,4800,1080,50,3.6,8,8,32.0,3962,9,999999999,240,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,9.4,54,101100,15,497,353,2,2,2,0,0,0,0,50,3.1,4,4,32.0,77777,9,999999999,229,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,101200,0,0,333,0,0,0,0,0,0,0,60,2.6,0,0,32.0,77777,9,999999999,229,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.9,56,101300,0,0,330,0,0,0,0,0,0,0,60,2.1,0,0,32.0,77777,9,999999999,220,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.3,50,101300,0,0,334,0,0,0,0,0,0,0,320,3.6,0,0,32.0,77777,9,999999999,220,0.2160,0,88,0.140,0.0,1.0 +1994,6,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.3,54,101400,0,0,329,0,0,0,0,0,0,0,360,4.6,0,0,32.0,77777,9,999999999,209,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.2,53,101400,0,0,323,0,0,0,0,0,0,0,360,4.1,0,0,32.0,77777,9,999999999,200,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,6.1,51,101400,0,0,319,0,0,0,0,0,0,0,10,5.2,0,0,32.0,77777,9,999999999,200,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.6,51,101400,0,0,316,0,0,0,0,0,0,0,360,5.2,0,0,32.0,77777,9,999999999,189,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,5.6,53,101500,0,0,314,0,0,0,0,0,0,0,10,4.6,0,0,32.0,77777,9,999999999,179,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.6,55,101500,34,762,311,6,2,6,700,100,700,160,10,5.2,0,0,32.0,77777,9,999999999,179,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.6,51,101600,241,1325,316,91,155,62,9500,11000,7600,1160,10,5.2,0,0,40.0,77777,9,999999999,170,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,5.0,46,101600,480,1325,320,256,386,116,27000,36100,13800,2220,20,5.7,1,0,40.0,77777,9,999999999,160,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.7,47,101600,711,1325,336,421,444,183,44600,44900,20500,4010,10,4.6,3,1,40.0,77777,9,999999999,170,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.1,42,101600,917,1325,340,606,589,198,63300,59200,22300,5320,340,2.6,2,1,32.0,77777,9,999999999,170,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,5.6,36,101500,1083,1325,348,785,676,232,82700,68500,26600,8650,280,2.1,3,1,32.0,77777,9,999999999,170,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.3,44,101500,1198,1325,351,844,661,246,89700,67300,28700,13300,220,5.2,2,1,32.0,77777,9,999999999,170,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,7.8,41,101500,1255,1325,353,881,639,276,93400,64800,31900,19580,210,5.7,3,1,32.0,77777,9,999999999,179,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.8,40,101400,1249,1325,356,895,666,267,95000,67700,31100,18340,230,5.7,2,1,32.0,77777,9,999999999,179,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.9,46,101400,1181,1325,352,874,703,247,92600,71400,28800,12470,220,6.2,3,1,32.0,77777,9,999999999,179,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.0,49,101300,1056,1325,353,729,610,243,76300,61500,27300,8410,210,6.2,4,1,32.0,77777,9,999999999,189,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.6,49,101300,881,1325,356,575,556,205,62000,57600,23700,5320,210,5.7,4,1,32.0,77777,9,999999999,189,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,12.8,59,101300,670,1325,356,401,456,171,42500,45700,19300,3630,210,6.7,4,1,32.0,77777,9,999999999,189,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.8,63,101300,436,1325,351,210,307,108,21900,27900,12700,2040,210,5.7,3,1,32.0,77777,9,999999999,189,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,101300,197,1325,340,69,100,54,7500,6800,6500,1140,200,5.2,2,0,32.0,77777,9,999999999,200,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,101300,15,519,333,2,0,2,0,0,0,0,200,4.1,0,0,32.0,77777,9,999999999,200,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,14.4,80,101400,0,0,336,0,0,0,0,0,0,0,200,3.6,0,0,32.0,77777,9,999999999,200,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,101500,0,0,337,0,0,0,0,0,0,0,200,3.1,0,0,32.0,77777,9,999999999,209,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.8,75,101500,0,0,331,0,0,0,0,0,0,0,220,3.1,0,0,32.0,77777,9,999999999,209,0.2160,0,88,0.140,0.0,1.0 +1994,6,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.8,70,101500,0,0,336,0,0,0,0,0,0,0,250,3.1,0,0,32.0,77777,9,999999999,209,0.2160,0,88,0.140,0.0,1.0 +1994,6,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,101500,0,0,337,0,0,0,0,0,0,0,280,2.1,0,0,32.0,77777,9,999999999,209,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.7,65,101500,0,0,335,0,0,0,0,0,0,0,300,2.6,0,0,32.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.3,78,101400,0,0,332,0,0,0,0,0,0,0,280,3.1,0,0,32.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,101500,0,0,326,0,0,0,0,0,0,0,270,2.6,2,0,32.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.3,78,101600,34,762,338,8,0,8,1000,0,1000,300,290,2.6,8,1,24.0,77777,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,101700,241,1325,341,90,66,78,9800,5300,8900,1850,80,2.1,9,2,24.0,77777,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.2,59,101700,481,1325,361,215,197,143,23400,19000,16500,3290,10,4.1,9,3,24.0,77777,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,101800,711,1325,362,404,377,202,43700,39500,22400,4630,40,5.2,7,2,24.0,77777,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,9.4,41,101800,917,1325,371,599,436,297,62500,45000,31300,8350,30,5.7,8,3,24.0,77777,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,8.9,37,101800,1083,1325,373,733,490,332,77600,51000,35800,12810,70,3.6,7,2,24.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,8.9,36,101800,1198,1325,379,811,450,404,85600,46900,43100,22630,50,4.6,8,3,32.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,10.0,37,101800,1255,1325,380,857,477,404,91000,49800,43800,29780,180,6.2,7,2,32.0,77777,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,8.3,35,101700,1249,1325,379,892,523,398,94900,54600,43300,28380,170,6.2,8,3,32.0,77777,9,999999999,209,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,8.3,38,101800,1182,1325,366,854,545,368,90800,56900,40000,19240,160,7.2,7,2,32.0,77777,9,999999999,209,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.7,35,101700,1057,1325,366,705,480,322,74600,50000,34700,11650,160,7.2,8,3,32.0,77777,9,999999999,209,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,8.9,41,101800,882,1325,371,464,338,238,50700,36300,26500,6290,180,6.2,9,4,24.0,77777,9,999999999,200,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.0,49,101800,671,1325,364,321,237,201,34500,24600,22000,4540,180,5.7,8,4,24.0,77777,9,999999999,200,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,10.6,53,101800,438,1325,356,200,215,129,21200,20100,14600,2620,170,5.2,7,2,24.0,77777,9,999999999,200,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,101800,199,1325,356,65,51,57,7100,3800,6500,1360,180,5.2,6,3,24.0,77777,9,999999999,189,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.3,75,101900,16,519,346,2,0,2,0,0,0,0,190,3.6,5,2,24.0,77777,9,999999999,189,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,14.4,80,101900,0,0,350,0,0,0,0,0,0,0,170,4.1,5,3,24.0,77777,9,999999999,189,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,14.4,80,101900,0,0,347,0,0,0,0,0,0,0,170,3.6,6,2,24.0,77777,9,999999999,179,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.9,78,102000,0,0,350,0,0,0,0,0,0,0,170,3.6,8,3,24.0,77777,9,999999999,179,0.2170,0,88,0.140,0.0,1.0 +1994,6,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,102000,0,0,342,0,0,0,0,0,0,0,130,2.1,7,2,24.0,77777,9,999999999,179,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,102000,0,0,348,0,0,0,0,0,0,0,120,3.1,7,4,24.0,7620,9,999999999,170,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,102000,0,0,352,0,0,0,0,0,0,0,110,2.1,8,5,20.8,7620,9,999999999,170,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,102000,0,0,339,0,0,0,0,0,0,0,100,2.6,7,2,20.8,77777,9,999999999,160,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,102000,0,0,343,0,0,0,0,0,0,0,110,2.1,8,3,16.0,77777,9,999999999,160,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,102000,34,762,343,7,2,7,900,0,900,270,0,0.0,7,4,9.6,7620,9,999999999,160,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,102100,241,1325,358,94,102,75,10100,7600,8700,1600,130,3.6,8,5,9.6,7620,9,999999999,150,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.1,87,102100,481,1325,367,183,88,151,20100,8400,17000,4090,130,3.6,9,7,12.8,7620,9,999999999,150,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,102100,711,1325,382,275,100,221,30200,10000,24800,6850,120,3.1,10,8,19.2,7620,9,999999999,160,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,102200,917,1325,377,458,253,282,49700,27200,30800,7920,130,4.1,7,7,24.0,7620,9,999999999,170,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,102200,1083,1325,385,516,298,273,57500,32400,31000,9790,150,5.7,9,8,24.0,7620,9,999999999,179,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,102200,1198,1325,379,576,301,303,64500,32800,34700,15000,140,5.7,7,7,24.0,3048,9,999999999,189,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,102200,1255,1325,399,345,0,345,41300,0,41300,15840,150,5.7,10,10,24.0,3048,9,999999999,200,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,102100,1250,1325,391,304,118,192,35400,12900,23100,11580,150,3.6,9,9,24.0,3048,9,999999999,209,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,102100,1182,1325,396,323,0,323,38500,0,38500,14860,140,5.7,10,10,24.0,3048,9,999999999,220,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,102100,1057,1325,397,227,0,227,27300,0,27300,11010,150,4.6,10,10,19.2,2896,9,999999999,229,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,102100,884,1325,395,228,0,228,26700,0,26700,10250,150,4.6,10,10,20.8,3353,9,999999999,240,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,102000,673,1325,399,161,0,161,18700,0,18700,6860,140,5.2,10,10,19.2,3353,9,999999999,240,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,102000,440,1325,394,72,0,72,8500,0,8500,3010,140,5.2,10,10,19.2,2743,9,999999999,250,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,102000,201,1325,397,31,0,31,3600,0,3600,1170,140,5.7,10,10,16.0,2591,9,999999999,259,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,102000,17,541,393,1,0,1,0,0,0,0,160,6.7,10,10,16.0,2134,9,999999999,270,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,102000,0,0,372,0,0,0,0,0,0,0,160,7.2,7,7,16.0,3353,9,999999999,279,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,102000,0,0,378,0,0,0,0,0,0,0,160,6.2,8,8,17.6,3353,9,999999999,290,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,102000,0,0,397,0,0,0,0,0,0,0,170,6.2,10,10,19.2,2591,9,999999999,300,0.2170,0,88,0.140,0.0,1.0 +1994,6,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101900,0,0,397,0,0,0,0,0,0,0,180,6.7,10,10,20.8,2438,9,999999999,309,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101900,0,0,397,0,0,0,0,0,0,0,180,7.2,10,10,20.8,2286,9,999999999,320,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101900,0,0,397,0,0,0,0,0,0,0,180,5.7,10,10,20.8,2286,9,999999999,329,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101900,0,0,396,0,0,0,0,0,0,0,180,5.7,10,10,24.0,1829,9,999999999,340,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101900,0,0,397,0,0,0,0,0,0,0,190,5.7,10,10,24.0,945,9,999999999,350,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101900,34,762,394,5,0,5,600,0,600,200,180,6.7,10,10,19.2,1676,9,999999999,359,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101900,241,1325,397,36,0,36,4200,0,4200,1400,200,6.2,10,10,19.2,1372,9,999999999,370,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101900,480,1325,394,81,0,81,9500,0,9500,3430,180,5.7,10,10,20.8,1524,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,101900,711,1325,400,139,0,139,16400,0,16400,6280,200,5.7,10,10,20.8,1524,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101900,916,1325,400,191,0,191,22800,0,22800,9090,180,6.2,10,10,20.8,1524,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101900,1083,1325,403,233,0,233,28100,0,28100,11310,190,7.7,10,10,20.8,1524,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,101900,1198,1325,406,262,0,262,31800,0,31800,12680,190,6.7,10,10,20.8,1829,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101900,1255,1325,390,510,232,290,57700,25300,33700,18390,180,8.2,7,7,19.2,1829,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101800,1250,1325,392,323,43,281,35700,4400,31600,16180,180,8.8,9,8,19.2,1829,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,101800,1183,1325,411,258,0,258,31300,0,31300,12500,190,8.8,10,10,16.0,1829,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,14.4,63,101700,1058,1325,397,479,114,387,52400,12100,42700,13860,180,8.2,10,9,19.2,1829,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101700,885,1325,396,407,88,347,44600,9000,38600,11500,180,7.7,10,9,19.2,4267,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101600,674,1325,390,250,179,159,27300,18700,17800,3450,190,8.2,8,8,20.8,4267,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,101700,441,1325,404,72,0,72,8500,0,8500,3020,190,7.7,10,10,14.4,1981,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101700,202,1325,386,46,26,42,5000,1900,4800,1070,180,7.2,8,8,14.4,4267,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101700,17,541,401,2,0,2,0,0,0,0,190,6.7,10,10,16.0,1524,9,999999999,379,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101800,0,0,401,0,0,0,0,0,0,0,190,6.7,10,10,12.8,1219,9,999999999,390,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101800,0,0,401,0,0,0,0,0,0,0,190,6.2,10,10,11.2,1128,9,999999999,390,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.3,96,101800,0,0,398,0,0,0,0,0,0,0,200,5.7,10,10,11.2,122,9,999999999,390,0.2170,0,88,0.140,0.0,1.0 +1994,6,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.3,96,101800,0,0,398,0,0,0,0,0,0,0,200,5.2,10,10,9.6,122,9,999999999,390,0.2170,0,88,0.140,0.0,1.0 +1994,6,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101800,0,0,394,0,0,0,0,0,0,0,210,5.2,10,10,9.6,91,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,101800,0,0,356,0,0,0,0,0,0,0,210,4.6,4,4,9.6,77777,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101800,0,0,348,0,0,0,0,0,0,0,200,4.6,1,1,11.2,77777,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101800,0,0,392,0,0,0,0,0,0,0,180,3.1,10,10,9.6,3048,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101900,35,761,392,6,0,6,700,0,700,230,210,2.6,10,10,4.0,3353,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101900,241,1324,392,31,0,31,3700,0,3700,1230,170,2.1,10,10,0.6,61,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101900,480,1324,383,195,32,184,21500,2600,20600,6060,200,3.6,9,9,2.4,3962,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,102000,711,1324,404,166,0,166,19300,0,19300,7220,200,3.1,10,10,9.6,3962,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102000,916,1324,408,156,0,156,18900,0,18900,7680,190,3.6,10,10,9.6,244,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102000,1082,1324,411,193,0,193,23600,0,23600,9690,180,4.1,10,10,11.2,274,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102000,1198,1324,411,218,0,218,26800,0,26800,10910,190,5.2,10,10,11.2,274,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101900,1255,1324,425,230,0,230,28400,0,28400,11490,190,4.1,10,10,12.8,274,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101900,1250,1324,380,931,727,244,99500,74200,29300,17080,180,4.6,2,2,14.4,77777,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101900,1183,1324,384,852,649,272,89800,65600,31000,13810,200,5.2,3,3,14.4,77777,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101800,1059,1324,374,737,671,200,78300,68400,23500,7150,180,7.2,1,1,16.0,77777,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101700,886,1324,368,608,648,175,64000,65400,20200,4560,190,7.7,0,0,16.0,77777,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101700,675,1324,372,405,496,152,43400,49900,17900,3200,190,8.2,1,1,17.6,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101600,443,1324,359,230,394,98,24400,36100,12300,1830,190,7.7,0,0,17.6,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101600,204,1324,366,72,103,56,7800,7100,6700,1190,190,7.7,6,2,19.2,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101600,18,563,358,3,1,3,0,0,0,0,190,7.7,6,1,16.0,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.9,97,101700,0,0,360,0,0,0,0,0,0,0,190,6.7,7,2,16.0,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.9,97,101700,0,0,363,0,0,0,0,0,0,0,190,7.2,6,3,16.0,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.9,97,101700,0,0,402,0,0,0,0,0,0,0,200,5.7,10,10,12.8,122,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101700,0,0,361,0,0,0,0,0,0,0,200,6.2,5,3,11.2,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.3,96,101700,0,0,398,0,0,0,0,0,0,0,200,5.7,10,10,1.6,61,9,999999999,340,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,18.3,100,101700,0,0,395,0,0,0,0,0,0,0,200,5.2,10,10,0.8,61,9,999999999,340,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101700,0,0,399,0,0,0,0,0,0,0,320,2.1,10,10,6.4,91,9,999999999,340,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101700,0,0,399,0,0,0,0,0,0,0,160,4.1,10,10,9.6,244,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.3,96,101700,35,761,398,5,0,5,600,0,600,200,180,3.1,10,10,8.0,457,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.9,97,101700,241,1324,376,63,9,61,7000,300,7000,2100,190,5.2,7,7,8.0,3962,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101700,480,1324,386,199,66,175,21800,6300,19500,4560,190,5.2,8,8,8.0,3962,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101700,710,1324,408,133,0,133,15800,0,15800,6060,190,5.2,10,10,6.4,457,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,916,1324,399,346,150,242,38500,16000,27400,7240,200,4.6,8,8,9.6,3962,9,999999999,329,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,19.4,84,101700,1082,1324,374,724,560,266,78500,58500,30500,10120,190,5.2,7,2,9.6,77777,9,999999999,340,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101700,1198,1324,387,884,617,325,95300,64500,36800,18060,190,4.6,4,3,9.6,77777,9,999999999,340,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101700,1255,1324,375,846,614,263,89900,62500,30600,18910,190,5.2,2,1,9.6,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101600,1251,1324,387,757,477,306,82700,50000,35400,21900,190,5.7,3,3,11.2,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101600,1184,1324,375,831,638,260,87800,64700,29800,13290,190,6.7,2,1,11.2,77777,9,999999999,350,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101600,1060,1324,387,738,627,236,77500,63400,26700,8300,190,6.2,3,3,12.8,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,101600,887,1324,384,559,474,241,59300,49000,26500,6390,190,7.7,7,2,12.8,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,101500,677,1324,390,333,208,226,36200,21400,25300,5670,200,7.2,8,6,12.8,7620,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,101600,444,1324,387,168,171,110,18000,16100,12600,2160,190,6.7,7,5,12.8,7620,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,19.4,84,101600,205,1324,381,66,32,61,7200,2400,6800,1450,190,6.2,8,4,12.8,77777,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101600,19,563,372,3,0,3,0,0,0,0,210,3.1,7,2,12.8,77777,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101700,0,0,391,0,0,0,0,0,0,0,200,2.6,10,8,16.0,7620,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101700,0,0,383,0,0,0,0,0,0,0,220,2.6,10,7,16.0,7620,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101700,0,0,391,0,0,0,0,0,0,0,200,3.6,10,8,16.0,7620,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101700,0,0,385,0,0,0,0,0,0,0,180,3.1,10,7,16.0,7620,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101800,0,0,396,0,0,0,0,0,0,0,50,2.6,10,9,14.4,7620,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101800,0,0,379,0,0,0,0,0,0,0,90,2.6,8,3,16.0,77777,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101800,0,0,370,0,0,0,0,0,0,0,190,3.1,5,1,16.0,77777,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,101900,0,0,357,0,0,0,0,0,0,0,80,2.6,0,0,12.8,77777,9,999999999,409,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,102000,34,761,361,7,0,7,800,0,800,270,100,2.6,4,1,9.6,77777,9,999999999,409,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,102100,241,1324,400,92,6,91,10000,300,9900,2640,140,2.6,10,9,9.6,2896,9,999999999,419,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,102100,480,1324,384,203,124,158,22000,11900,17700,3630,220,2.6,6,6,9.6,2743,9,999999999,419,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,102100,710,1324,391,391,370,193,42400,38800,21600,4390,280,2.6,4,3,9.6,77777,9,999999999,419,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,102100,915,1324,391,596,545,219,64200,56500,25100,5990,230,2.6,2,1,9.6,77777,9,999999999,409,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,102100,1082,1324,387,769,636,249,80600,64200,28100,9210,210,3.1,0,0,9.6,77777,9,999999999,409,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,102000,1198,1324,409,800,564,289,87300,59100,33700,15990,220,4.1,2,2,9.6,77777,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,22.8,61,102000,1255,1324,433,864,563,329,93700,59000,37700,24310,210,5.2,4,4,9.6,77777,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.2,72,102000,1251,1324,426,769,357,431,84400,38800,47700,27520,160,3.1,7,7,9.6,1372,9,999999999,400,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.2,84,102000,1184,1324,417,640,190,470,70000,20200,51900,21960,140,3.6,8,8,9.6,1494,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,102000,1060,1324,418,564,244,368,61200,26400,40000,13140,180,6.2,7,7,9.6,1676,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,102000,888,1324,408,482,382,226,51600,39500,25000,5970,160,5.2,6,6,9.6,3658,9,999999999,390,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,102000,678,1324,397,395,403,188,41400,40400,20600,4050,150,4.6,2,2,9.6,77777,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,102100,445,1324,419,149,40,136,16400,3700,15100,3640,140,4.1,8,8,9.6,1676,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,102100,207,1324,421,55,5,54,6100,100,6100,1810,100,3.1,10,9,9.6,2743,9,999999999,379,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,102100,19,585,409,3,0,3,0,0,0,0,110,3.1,8,8,9.6,1676,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,102100,0,0,382,0,0,0,0,0,0,0,80,3.6,2,2,11.2,77777,9,999999999,370,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,102100,0,0,410,0,0,0,0,0,0,0,90,4.1,10,8,9.6,1676,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,102200,0,0,392,0,0,0,0,0,0,0,90,2.6,5,5,8.0,77777,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,102200,0,0,410,0,0,0,0,0,0,0,120,4.6,10,10,0.8,61,9,999999999,359,0.2180,0,88,0.140,0.0,1.0 +1994,6,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,102200,0,0,410,0,0,0,0,0,0,0,100,3.1,10,10,0.8,61,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,102200,0,0,410,0,0,0,0,0,0,0,90,4.1,10,10,0.8,61,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,102200,0,0,410,0,0,0,0,0,0,0,100,2.6,10,10,0.8,61,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,20.0,100,102200,0,0,406,0,0,0,0,0,0,0,90,3.1,10,10,0.8,61,9,999999999,340,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,102300,34,761,410,3,0,3,400,0,400,120,40,3.6,10,10,0.8,91,9,999999999,340,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,20.0,100,102300,240,1324,406,24,0,24,2900,0,2900,980,50,3.1,10,10,0.8,91,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,102300,479,1324,410,59,0,59,7100,0,7100,2620,40,3.1,10,10,1.6,122,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,102400,709,1324,410,99,0,99,12000,0,12000,4720,30,3.6,10,10,4.0,122,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,19.4,84,102300,915,1324,418,162,0,162,19600,0,19600,7930,50,3.6,10,10,8.0,274,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,102300,1081,1324,424,197,0,197,24000,0,24000,9850,80,2.6,10,10,9.6,366,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,102300,1197,1324,428,221,0,221,27100,0,27100,11030,70,3.1,10,10,9.6,396,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,102300,1255,1324,428,278,0,278,33800,0,33800,13420,130,4.1,10,10,9.6,488,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,102300,1251,1324,399,773,545,257,82300,55500,29700,18070,120,4.1,6,6,9.6,549,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,102200,1185,1324,394,853,722,206,91600,74000,25200,10750,140,5.7,4,2,9.6,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,102200,1061,1324,385,752,758,144,79600,76500,18100,4880,150,5.7,3,1,9.6,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.9,69,102100,889,1324,383,614,731,122,64400,73200,15100,3070,160,5.2,4,1,9.6,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,102100,679,1324,381,409,528,138,44300,53200,16900,2880,140,5.2,4,3,9.6,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,102100,447,1324,415,64,0,64,7600,0,7600,2740,130,3.6,10,10,9.6,213,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102100,208,1324,411,24,0,24,2900,0,2900,950,140,3.6,10,10,9.6,213,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102100,20,585,408,2,0,2,0,0,0,0,150,2.6,10,10,9.6,213,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,102200,0,0,412,0,0,0,0,0,0,0,60,2.1,10,10,9.6,183,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102200,0,0,411,0,0,0,0,0,0,0,120,2.6,10,10,9.6,213,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102100,0,0,408,0,0,0,0,0,0,0,140,2.1,10,10,9.6,183,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,102100,0,0,405,0,0,0,0,0,0,0,120,2.1,10,10,8.0,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102100,0,0,408,0,0,0,0,0,0,0,120,2.6,10,10,8.0,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.9,97,102100,0,0,402,0,0,0,0,0,0,0,180,2.6,10,10,6.4,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,102100,0,0,399,0,0,0,0,0,0,0,150,1.5,10,10,4.0,91,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,102100,0,0,405,0,0,0,0,0,0,0,120,1.5,10,10,8.0,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,102100,34,761,405,3,0,3,400,0,400,120,0,0.0,10,10,6.4,122,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,102100,240,1323,405,33,0,33,3900,0,3900,1300,0,0.0,10,10,8.0,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102100,479,1323,408,73,0,73,8600,0,8600,3140,180,2.1,10,10,6.4,244,9,999999999,300,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102100,709,1323,408,93,0,93,11300,0,11300,4460,0,0.0,10,10,6.4,152,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102100,914,1323,411,156,0,156,18900,0,18900,7680,200,3.6,10,10,8.0,244,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.9,82,102100,1081,1323,417,193,0,193,23600,0,23600,9680,220,3.1,10,10,9.6,274,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,102100,1197,1323,396,703,362,375,77500,39400,41800,18930,220,3.1,6,6,12.8,305,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,102000,1255,1323,373,938,712,263,99900,72400,31000,18970,240,3.1,0,0,14.4,77777,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,102000,1251,1323,367,935,711,262,99400,72300,30900,18440,180,5.2,0,0,12.8,77777,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,102000,1185,1323,367,874,693,253,92600,70400,29400,13050,210,5.2,0,0,14.4,77777,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,102000,1062,1323,367,756,645,238,79300,65200,27000,8420,190,5.7,1,0,16.0,77777,9,999999999,309,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101900,889,1323,368,602,568,220,64600,58800,25000,5810,200,6.2,3,0,16.0,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,101900,680,1323,365,415,491,163,44200,49400,18800,3460,190,4.6,0,0,14.4,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,19.4,84,101900,448,1323,362,224,331,112,23500,30400,13200,2130,190,5.2,0,0,14.4,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101800,209,1323,360,74,95,59,8000,6600,7000,1250,190,4.6,2,0,14.4,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101900,20,584,361,3,0,3,0,0,0,0,200,3.6,3,1,11.2,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,101900,0,0,369,0,0,0,0,0,0,0,190,4.1,2,2,11.2,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101900,0,0,361,0,0,0,0,0,0,0,190,4.6,1,1,9.6,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101900,0,0,380,0,0,0,0,0,0,0,200,4.1,7,7,8.0,122,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101900,0,0,367,0,0,0,0,0,0,0,250,2.1,3,3,6.4,77777,9,999999999,320,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101900,0,0,366,0,0,0,0,0,0,0,210,2.6,3,3,6.4,77777,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101800,0,0,354,0,0,0,0,0,0,0,240,3.1,0,0,6.4,77777,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,101800,0,0,370,0,0,0,0,0,0,0,230,3.1,3,3,4.8,77777,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,101800,0,0,367,0,0,0,0,0,0,0,230,2.6,2,2,3.2,77777,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,101800,34,761,377,7,11,6,800,400,700,120,230,4.1,5,5,1.6,77777,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,101800,240,1323,410,23,0,23,2800,0,2800,950,240,4.6,10,10,0.2,30,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,101900,478,1323,410,58,0,58,7000,0,7000,2580,250,4.6,10,10,0.1,30,9,999999999,329,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,21.1,100,101900,708,1323,414,98,0,98,11900,0,11900,4670,260,4.1,10,10,0.1,30,9,999999999,340,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101900,914,1323,424,134,0,134,16400,0,16400,6740,240,3.6,10,10,1.0,61,9,999999999,340,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101800,1080,1323,405,612,520,187,65500,53200,21900,7100,250,5.7,4,4,1.6,77777,9,999999999,340,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,101800,1197,1323,408,864,698,233,92200,71200,27700,12680,230,4.6,3,3,3.2,77777,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101700,1255,1323,400,908,776,171,96700,78500,22000,11780,200,5.7,2,2,4.8,77777,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101700,1251,1323,403,879,755,164,93900,76500,21400,11090,190,4.1,3,3,4.8,77777,9,999999999,350,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101700,1185,1323,396,722,601,183,78200,61900,22600,9660,200,5.7,2,2,4.8,77777,9,999999999,359,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,101600,1062,1323,391,730,747,130,78100,75700,17200,4540,190,6.7,1,1,8.0,77777,9,999999999,359,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.6,74,101500,890,1323,381,628,757,119,66200,75900,15000,3030,200,6.7,1,0,11.2,77777,9,999999999,359,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101500,681,1323,394,423,534,148,45500,53800,17700,3120,200,6.7,4,3,12.8,77777,9,999999999,359,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101500,449,1323,388,236,424,92,25200,39000,12000,1710,210,6.2,6,4,14.4,7620,9,999999999,370,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101500,210,1323,392,70,40,63,7600,3000,7100,1500,180,3.6,10,6,14.4,7620,9,999999999,370,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101500,21,606,382,4,3,4,0,0,0,0,210,3.1,10,4,12.8,77777,9,999999999,370,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101500,0,0,399,0,0,0,0,0,0,0,200,3.1,10,8,11.2,7620,9,999999999,379,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,397,0,0,0,0,0,0,0,200,2.1,7,7,11.2,7620,9,999999999,379,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,403,0,0,0,0,0,0,0,230,3.1,8,8,11.2,7010,9,999999999,379,0.2190,0,88,0.140,0.0,1.0 +1994,6,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101400,0,0,421,0,0,0,0,0,0,0,240,3.6,9,9,11.2,7010,9,999999999,390,0.2190,0,88,0.140,0.0,1.0 +1994,6,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101400,0,0,404,0,0,0,0,0,0,0,240,3.1,9,7,11.2,7010,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101400,0,0,427,0,0,0,0,0,0,0,240,4.6,10,10,11.2,7010,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101400,0,0,404,0,0,0,0,0,0,0,240,4.6,9,7,11.2,7010,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101400,0,0,389,0,0,0,0,0,0,0,240,4.1,8,4,11.2,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101400,34,761,385,8,12,8,1000,500,1000,160,270,3.6,5,2,9.6,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.2,84,101400,239,1323,396,108,253,62,11100,18000,7900,1130,280,3.6,5,3,8.0,77777,9,999999999,409,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,101400,477,1323,404,210,282,108,22800,27200,12900,2110,280,3.6,6,2,8.0,77777,9,999999999,409,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.8,68,101400,708,1323,420,371,392,161,39700,39700,18500,3480,270,3.1,5,3,9.6,77777,9,999999999,409,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,21.7,54,101400,913,1323,430,616,635,178,64900,64200,20500,4840,280,3.6,4,2,9.6,77777,9,999999999,409,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,21.1,49,101300,1080,1323,430,702,656,166,75700,67500,20500,6360,280,4.6,1,1,12.8,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,36.1,18.3,35,101300,1196,1323,442,861,773,162,91600,78200,20800,8340,320,4.6,1,1,19.2,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,36.7,19.4,36,101300,1255,1323,447,914,801,155,98500,81400,21100,10810,350,5.2,1,1,20.8,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,35.0,19.4,40,101300,1251,1323,451,917,742,215,98900,76200,26700,15330,10,5.7,5,4,19.2,77777,9,999999999,400,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,34.4,19.4,41,101300,1186,1323,451,890,700,262,94000,70900,30300,13530,360,4.1,5,5,19.2,77777,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,18.9,43,101300,1063,1323,453,652,285,423,70100,30800,45300,15520,360,6.2,7,7,19.2,1829,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,20.0,52,101300,891,1323,449,396,209,255,43200,22500,28000,6870,280,3.6,8,8,19.2,1829,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,21.1,49,101300,682,1323,444,380,433,156,40600,43600,18100,3300,50,6.7,4,4,19.2,77777,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,19.4,47,101300,450,1323,432,247,373,120,25700,34200,14000,2300,40,5.7,3,3,19.2,77777,9,999999999,390,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,18.3,45,101400,212,1323,438,63,97,47,6700,6400,5700,850,50,5.7,7,6,24.0,2591,9,999999999,379,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,18.3,50,101500,21,606,440,4,1,4,0,0,0,0,50,7.2,8,8,24.0,1981,9,999999999,379,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,16.7,48,101600,0,0,441,0,0,0,0,0,0,0,50,6.7,9,9,24.0,2438,9,999999999,379,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,16.1,49,101600,0,0,424,0,0,0,0,0,0,0,70,4.6,8,8,24.0,2286,9,999999999,379,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101700,0,0,414,0,0,0,0,0,0,0,80,5.2,7,7,20.8,2286,9,999999999,379,0.2200,0,88,0.140,0.0,1.0 +1994,6,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101700,0,0,390,0,0,0,0,0,0,0,110,3.1,8,3,20.8,77777,9,999999999,370,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101700,0,0,390,0,0,0,0,0,0,0,70,3.1,8,4,24.0,7620,9,999999999,370,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.8,69,101800,0,0,399,0,0,0,0,0,0,0,70,3.6,7,7,24.0,2438,9,999999999,370,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101800,0,0,377,0,0,0,0,0,0,0,40,4.1,3,3,24.0,77777,9,999999999,370,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101800,0,0,361,0,0,0,0,0,0,0,40,4.1,6,1,24.0,77777,9,999999999,370,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101800,33,761,367,7,7,7,800,400,800,180,40,4.1,4,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101900,238,1323,369,81,112,61,8900,8400,7400,1300,50,4.1,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101900,477,1323,379,250,324,133,26700,31100,15400,2700,50,4.6,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,101900,707,1323,387,430,497,164,46000,50300,19000,3540,40,3.6,9,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101900,912,1323,399,608,501,261,64200,51800,28400,7220,100,2.1,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.7,53,102000,1079,1323,397,758,622,250,79400,62700,28100,9210,100,3.6,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,14.4,47,101900,1196,1323,395,785,504,328,84500,52700,36700,18180,140,5.2,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,12.2,39,101900,1255,1323,391,869,626,275,92200,63500,31800,19790,140,6.2,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,12.8,42,101900,1251,1323,393,829,607,255,88400,61800,29800,18050,140,5.7,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,12.2,39,101900,1186,1323,391,785,553,289,85600,57900,33600,15310,140,5.7,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,11.1,37,101900,1063,1323,393,675,524,253,73300,54800,29200,9190,150,5.2,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,101800,892,1323,382,587,534,226,62700,55300,25400,6000,150,5.2,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,11.1,42,101800,683,1323,382,414,442,186,43500,44400,20600,4010,140,5.7,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,12.8,50,101700,451,1323,375,231,349,112,24200,32100,13300,2130,150,5.7,7,2,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.9,57,101700,212,1323,374,82,89,68,8900,6200,7900,1440,150,4.6,8,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,101700,22,606,358,4,4,4,0,0,0,0,150,4.1,6,1,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,101700,0,0,358,0,0,0,0,0,0,0,180,3.6,3,1,32.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101700,0,0,357,0,0,0,0,0,0,0,180,3.1,2,1,32.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,101700,0,0,352,0,0,0,0,0,0,0,180,3.1,3,0,32.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101700,0,0,371,0,0,0,0,0,0,0,190,3.6,7,4,32.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101600,0,0,372,0,0,0,0,0,0,0,200,3.6,6,4,24.0,7620,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101600,0,0,366,0,0,0,0,0,0,0,190,4.1,5,3,24.0,77777,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101500,0,0,369,0,0,0,0,0,0,0,190,4.1,6,4,20.8,7620,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101500,0,0,372,0,0,0,0,0,0,0,220,3.1,8,5,20.8,7620,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101500,33,760,380,9,1,8,1000,0,1000,300,220,4.6,10,7,19.2,7620,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101500,237,1322,409,26,0,26,3100,0,3100,1050,210,4.1,10,10,16.0,152,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,101400,476,1322,412,55,0,55,6600,0,6600,2450,220,3.6,10,10,16.0,152,9,999999999,359,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,101400,706,1322,412,113,0,113,13500,0,13500,5280,190,4.6,10,10,16.0,213,9,999999999,350,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,19.4,90,101400,912,1322,412,157,0,157,19000,0,19000,7720,190,4.1,10,10,9.6,213,9,999999999,350,0.2200,0,88,0.140,2.0,1.0 +1994,6,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101300,1079,1322,412,193,0,193,23600,0,23600,9680,180,4.6,10,10,19.2,213,9,999999999,340,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101300,1195,1322,412,325,0,325,38800,0,38800,14970,180,4.6,10,10,19.2,3048,9,999999999,340,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101200,1254,1322,417,275,0,275,33500,0,33500,13310,180,5.2,10,10,19.2,2743,9,999999999,329,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101100,1251,1322,416,274,0,274,33400,0,33400,13260,190,5.7,10,10,6.4,1676,9,999999999,329,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101000,1186,1322,417,258,0,258,31300,0,31300,12510,190,5.7,10,10,16.0,853,9,999999999,320,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,100900,1064,1322,419,227,0,227,27300,0,27300,11030,200,6.2,10,10,19.2,732,9,999999999,320,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,100800,892,1322,419,183,0,183,21800,0,21800,8680,190,5.7,10,10,19.2,732,9,999999999,309,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,100700,683,1322,374,447,647,112,47100,64300,13900,2440,190,5.2,1,1,16.0,77777,9,999999999,300,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,100700,452,1322,403,165,42,150,18000,3900,16600,3950,200,5.2,8,8,12.8,823,9,999999999,300,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100700,213,1322,376,78,97,62,8400,6800,7300,1320,200,4.6,7,2,12.8,77777,9,999999999,290,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100600,22,606,383,4,0,4,0,0,0,0,190,4.6,8,4,9.6,77777,9,999999999,290,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100700,0,0,383,0,0,0,0,0,0,0,210,5.2,9,4,9.6,77777,9,999999999,279,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100600,0,0,383,0,0,0,0,0,0,0,200,4.6,8,5,8.0,7620,9,999999999,279,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100600,0,0,387,0,0,0,0,0,0,0,220,3.6,9,6,8.0,7620,9,999999999,270,0.2200,0,88,0.140,0.0,1.0 +1994,6,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100600,0,0,390,0,0,0,0,0,0,0,240,3.6,9,6,8.0,7620,9,999999999,259,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,100600,0,0,403,0,0,0,0,0,0,0,280,3.6,8,6,8.0,7620,9,999999999,259,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.2,84,100600,0,0,399,0,0,0,0,0,0,0,310,4.1,7,4,8.0,77777,9,999999999,250,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,15.6,58,100600,0,0,385,0,0,0,0,0,0,0,340,5.2,8,3,20.8,77777,9,999999999,250,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,10.6,45,100700,0,0,369,0,0,0,0,0,0,0,330,5.7,2,2,24.0,77777,9,999999999,240,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,100700,33,738,370,7,15,6,800,400,800,90,340,5.7,3,3,24.0,77777,9,999999999,240,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,10.0,43,100700,236,1322,363,103,310,47,10900,22100,6900,830,320,6.2,1,1,32.0,77777,9,999999999,229,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.6,43,100800,475,1322,376,260,446,100,27800,41700,12800,1880,320,6.2,3,3,32.0,77777,9,999999999,229,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,10.6,42,100900,705,1322,375,421,547,129,44100,54300,15100,2820,350,5.7,5,2,32.0,77777,9,999999999,229,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,100900,911,1322,377,627,730,123,65900,73300,15400,3210,340,6.7,1,1,32.0,77777,9,999999999,240,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,10.6,38,100900,1078,1322,371,811,820,142,86100,82900,18400,5060,330,5.7,0,0,32.0,77777,9,999999999,250,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,10.6,36,100900,1195,1322,374,916,845,152,98100,85700,20500,7880,350,5.7,0,0,32.0,77777,9,999999999,250,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.6,33,100900,1254,1322,389,899,787,152,96900,80000,20900,10610,10,4.1,1,1,32.0,77777,9,999999999,259,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.0,32,100900,1251,1322,398,776,581,226,83400,59500,27000,16120,350,5.7,3,3,32.0,77777,9,999999999,259,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,10.0,29,100900,1186,1322,410,795,607,250,84300,61700,28800,13010,310,5.7,5,4,32.0,77777,9,999999999,270,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,10.0,28,100800,1064,1322,413,649,450,286,69600,46900,31700,10500,310,4.6,5,4,32.0,77777,9,999999999,279,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,10.0,30,100800,893,1322,400,597,671,144,63700,68300,17500,3890,280,7.2,4,2,32.0,77777,9,999999999,279,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,10.0,30,100800,684,1322,404,403,526,131,42100,51900,15200,2790,320,6.2,3,3,32.0,77777,9,999999999,290,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,10.0,31,100800,452,1322,397,250,369,124,26000,33900,14400,2380,300,6.7,2,2,32.0,77777,9,999999999,300,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,9.4,32,100800,214,1322,394,75,155,50,8000,10300,6300,910,310,6.2,5,3,32.0,77777,9,999999999,300,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,10.6,36,100900,22,628,386,6,6,6,0,0,0,0,310,6.7,6,2,32.0,77777,9,999999999,309,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,9.4,35,101000,0,0,386,0,0,0,0,0,0,0,340,4.6,4,3,32.0,77777,9,999999999,320,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,10.0,39,101000,0,0,377,0,0,0,0,0,0,0,320,4.6,4,2,32.0,77777,9,999999999,320,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,9.4,39,101000,0,0,377,0,0,0,0,0,0,0,320,3.6,8,3,32.0,77777,9,999999999,329,0.2200,0,88,0.140,0.0,1.0 +1994,6,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.6,43,101000,0,0,372,0,0,0,0,0,0,0,310,3.6,7,2,32.0,77777,9,999999999,340,0.2200,0,88,0.140,0.0,1.0 +1994,6,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,11.1,46,101000,0,0,376,0,0,0,0,0,0,0,300,2.6,7,4,32.0,77777,9,999999999,340,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.9,61,101000,0,0,378,0,0,0,0,0,0,0,270,3.1,9,6,32.0,7620,9,999999999,350,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,101000,0,0,380,0,0,0,0,0,0,0,270,4.1,9,7,32.0,7620,9,999999999,350,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,101000,0,0,370,0,0,0,0,0,0,0,260,4.1,8,5,32.0,7620,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,101000,32,738,369,6,0,6,700,0,700,230,270,4.1,7,5,32.0,7620,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,101000,235,1322,369,69,18,65,7500,1400,7200,1600,270,4.6,8,4,24.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,14.4,59,101100,474,1322,371,233,279,133,24800,26700,15300,2700,300,3.1,7,2,24.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,13.9,45,101100,704,1322,394,426,301,265,44900,31400,28200,6420,300,3.1,8,3,20.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,14.4,47,101100,910,1322,398,573,373,315,61600,40100,33900,8970,260,4.1,10,4,20.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,11.7,32,101100,1077,1322,412,688,465,309,73400,48500,33800,11770,350,4.1,9,4,20.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,12.2,36,101000,1194,1322,434,517,55,467,57000,5700,51900,22220,230,5.7,10,9,20.8,4572,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,14.4,41,101000,1254,1322,438,558,141,424,61800,15100,47400,25560,220,6.7,10,9,24.0,4267,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,12.8,35,101000,1251,1322,426,664,311,369,73700,33900,41600,23500,220,5.2,10,7,24.0,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,14.4,43,100900,1186,1322,404,737,425,355,78700,44400,38700,19050,200,5.7,4,3,24.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,15.6,47,100900,1064,1322,399,702,539,268,75900,56300,30500,9810,200,5.7,7,2,24.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,13.9,41,100800,893,1322,394,598,603,190,62500,60600,21500,4960,200,7.2,1,1,24.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,16.7,56,100800,685,1322,391,394,417,178,41600,42000,19900,3830,190,6.2,5,2,24.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,100800,453,1322,393,230,262,140,24300,24700,15800,2880,180,6.2,5,3,20.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,100800,215,1322,385,79,70,68,8600,4900,7800,1450,180,5.7,6,2,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,100800,22,628,388,4,0,4,0,0,0,0,200,6.7,8,4,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,100800,0,0,391,0,0,0,0,0,0,0,180,5.2,9,6,16.0,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,100800,0,0,423,0,0,0,0,0,0,0,200,4.6,10,10,14.4,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100800,0,0,420,0,0,0,0,0,0,0,210,4.1,10,10,12.8,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100800,0,0,420,0,0,0,0,0,0,0,200,4.1,10,10,6.4,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100700,0,0,420,0,0,0,0,0,0,0,180,3.6,10,10,6.4,6096,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100600,0,0,420,0,0,0,0,0,0,0,180,3.6,10,10,8.0,3353,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100600,0,0,420,0,0,0,0,0,0,0,180,3.6,10,10,8.0,3353,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100600,0,0,420,0,0,0,0,0,0,0,200,2.1,10,10,6.4,2743,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100600,31,738,417,3,0,3,400,0,400,120,130,3.1,10,10,6.4,183,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100600,234,1322,420,42,0,42,4800,0,4800,1570,120,3.1,10,10,8.0,396,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,100600,473,1322,424,102,0,102,11700,0,11700,4100,150,3.6,10,10,8.0,640,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,100500,703,1322,402,222,52,194,24400,5200,21600,6130,170,3.1,7,7,9.6,3658,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,100500,909,1322,433,193,0,193,23000,0,23000,9140,180,3.1,10,10,9.6,1433,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,100500,1076,1322,411,594,227,409,64900,24100,45300,15150,150,5.2,7,6,11.2,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,100500,1194,1322,414,751,337,445,81600,36600,48500,22690,120,4.6,8,6,11.2,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,100500,1253,1322,419,894,470,447,94000,49000,47400,33330,110,4.6,9,7,11.2,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,100400,1251,1322,432,608,234,387,67400,25500,43200,24730,130,5.7,9,8,11.2,7010,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,100400,1186,1322,435,542,96,455,59700,9900,50800,21390,100,6.7,9,9,12.8,1128,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,100400,1065,1322,443,234,0,234,28100,0,28100,11310,90,5.7,10,10,12.8,1067,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,100400,894,1322,437,190,0,190,22600,0,22600,8960,100,5.7,10,10,11.2,823,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,100300,685,1322,429,104,0,104,12500,0,12500,4860,100,5.7,10,10,4.0,122,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,100400,453,1322,425,69,0,69,8200,0,8200,2940,120,4.6,10,10,3.2,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,100400,215,1322,422,32,0,32,3700,0,3700,1230,100,6.7,10,10,1.6,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100400,23,628,421,2,0,2,0,0,0,0,80,5.7,10,10,8.0,122,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,100400,0,0,418,0,0,0,0,0,0,0,90,5.7,10,10,4.8,152,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100400,0,0,417,0,0,0,0,0,0,0,80,5.7,10,10,2.4,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,21.1,100,100400,0,0,414,0,0,0,0,0,0,0,80,5.2,10,10,1.6,61,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,100400,0,0,418,0,0,0,0,0,0,0,80,4.6,10,10,1.2,61,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,100400,0,0,418,0,0,0,0,0,0,0,60,3.6,10,10,6.4,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100400,0,0,417,0,0,0,0,0,0,0,60,3.1,10,10,2.4,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100300,0,0,421,0,0,0,0,0,0,0,70,3.1,10,10,0.8,61,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,100300,0,0,425,0,0,0,0,0,0,0,70,2.6,10,10,1.2,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.8,100,100300,31,716,426,3,0,3,400,0,400,120,100,4.1,10,10,1.2,91,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,100400,233,1322,425,23,0,23,2800,0,2800,940,90,2.6,10,10,2.4,152,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,100400,471,1322,400,203,152,148,22000,14500,16800,3390,160,4.6,6,6,9.6,152,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,100300,702,1322,399,312,301,152,33600,30500,17400,3250,180,4.1,5,5,9.6,77777,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,100300,908,1322,383,655,793,110,69800,80000,14800,2960,190,4.6,0,0,9.6,77777,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,100300,1076,1322,392,732,711,154,77200,71600,18800,5340,180,5.2,1,1,11.2,77777,9,999999999,390,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,100300,1193,1322,437,262,0,262,31800,0,31800,12680,200,5.2,10,10,14.4,1067,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,100300,1253,1322,407,838,567,300,88300,57200,33900,21360,190,5.7,5,5,14.4,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,100300,1251,1322,411,821,421,422,86800,43900,45200,30920,190,8.2,5,5,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,100300,1187,1322,411,804,684,189,86900,70400,23600,10040,190,8.8,5,5,20.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,100300,1065,1322,407,651,536,218,68700,54400,24800,7870,200,9.3,4,4,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,100300,894,1322,404,404,357,162,44700,37100,19500,4220,190,9.3,4,4,19.2,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,100300,685,1322,401,392,481,142,42300,48600,17100,2990,210,6.2,4,4,19.2,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,100400,454,1322,437,79,0,79,9200,0,9200,3290,210,4.1,10,10,20.8,1128,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.9,57,100500,216,1322,416,79,187,48,8200,12700,6200,860,250,7.2,5,5,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,16.1,49,100500,23,628,424,4,2,4,0,0,0,0,280,6.2,8,8,24.0,2286,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,15.6,51,100700,0,0,406,0,0,0,0,0,0,0,270,6.2,6,6,24.0,2591,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,14.4,50,100800,0,0,389,0,0,0,0,0,0,0,270,6.2,3,3,24.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,14.4,54,100900,0,0,379,0,0,0,0,0,0,0,290,7.7,4,2,24.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,13.9,55,100900,0,0,368,0,0,0,0,0,0,0,280,7.2,3,1,24.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.9,59,101000,0,0,371,0,0,0,0,0,0,0,280,7.7,8,3,24.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,101000,0,0,360,0,0,0,0,0,0,0,280,7.2,2,1,32.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,101100,0,0,351,0,0,0,0,0,0,0,260,5.2,1,0,32.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,101200,0,0,349,0,0,0,0,0,0,0,240,4.1,0,0,32.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.0,70,101200,30,716,349,7,40,5,800,1300,700,80,270,5.2,0,0,32.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,101300,232,1322,355,107,369,42,11000,26800,6300,760,260,3.6,0,0,32.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.6,62,101300,470,1322,363,282,604,67,29800,56400,9700,1330,260,4.6,0,0,32.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.0,57,101300,701,1322,365,475,726,90,49900,71700,11900,1980,250,5.2,0,0,24.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.7,60,101400,907,1322,373,655,795,109,69800,80200,14700,2940,220,5.2,0,0,24.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,101400,1075,1322,386,746,766,122,80400,77900,17000,4470,200,4.6,2,1,24.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,16.7,51,101400,1193,1322,404,859,778,157,91700,78800,20400,8030,200,4.6,3,3,24.0,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101400,1253,1322,395,905,809,138,92900,81100,15800,7880,190,5.7,2,2,20.8,77777,9,999999999,359,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,17.2,54,101400,1250,1322,401,914,739,214,98600,75900,26600,15290,190,6.7,3,3,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.7,53,101300,1186,1322,397,813,647,232,86700,66000,27300,12170,200,8.2,2,2,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.1,51,101300,1065,1322,400,810,811,156,85000,81600,19200,5240,200,9.8,3,3,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,15.6,52,101300,894,1322,390,614,724,124,64500,72500,15300,3140,200,11.3,2,2,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,101200,686,1322,391,436,590,130,45600,58200,15300,2780,200,11.8,3,3,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.8,67,101200,454,1322,378,251,544,64,26500,50400,9200,1270,200,9.8,1,1,20.8,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101200,216,1322,374,92,188,62,9700,12500,7700,1180,200,8.2,1,1,19.2,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101300,23,628,365,5,28,4,0,0,0,0,190,8.8,2,0,17.6,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101300,0,0,361,0,0,0,0,0,0,0,190,7.7,3,0,17.6,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101300,0,0,368,0,0,0,0,0,0,0,190,7.2,4,1,16.0,77777,9,999999999,370,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101300,0,0,376,0,0,0,0,0,0,0,200,6.7,4,3,14.4,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101300,0,0,391,0,0,0,0,0,0,0,200,5.7,7,7,11.2,152,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,21.1,100,101300,0,0,414,0,0,0,0,0,0,0,190,4.6,10,10,0.4,61,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,101200,0,0,418,0,0,0,0,0,0,0,200,4.6,10,10,3.2,91,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101100,0,0,406,0,0,0,0,0,0,0,190,4.6,9,9,4.0,91,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101100,0,0,397,0,0,0,0,0,0,0,200,4.1,8,8,6.4,91,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,21.1,100,101200,30,716,414,2,0,2,300,0,300,80,190,4.6,10,10,2.4,61,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101200,230,1322,387,69,91,53,7600,6700,6400,1130,200,6.2,6,6,8.0,122,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101200,469,1322,386,187,177,124,20000,16900,14000,2490,200,7.7,5,4,9.6,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101200,699,1322,415,308,113,248,33800,11400,27800,7430,210,5.7,9,9,11.2,1341,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101200,906,1322,394,446,423,156,49700,44000,19400,4120,200,5.7,7,4,12.8,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101200,1074,1322,400,580,353,292,62100,36800,32100,11000,190,6.7,8,6,14.4,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101200,1192,1322,390,835,600,293,87500,60400,32900,15440,190,8.2,9,2,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.9,65,101100,1252,1322,398,869,479,415,92100,50000,44700,30680,180,9.3,10,3,19.2,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.0,67,101000,1250,1322,398,894,718,214,96400,73700,26500,15280,190,9.8,7,2,16.0,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101000,1186,1322,407,811,574,295,88200,60100,34100,15730,180,10.3,8,3,11.2,77777,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101000,1065,1322,419,193,0,193,23500,0,23500,9660,210,5.7,10,10,12.8,366,9,999999999,379,0.2210,0,88,0.140,1.0,1.0 +1994,6,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,100800,894,1322,419,447,172,330,48600,18100,36300,9700,190,11.8,10,9,9.6,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,100800,686,1322,420,169,0,169,19600,0,19600,7190,190,10.3,10,10,11.2,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,100900,455,1322,408,71,17,65,7800,1600,7300,1970,200,9.8,10,9,14.4,7620,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,100900,216,1322,413,39,0,39,4500,0,4500,1450,190,9.8,10,10,19.2,4572,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.8,84,100900,23,628,396,4,3,4,0,0,0,0,200,8.2,9,9,16.0,4572,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,100900,0,0,383,0,0,0,0,0,0,0,200,9.3,7,7,16.0,4572,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.8,84,101000,0,0,387,0,0,0,0,0,0,0,200,7.2,8,8,19.2,4572,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101100,0,0,378,0,0,0,0,0,0,0,200,7.2,9,7,17.6,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101100,0,0,388,0,0,0,0,0,0,0,200,6.2,8,8,17.6,3962,9,999999999,379,0.2210,0,88,0.140,0.0,1.0 +1994,6,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,101100,0,0,381,0,0,0,0,0,0,0,200,5.7,8,8,19.2,2743,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101100,0,0,359,0,0,0,0,0,0,0,210,4.1,2,2,16.0,77777,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101100,0,0,378,0,0,0,0,0,0,0,190,5.2,8,8,16.0,3962,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101000,0,0,359,0,0,0,0,0,0,0,210,4.1,7,2,16.0,77777,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101100,29,694,382,7,6,6,700,300,700,160,210,5.7,8,8,12.8,3962,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101100,229,1322,368,91,218,54,9600,15200,6900,970,200,4.1,5,5,12.8,77777,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101200,467,1322,391,199,84,169,21700,8000,18900,4390,200,4.6,8,8,12.8,3962,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101200,698,1322,408,170,0,170,19700,0,19700,7290,200,5.2,10,10,17.6,3962,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101100,905,1322,403,398,83,341,43800,8500,37900,11610,210,4.1,9,9,17.6,3962,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101200,1073,1322,389,745,691,184,79800,70800,22200,6890,190,4.6,2,2,17.6,77777,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101200,1191,1322,389,852,713,209,91600,73100,25500,11260,180,5.2,3,3,19.2,77777,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101200,1252,1322,385,863,612,283,91300,62000,32500,20090,200,6.7,4,4,17.6,77777,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.9,74,101100,1250,1322,389,939,710,267,99700,72100,31400,18830,190,6.2,4,4,17.6,77777,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101100,1186,1322,383,741,476,314,80200,49800,35400,16790,220,6.2,6,6,17.6,1067,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,101100,1065,1322,400,494,214,321,54200,23200,35400,11380,200,7.7,8,8,16.0,1067,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.8,71,101100,895,1322,395,431,363,185,47100,37700,21500,4860,210,6.2,7,7,17.6,1067,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101100,686,1322,388,355,378,159,38000,38100,18200,3380,220,5.2,8,6,17.6,2438,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101200,455,1322,393,194,233,114,20900,22100,13300,2250,230,6.2,7,7,19.2,2438,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,101200,216,1322,390,86,131,64,8900,8700,7500,1230,260,5.2,4,4,16.0,77777,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.2,73,101200,23,628,372,4,12,4,0,0,0,0,190,5.2,2,2,14.4,77777,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101200,0,0,354,0,0,0,0,0,0,0,190,4.1,3,0,14.4,77777,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101200,0,0,358,0,0,0,0,0,0,0,210,4.1,2,0,16.0,77777,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101200,0,0,346,0,0,0,0,0,0,0,200,5.2,3,0,12.8,77777,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101200,0,0,365,0,0,0,0,0,0,0,200,3.6,4,2,12.8,77777,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,101200,0,0,374,0,0,0,0,0,0,0,200,3.6,6,6,12.8,3658,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101200,0,0,394,0,0,0,0,0,0,0,180,2.6,10,10,6.4,91,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101200,0,0,399,0,0,0,0,0,0,0,0,0.0,10,10,9.6,91,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101100,0,0,399,0,0,0,0,0,0,0,120,2.1,10,10,6.4,1067,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101100,28,694,399,2,0,2,300,0,300,80,140,2.6,10,10,0.1,30,9,999999999,409,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.9,100,101100,227,1322,399,24,0,24,2900,0,2900,970,150,4.1,10,10,0.4,61,9,999999999,409,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,19.4,100,101100,466,1322,402,54,0,54,6500,0,6500,2400,160,2.1,10,10,0.8,61,9,999999999,409,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101100,697,1322,405,94,0,94,11400,0,11400,4480,140,5.2,10,10,0.8,61,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101100,904,1322,411,234,0,234,27400,0,27400,10580,10,2.1,10,10,6.4,3962,9,999999999,400,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101000,1072,1322,414,161,0,161,19900,0,19900,8280,150,5.2,10,10,8.0,152,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,100900,1190,1322,419,182,0,182,22700,0,22700,9340,170,6.7,10,10,4.0,91,9,999999999,390,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,100900,1251,1322,417,192,0,192,24000,0,24000,9850,180,8.2,10,10,0.2,30,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.9,82,101000,1250,1322,417,274,0,274,33400,0,33400,13260,280,5.7,10,10,9.6,732,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,100800,1186,1322,420,259,0,259,31400,0,31400,12550,310,5.2,10,10,14.4,2591,9,999999999,379,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,100800,1065,1322,421,286,0,286,33800,0,33800,13210,110,3.6,10,10,14.4,3048,9,999999999,370,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,100700,895,1322,421,231,0,231,27100,0,27100,10430,140,3.6,10,10,14.4,3962,9,999999999,370,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,100700,686,1322,382,389,336,214,41600,35000,23400,4920,170,7.2,5,5,14.4,77777,9,999999999,359,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,100700,455,1322,349,261,534,77,27200,49100,10300,1490,200,4.6,0,0,14.4,77777,9,999999999,359,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,100700,216,1322,364,63,57,54,6900,4100,6300,1150,210,3.6,5,4,14.4,77777,9,999999999,350,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,100800,23,628,362,4,2,4,0,0,0,0,210,3.6,5,4,14.4,77777,9,999999999,350,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,100800,0,0,365,0,0,0,0,0,0,0,200,3.6,4,4,14.4,77777,9,999999999,340,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,100900,0,0,377,0,0,0,0,0,0,0,190,4.6,6,6,16.0,3962,9,999999999,340,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,100800,0,0,393,0,0,0,0,0,0,0,180,3.6,9,9,12.8,3962,9,999999999,329,0.2220,0,88,0.140,0.0,1.0 +1994,6,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,100700,0,0,386,0,0,0,0,0,0,0,170,4.1,8,8,16.0,3962,9,999999999,329,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,100800,0,0,405,0,0,0,0,0,0,0,210,5.7,10,10,16.0,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,100800,0,0,414,0,0,0,0,0,0,0,250,6.7,10,10,16.0,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,100700,0,0,414,0,0,0,0,0,0,0,280,6.2,10,10,20.8,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,100700,0,0,410,0,0,0,0,0,0,0,270,2.6,10,10,20.8,3962,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,100800,27,672,408,4,0,4,500,0,500,160,210,3.6,10,10,20.8,3353,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,100900,226,1321,408,51,0,51,5800,0,5800,1800,190,4.1,10,10,16.0,3353,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101000,464,1321,393,138,137,90,15200,13100,10500,1710,190,5.2,8,8,16.0,3962,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101000,695,1321,387,313,126,246,33900,13000,27100,6250,180,4.6,7,7,16.0,3962,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101000,902,1321,410,229,0,229,26900,0,26900,10410,190,3.6,10,10,17.6,3962,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101000,1071,1321,413,284,0,284,33600,0,33600,13160,200,4.1,10,10,17.6,3962,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101000,1190,1321,416,322,0,322,38400,0,38400,14860,180,4.6,10,10,17.6,3962,9,999999999,300,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101000,1251,1321,388,606,227,390,67000,24700,43500,24960,180,4.6,9,7,17.6,3962,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101000,1249,1321,411,496,56,443,54800,5800,49300,24480,190,6.7,10,9,17.6,3962,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,101000,1186,1321,389,729,398,371,77400,41500,40100,19970,200,7.2,9,6,16.0,7620,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101000,1065,1321,390,505,229,320,55400,24900,35400,11350,200,8.8,9,6,16.0,7620,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,100900,895,1321,388,564,279,375,60900,29300,41100,11030,190,9.3,9,7,17.6,7620,9,999999999,309,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.8,84,101100,686,1321,396,281,29,266,31400,2700,30000,9670,200,5.7,10,9,17.6,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,101100,455,1321,404,71,0,71,8400,0,8400,3020,190,5.2,10,10,14.4,2286,9,999999999,320,0.2220,0,88,0.140,2.0,1.0 +1994,6,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101100,216,1321,400,39,0,39,4500,0,4500,1450,270,3.1,10,10,11.2,1219,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,101100,23,628,395,5,0,5,0,0,0,0,230,3.1,10,9,16.0,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,101200,0,0,404,0,0,0,0,0,0,0,220,3.6,10,10,17.6,3962,9,999999999,320,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.5,90,101200,0,0,379,0,0,0,0,0,0,0,230,3.6,7,7,17.6,3962,9,999999999,329,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.6,90,101300,0,0,375,0,0,0,0,0,0,0,220,3.6,6,6,17.6,3962,9,999999999,329,0.2220,0,88,0.140,0.0,1.0 +1994,6,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.8,93,101300,0,0,379,0,0,0,0,0,0,0,230,3.6,7,7,12.8,3658,9,999999999,329,0.2220,0,88,0.140,0.0,1.0 +1994,7,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,97,101300,0,0,369,0,0,0,0,0,0,0,230,3.6,4,4,8.0,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.1,96,101300,0,0,366,0,0,0,0,0,0,0,230,3.6,3,3,6.4,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.2,97,101300,0,0,372,0,0,0,0,0,0,0,210,3.6,5,5,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101400,0,0,376,0,0,0,0,0,0,0,260,3.6,6,6,6.4,3353,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101400,26,672,363,5,10,4,500,300,500,60,260,4.1,2,2,4.8,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101400,224,1321,354,93,262,49,9800,18100,6800,880,290,3.1,0,0,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101500,463,1321,361,262,513,83,27300,47200,10700,1590,280,2.6,0,0,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.9,74,101500,694,1321,370,456,652,113,48200,64900,14000,2490,260,2.1,0,0,9.6,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101500,901,1321,379,638,733,138,68400,74900,17200,3800,240,2.1,0,0,11.2,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101500,1070,1321,396,727,651,199,77300,66400,23400,7350,210,4.1,3,3,12.8,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,18.3,58,101500,1189,1321,399,773,680,160,82200,68800,20100,8040,200,4.6,2,2,12.8,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,101500,1250,1321,395,773,534,267,82000,54300,30600,18850,180,5.7,3,3,14.4,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.8,62,101500,1249,1321,390,863,688,212,93100,70700,26200,15040,190,5.2,2,2,14.4,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,16.1,52,101500,1186,1321,397,835,667,236,88900,68000,27800,12350,190,5.2,3,3,16.0,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.2,60,101500,1065,1321,384,735,719,155,77200,72300,18800,5220,190,5.7,1,1,16.0,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.9,71,101500,895,1321,372,633,732,137,67800,74700,17100,3740,190,6.2,0,0,12.8,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101400,686,1321,365,450,650,112,47500,64600,13900,2450,190,6.2,0,0,12.8,77777,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101400,455,1321,361,256,508,81,26600,46600,10600,1550,190,6.2,0,0,12.8,77777,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101500,216,1321,365,88,223,51,9100,15100,6700,920,170,3.1,1,1,16.0,77777,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101500,23,628,356,4,9,3,0,0,0,0,170,1.5,1,1,16.0,77777,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101500,0,0,350,0,0,0,0,0,0,0,170,2.6,0,0,16.0,77777,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,101500,0,0,347,0,0,0,0,0,0,0,150,2.6,0,0,16.0,77777,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101500,0,0,373,0,0,0,0,0,0,0,0,0.0,7,7,16.0,1676,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101500,0,0,351,0,0,0,0,0,0,0,100,2.1,1,1,16.0,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101500,0,0,345,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101500,0,0,345,0,0,0,0,0,0,0,0,0.0,0,0,14.4,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,101500,0,0,341,0,0,0,0,0,0,0,0,0.0,0,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101500,0,0,345,0,0,0,0,0,0,0,0,0.0,0,0,8.0,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,101600,25,672,342,5,18,4,0,0,0,0,0,0.0,0,0,4.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101600,222,1321,351,96,297,46,10100,20500,6700,820,0,0.0,0,0,4.8,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,101700,461,1321,365,268,549,76,28000,50700,10300,1480,190,1.5,0,0,4.8,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101700,692,1321,374,462,684,103,49100,68300,13300,2290,190,2.6,0,0,6.4,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.0,71,101700,900,1321,380,644,761,126,67600,76200,15600,3200,190,3.6,0,0,8.0,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101600,1069,1321,382,795,808,141,84400,81700,18200,4920,200,4.1,0,0,8.0,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101600,1188,1321,385,902,834,151,96500,84600,20300,7640,200,4.6,0,0,11.2,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101600,1249,1321,379,957,846,156,97800,84700,17500,8400,210,6.2,0,0,11.2,77777,9,999999999,300,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101600,1248,1321,385,956,846,156,97700,84700,17500,8350,190,5.7,0,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101500,1185,1321,380,900,834,151,96300,84600,20300,7570,200,5.2,0,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,101500,1065,1321,382,751,748,148,79300,75400,18400,5050,200,6.7,3,1,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.9,69,101400,894,1321,375,639,760,125,67100,76100,15500,3150,180,7.2,0,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.9,71,101400,686,1321,380,427,595,117,44900,59000,14200,2550,190,7.7,5,1,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101500,454,1321,383,190,282,93,20300,26100,11400,1730,190,7.7,6,4,12.8,7620,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101500,216,1321,404,46,11,45,5300,200,5300,1610,210,7.2,10,9,12.8,3962,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101500,22,628,382,4,6,3,0,0,0,0,190,5.2,4,4,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101500,0,0,379,0,0,0,0,0,0,0,190,4.1,3,3,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,360,0,0,0,0,0,0,0,190,5.2,1,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101500,0,0,363,0,0,0,0,0,0,0,190,2.1,0,0,12.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,367,0,0,0,0,0,0,0,190,2.1,1,1,11.2,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101500,0,0,366,0,0,0,0,0,0,0,200,2.6,0,0,11.2,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101600,0,0,363,0,0,0,0,0,0,0,220,2.6,0,0,9.6,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101600,0,0,376,0,0,0,0,0,0,0,230,2.6,5,2,9.6,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101600,0,0,373,0,0,0,0,0,0,0,240,3.1,4,1,9.6,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101600,25,650,376,5,2,5,0,0,0,0,220,2.6,6,2,8.0,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101700,221,1321,384,94,82,81,10100,5800,9100,1730,210,3.1,6,3,4.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,19.4,71,101700,459,1321,389,226,311,118,24300,29600,14000,2340,250,1.5,7,2,4.8,77777,9,999999999,309,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101800,691,1321,432,342,60,310,37400,6100,34200,8640,360,4.1,10,9,9.6,3658,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.9,62,101800,898,1321,431,257,6,253,29900,500,29600,11180,20,4.6,10,9,9.6,3962,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.9,62,101900,1068,1321,431,495,128,390,54100,13600,43100,14240,40,3.1,10,9,9.6,3962,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.9,57,101900,1187,1321,440,364,98,276,41200,10600,31700,13070,50,3.6,10,9,11.2,3962,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.9,55,101900,1249,1321,456,339,0,339,40600,0,40600,15630,50,4.1,10,10,11.2,3962,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.3,53,101900,1248,1321,443,653,92,566,72000,9600,62900,30020,40,3.1,10,9,11.2,3962,9,999999999,320,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101900,1185,1321,452,319,0,319,38100,0,38100,14740,50,3.1,10,10,12.8,7010,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.9,57,101900,1065,1321,453,280,0,280,33200,0,33200,13000,90,2.6,10,10,14.4,3962,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101900,894,1321,432,374,50,339,41000,5100,37500,11430,220,2.6,9,9,14.4,3962,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,19.4,71,101900,686,1321,434,127,0,127,15000,0,15000,5750,210,4.6,10,10,12.8,1128,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,102000,454,1321,428,89,0,89,10300,0,10300,3620,220,4.1,10,10,11.2,3962,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101900,215,1321,404,93,21,90,10000,800,9900,2420,250,2.1,9,7,11.2,3962,9,999999999,329,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,101900,22,628,415,3,0,3,0,0,0,0,350,2.1,8,8,9.6,4267,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,102000,0,0,397,0,0,0,0,0,0,0,350,3.1,7,5,9.6,7620,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,102000,0,0,394,0,0,0,0,0,0,0,310,3.6,6,3,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,102000,0,0,381,0,0,0,0,0,0,0,120,3.6,5,2,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,102100,0,0,363,0,0,0,0,0,0,0,120,2.6,1,0,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.6,97,102100,0,0,365,0,0,0,0,0,0,0,80,2.1,1,1,6.4,77777,9,999999999,340,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.6,97,102100,0,0,413,0,0,0,0,0,0,0,70,1.5,10,10,8.0,1524,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,102100,0,0,393,0,0,0,0,0,0,0,50,3.1,8,8,9.6,1524,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,102100,0,0,382,0,0,0,0,0,0,0,50,3.6,6,6,9.6,1524,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,102200,24,628,398,4,0,4,0,0,0,0,50,4.1,9,9,3.2,152,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,102200,219,1321,387,57,7,56,6400,200,6400,1900,70,3.1,7,7,3.2,152,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,102300,458,1321,388,208,167,150,22500,15800,17000,3420,40,4.6,6,6,4.8,244,9,999999999,350,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,102300,689,1321,383,376,315,211,40300,32900,23100,4840,30,4.6,2,2,8.0,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,102300,897,1321,395,547,439,248,57900,45400,27100,6690,70,3.6,3,3,12.8,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.9,62,102400,1066,1321,407,713,339,439,76400,36600,46800,16350,160,5.7,5,5,14.4,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,17.8,55,102300,1186,1321,405,790,469,369,84100,48900,40000,19880,100,4.6,8,3,17.6,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,15.6,46,102300,1248,1321,396,919,693,264,97700,70500,31000,18430,130,6.2,1,1,20.8,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,13.9,42,102400,1247,1321,400,855,581,306,89900,58600,34500,21120,140,5.7,3,3,24.0,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,12.8,40,102300,1185,1321,382,866,676,260,91600,68500,30000,13460,140,6.2,0,0,24.0,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,13.9,44,102300,1064,1321,381,756,639,240,79200,64500,27100,8570,150,6.2,0,0,24.0,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,13.3,45,102300,894,1321,374,601,577,210,64800,59800,24300,5570,160,5.7,0,0,24.0,77777,9,999999999,359,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,102300,686,1321,370,415,476,168,44100,48000,19200,3590,130,4.6,0,0,24.0,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.6,60,102300,454,1321,366,225,318,115,23500,29300,13400,2190,140,4.1,0,0,20.8,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.1,66,102300,215,1321,361,74,96,58,8000,6800,6900,1230,130,3.6,0,0,20.8,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,102300,22,606,358,3,0,3,0,0,0,0,100,2.1,0,0,19.2,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.7,73,102400,0,0,357,0,0,0,0,0,0,0,110,3.6,0,0,19.2,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,102400,0,0,355,0,0,0,0,0,0,0,130,3.1,0,0,17.6,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.8,84,102400,0,0,359,0,0,0,0,0,0,0,130,2.1,3,1,16.0,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,102300,0,0,350,0,0,0,0,0,0,0,0,0.0,2,0,14.4,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,102300,0,0,357,0,0,0,0,0,0,0,60,2.1,2,1,14.4,77777,9,999999999,370,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,102300,0,0,350,0,0,0,0,0,0,0,70,1.5,3,0,12.8,77777,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,102300,0,0,405,0,0,0,0,0,0,0,60,2.1,10,10,11.2,305,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,102300,0,0,408,0,0,0,0,0,0,0,50,1.5,10,10,11.2,213,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,102300,23,628,409,2,0,2,0,0,0,0,60,2.6,10,10,9.6,274,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,102300,217,1321,412,30,0,30,3500,0,3500,1170,70,2.1,10,10,9.6,884,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,102400,456,1321,419,79,0,79,9200,0,9200,3300,30,2.6,10,10,9.6,884,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,102400,688,1321,424,114,0,114,13600,0,13600,5260,120,1.5,10,10,9.6,274,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,102300,895,1321,429,157,0,157,19000,0,19000,7670,130,3.1,10,10,14.4,366,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,102300,1065,1321,424,553,160,424,60300,17000,46600,15430,140,4.1,9,9,16.0,396,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,102300,1185,1321,412,644,485,208,69100,49700,24400,10960,170,4.6,9,7,16.0,396,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,102200,1247,1321,424,541,95,451,59800,9800,50500,24710,190,4.1,10,9,16.0,396,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,102100,1247,1321,413,630,207,434,69600,22100,48700,25440,220,3.6,7,6,16.0,7620,9,999999999,379,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.1,69,102100,1184,1321,428,470,96,384,52000,9900,43100,18470,210,5.2,9,8,16.0,7620,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,102000,1064,1321,400,721,648,199,76700,66100,23400,7240,190,3.6,7,5,16.0,7620,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101900,894,1321,401,599,565,217,64400,58500,24800,5770,170,5.7,5,3,19.2,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101800,685,1321,397,428,583,126,44900,57600,14900,2710,170,6.2,5,2,19.2,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101900,453,1321,395,260,502,87,26800,45800,11100,1640,180,5.7,3,3,19.2,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101800,214,1321,393,82,90,68,8900,6300,7900,1450,180,5.7,5,5,19.2,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101800,22,606,377,4,24,3,0,0,0,0,200,5.7,1,1,17.6,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101800,0,0,375,0,0,0,0,0,0,0,190,6.7,2,1,17.6,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101800,0,0,371,0,0,0,0,0,0,0,220,4.1,3,1,17.6,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101700,0,0,371,0,0,0,0,0,0,0,230,4.6,2,1,17.6,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101700,0,0,377,0,0,0,0,0,0,0,230,4.1,3,3,17.6,77777,9,999999999,390,0.2220,0,88,0.130,0.0,1.0 +1994,7,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,0,0,384,0,0,0,0,0,0,0,230,4.1,8,5,19.2,7620,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101600,0,0,384,0,0,0,0,0,0,0,230,4.1,7,5,19.2,7620,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101600,0,0,389,0,0,0,0,0,0,0,220,3.6,9,6,19.2,7620,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101600,0,0,412,0,0,0,0,0,0,0,220,3.1,10,9,19.2,2134,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101600,22,606,412,4,0,4,0,0,0,0,240,4.6,9,9,16.0,3962,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101600,214,1321,396,57,40,50,6200,3000,5700,1260,240,4.6,7,6,14.4,3962,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101600,454,1321,410,112,63,90,12500,6000,10400,2050,230,4.1,8,8,14.4,1524,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.2,84,101600,686,1321,392,404,451,170,42900,45400,19300,3640,230,3.6,4,2,14.4,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,101600,894,1321,406,611,618,193,63900,62100,21800,5040,230,4.6,4,3,11.2,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,101600,1064,1321,414,736,642,218,77700,65200,25100,7860,230,4.6,2,2,11.2,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.3,67,101500,1184,1321,424,851,562,347,91100,58700,38400,18500,220,4.6,3,3,9.6,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,101500,1246,1321,417,867,687,218,93300,70500,26700,15240,210,5.2,2,2,9.6,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.3,65,101400,1246,1321,428,923,714,249,98500,72800,29700,17280,200,6.2,3,3,9.6,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.8,68,101400,1184,1321,416,845,673,242,89800,68500,28300,12550,190,5.7,2,2,11.2,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,101400,1063,1321,421,745,629,239,78300,63500,27000,8520,190,5.7,3,3,11.2,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101300,893,1321,397,618,674,163,65500,68300,19200,4350,190,6.2,0,0,12.8,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101300,685,1321,397,435,584,132,45400,57600,15500,2820,190,6.2,0,0,12.8,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101300,453,1321,397,243,433,94,25900,40000,12200,1750,190,5.2,0,0,16.0,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101300,213,1321,400,67,104,50,7100,6900,6000,910,190,3.1,3,3,16.0,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,101300,21,606,400,4,1,4,0,0,0,0,200,2.1,4,4,14.4,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101300,0,0,409,0,0,0,0,0,0,0,180,2.1,8,6,16.0,7620,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101300,0,0,414,0,0,0,0,0,0,0,0,0.0,10,7,16.0,7620,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,101300,0,0,427,0,0,0,0,0,0,0,0,0.0,10,8,16.0,7620,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,101300,0,0,406,0,0,0,0,0,0,0,10,1.5,6,2,19.2,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,101300,0,0,406,0,0,0,0,0,0,0,0,0.0,5,4,19.2,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.3,87,101300,0,0,422,0,0,0,0,0,0,0,220,2.1,8,8,19.2,3962,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101300,0,0,395,0,0,0,0,0,0,0,300,3.6,6,2,19.2,77777,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,101300,0,0,404,0,0,0,0,0,0,0,280,3.1,5,5,19.2,77777,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.0,71,101400,21,606,411,3,0,3,0,0,0,0,290,3.1,7,7,16.0,3962,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101400,212,1321,429,55,8,54,6200,200,6100,1830,250,3.1,9,9,17.6,3962,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101400,452,1321,433,131,22,124,14800,1500,14300,4620,250,2.6,9,9,17.6,3962,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,101500,684,1321,443,156,0,156,18200,0,18200,6760,240,3.6,10,10,14.4,4267,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.0,63,101500,892,1321,451,224,0,224,26300,0,26300,10180,280,3.6,10,10,14.4,4267,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,19.4,48,101500,1063,1321,432,648,502,244,70700,52500,28400,8860,300,2.1,6,4,14.4,7620,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,18.3,41,101500,1183,1321,432,859,680,249,91000,69100,29000,12850,220,3.1,4,2,14.4,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.9,18.9,41,101500,1246,1321,441,880,584,329,95500,61200,37700,23260,250,3.6,4,3,19.2,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,19.4,45,101500,1246,1321,431,858,556,333,92900,58200,37900,23560,210,4.6,7,2,17.6,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,20.0,47,101500,1183,1321,436,826,640,252,87400,65000,29100,13000,210,4.6,8,3,17.6,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,20.6,50,101400,1063,1321,429,720,551,276,77500,57500,31100,10100,190,4.6,7,2,17.6,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,20.0,57,101400,893,1321,417,485,325,265,52800,34900,29100,7210,190,6.7,8,3,19.2,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.1,65,101400,684,1321,415,297,200,193,32700,20700,21900,4870,190,6.7,7,4,19.2,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101400,452,1321,407,212,263,122,22600,24900,14100,2440,200,5.7,8,3,19.2,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101500,212,1321,411,77,16,75,8400,500,8300,2220,220,4.1,7,5,19.2,7620,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.2,82,101500,21,606,399,4,0,4,0,0,0,0,200,4.1,6,3,17.6,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.2,82,101600,0,0,414,0,0,0,0,0,0,0,210,3.1,7,7,17.6,2286,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101700,0,0,458,0,0,0,0,0,0,0,40,7.2,10,10,16.0,1829,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101700,0,0,413,0,0,0,0,0,0,0,40,4.6,7,6,20.8,7620,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.6,74,101700,0,0,397,0,0,0,0,0,0,0,150,2.6,3,3,20.8,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101700,0,0,394,0,0,0,0,0,0,0,170,1.5,6,3,20.8,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101700,0,0,392,0,0,0,0,0,0,0,230,3.1,6,4,16.0,7620,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101600,0,0,393,0,0,0,0,0,0,0,0,0.0,3,3,17.6,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101700,0,0,422,0,0,0,0,0,0,0,270,2.1,9,9,16.0,3962,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101700,20,584,437,3,0,3,0,0,0,0,0,0.0,10,10,12.8,3962,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101700,210,1321,428,55,4,54,6100,100,6100,1820,90,2.1,9,9,11.2,3962,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101700,450,1321,396,204,235,124,21800,22200,14200,2490,140,2.1,3,1,9.6,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101800,682,1321,410,369,350,188,39900,36500,21000,4210,180,3.6,2,2,9.6,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.3,74,101700,891,1321,415,536,373,285,58100,40100,31000,7840,200,3.1,6,3,9.6,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,101700,1061,1321,411,725,531,298,77400,55400,32900,10920,210,4.1,5,1,8.0,77777,9,999999999,459,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,23.3,63,101700,1182,1321,421,814,588,287,85300,59300,32200,14580,200,3.1,3,1,8.0,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,23.9,62,101700,1245,1321,433,874,579,328,94800,60600,37600,23070,210,5.2,4,2,9.6,77777,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,23.9,66,101600,1245,1321,442,780,424,380,83300,44300,41500,26900,190,5.7,6,6,9.6,7620,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,101600,1183,1321,463,323,0,323,38500,0,38500,14870,190,4.1,10,10,9.6,3962,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,101700,1062,1321,449,227,0,227,27300,0,27300,11030,330,3.1,10,10,9.6,1219,9,999999999,450,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101700,892,1321,434,181,0,181,21600,0,21600,8610,80,3.1,10,10,9.6,1067,9,999999999,450,0.2210,0,88,0.130,9.0,1.0 +1994,7,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,101600,684,1321,436,164,0,164,19000,0,19000,7020,90,4.6,10,10,11.2,3962,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101600,451,1321,435,111,0,111,12600,0,12600,4270,120,4.6,10,10,11.2,3962,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101600,211,1321,439,54,0,54,6000,0,6000,1820,100,2.1,10,10,12.8,3962,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101600,20,584,399,3,0,3,0,0,0,0,100,2.6,9,5,12.8,7620,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101700,0,0,393,0,0,0,0,0,0,0,130,3.1,6,3,17.6,77777,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101600,0,0,389,0,0,0,0,0,0,0,130,3.6,4,2,17.6,77777,9,999999999,440,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101600,0,0,390,0,0,0,0,0,0,0,150,2.6,4,3,17.6,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101600,0,0,378,0,0,0,0,0,0,0,0,0.0,2,1,17.6,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101600,0,0,371,0,0,0,0,0,0,0,70,1.5,1,0,17.6,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101600,0,0,371,0,0,0,0,0,0,0,70,2.1,0,0,14.4,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101600,0,0,371,0,0,0,0,0,0,0,0,0.0,0,0,11.2,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101600,0,0,368,0,0,0,0,0,0,0,0,0.0,0,0,9.6,77777,9,999999999,430,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101600,19,562,368,3,0,3,0,0,0,0,0,0.0,0,0,6.4,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,101600,208,1321,375,70,79,57,7600,5500,6700,1210,0,0.0,0,0,6.4,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.3,82,101600,448,1321,389,217,294,117,23200,27700,13800,2320,0,0.0,0,0,6.4,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,24.4,85,101600,680,1321,393,406,453,173,43000,45600,19500,3700,190,2.1,0,0,8.0,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.9,77,101600,889,1321,398,591,555,217,63500,57500,24700,5730,210,3.1,0,0,8.0,77777,9,999999999,419,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.9,70,101600,1060,1321,408,747,620,249,78100,62500,27900,8760,210,3.6,0,0,9.6,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,101500,1181,1321,404,858,657,270,90400,66500,30800,13720,200,4.6,0,0,11.2,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.9,70,101500,1244,1321,415,898,662,274,95100,67200,31800,18640,190,4.6,1,1,11.2,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,23.3,61,101400,1244,1321,424,872,635,274,92400,64400,31600,18670,180,4.1,1,1,11.2,77777,9,999999999,409,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,22.2,57,101400,1182,1321,415,859,658,270,90500,66600,30900,13780,170,5.7,0,0,12.8,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,101400,1062,1321,412,728,499,327,77100,51900,35200,12070,180,6.2,4,4,11.2,77777,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.3,79,101300,891,1321,419,542,269,361,58800,28300,39700,10580,190,4.1,8,6,16.0,7620,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.3,82,101200,683,1321,421,321,102,268,35200,10300,29800,7740,190,4.1,9,7,14.4,7620,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,101300,450,1321,418,162,18,155,17800,1300,17400,5290,200,3.1,8,6,14.4,7620,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.3,82,101300,210,1321,416,59,17,56,6400,1300,6200,1370,200,3.1,7,6,16.0,7620,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101300,20,584,421,3,0,3,0,0,0,0,200,3.6,8,8,16.0,3048,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.9,82,101300,0,0,425,0,0,0,0,0,0,0,240,4.6,7,7,16.0,3658,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,24.4,85,101300,0,0,417,0,0,0,0,0,0,0,240,4.1,8,5,14.4,7620,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,101300,0,0,404,0,0,0,0,0,0,0,260,5.7,7,2,17.6,77777,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,20.0,59,101300,0,0,436,0,0,0,0,0,0,0,300,4.6,8,8,19.2,3658,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,19.4,60,101300,0,0,429,0,0,0,0,0,0,0,290,5.7,8,8,20.8,3658,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101300,0,0,408,0,0,0,0,0,0,0,300,5.7,7,5,20.8,7620,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101300,0,0,420,0,0,0,0,0,0,0,290,5.7,8,8,20.8,3658,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,101300,0,0,440,0,0,0,0,0,0,0,310,5.7,10,10,20.8,3658,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101300,18,562,418,2,0,2,0,0,0,0,330,5.2,9,8,20.8,3962,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101400,205,1322,427,49,0,49,5500,0,5500,1690,340,4.1,10,9,20.8,3962,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.3,60,101400,445,1322,421,104,35,92,11400,3200,10300,2650,340,4.1,9,8,20.8,7620,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,18.3,58,101400,678,1322,417,285,289,137,30900,29100,15900,2860,280,2.6,7,7,20.8,7620,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101400,888,1322,412,566,452,262,59600,46700,28200,7020,290,3.6,8,4,20.8,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.7,45,101400,1059,1322,412,685,440,333,72400,45800,35600,12220,270,4.1,7,2,24.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,15.0,38,101400,1180,1322,423,791,513,332,84900,53600,36900,17360,290,4.1,8,4,24.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,14.4,36,101400,1243,1322,415,922,688,274,97600,69800,31900,18530,280,5.2,7,2,24.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,14.4,34,101400,1243,1322,428,866,598,303,91100,60300,34200,20420,290,5.7,5,4,24.0,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,15.0,34,101300,1181,1322,432,847,648,267,89300,65600,30500,13600,280,7.2,5,4,24.0,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,15.0,33,101300,1061,1322,432,619,415,285,66400,43300,31500,10400,270,6.2,8,3,24.0,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,14.4,36,101200,891,1322,429,499,370,249,54500,39800,27600,6690,260,6.7,7,6,24.0,7620,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.7,45,101200,682,1322,438,348,165,262,37500,16900,28700,6600,270,6.2,9,8,24.0,7620,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.1,43,101200,449,1322,418,212,248,128,22600,23400,14600,2590,290,6.7,7,4,24.0,7620,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,15.6,44,101300,209,1322,412,68,73,56,7400,5100,6600,1190,300,6.7,8,4,24.0,7620,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,16.1,48,101300,19,562,409,3,1,3,0,0,0,0,290,6.2,6,4,24.0,7620,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.7,53,101400,0,0,401,0,0,0,0,0,0,0,290,5.7,4,3,24.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,16.1,52,101400,0,0,381,0,0,0,0,0,0,0,310,4.6,1,0,24.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,101500,0,0,375,0,0,0,0,0,0,0,340,6.7,1,0,32.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.8,52,101600,0,0,372,0,0,0,0,0,0,0,350,7.7,2,2,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,12.2,51,101600,0,0,357,0,0,0,0,0,0,0,350,4.6,1,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.2,55,101600,0,0,352,0,0,0,0,0,0,0,350,4.6,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,11.7,57,101600,0,0,346,0,0,0,0,0,0,0,350,4.1,0,0,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.2,61,101600,0,0,344,0,0,0,0,0,0,0,350,4.6,0,0,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.2,63,101600,17,540,341,2,1,2,0,0,0,0,340,5.2,0,0,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.2,59,101700,203,1322,346,73,136,52,7700,8700,6400,960,360,3.6,0,0,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.2,53,101800,443,1322,354,230,388,100,24400,35600,12400,1870,360,4.6,0,0,32.0,77777,9,999999999,290,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.7,50,101800,676,1322,356,424,548,144,45800,55200,17500,3020,20,6.7,0,0,32.0,77777,9,999999999,290,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,11.7,46,101800,886,1322,368,581,596,181,60900,60000,20600,4710,10,6.7,1,1,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,12.2,45,101800,1057,1322,383,650,529,226,68400,53600,25400,7980,10,4.1,3,3,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.7,41,101800,1179,1322,385,830,642,256,87700,65100,29500,12950,30,5.2,2,2,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,12.8,41,101800,1242,1322,396,906,660,286,95700,66800,32900,19180,350,4.6,3,3,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,12.2,38,101700,1243,1322,394,910,679,271,96500,68900,31500,18300,340,5.2,2,2,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,11.1,33,101700,1181,1322,402,779,599,244,82700,60900,28200,12480,330,4.1,3,3,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,11.1,34,101700,1060,1322,395,701,593,225,73900,60100,25600,8010,320,1.5,2,2,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.0,32,101600,890,1322,398,605,522,253,64000,53900,27600,6780,30,5.2,3,3,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,10.6,33,101600,681,1322,389,403,488,151,43200,49200,17800,3190,10,5.7,1,1,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,10.0,34,101600,448,1322,383,226,372,100,24000,34200,12400,1880,360,4.1,1,1,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,11.1,43,101600,207,1322,363,75,140,53,7900,9100,6500,980,200,4.6,0,0,32.0,77777,9,999999999,300,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.6,64,101600,18,562,361,3,1,3,0,0,0,0,210,5.2,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,14.4,59,101700,0,0,359,0,0,0,0,0,0,0,200,4.6,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.0,61,101700,0,0,360,0,0,0,0,0,0,0,210,4.6,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.7,73,101700,0,0,357,0,0,0,0,0,0,0,220,4.1,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101700,0,0,354,0,0,0,0,0,0,0,230,2.1,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101700,0,0,373,0,0,0,0,0,0,0,250,3.6,4,4,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101700,0,0,354,0,0,0,0,0,0,0,260,3.6,0,0,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101700,0,0,379,0,0,0,0,0,0,0,270,3.6,5,5,32.0,77777,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101700,0,0,382,0,0,0,0,0,0,0,280,2.6,6,6,32.0,1981,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,101700,16,518,381,2,13,2,0,0,0,0,290,1.5,6,6,24.0,1981,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.7,66,101700,201,1322,394,69,77,57,7500,5300,6700,1210,0,0.0,7,7,20.8,1981,9,999999999,309,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,15.6,56,101700,441,1322,397,151,250,68,16700,23000,9000,1230,0,0.0,6,6,16.0,1981,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,15.0,50,101800,674,1322,389,428,639,101,45400,63600,12900,2220,270,1.5,2,2,16.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,13.9,44,101700,884,1322,397,464,430,176,50900,44600,20900,4550,240,3.1,3,3,19.2,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,12.8,40,101700,1056,1322,395,744,714,173,79800,73200,21200,6250,240,5.7,2,2,24.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,12.2,37,101700,1177,1322,401,862,724,217,92300,74100,26200,11050,250,6.7,3,3,24.0,77777,9,999999999,320,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,11.7,35,101700,1241,1322,399,874,765,155,93900,77700,20800,10030,230,5.7,2,2,24.0,77777,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,12.2,36,101600,1242,1322,404,873,757,162,93500,76700,21200,10470,200,5.7,3,3,24.0,77777,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,15.0,44,101600,1180,1322,400,830,751,159,88300,76000,20300,7710,210,6.2,2,2,20.8,77777,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,15.6,47,101600,1059,1322,386,793,844,116,81900,84400,14100,3380,210,6.7,0,0,20.8,77777,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.7,53,101500,889,1322,384,642,801,103,68700,80800,14200,2750,200,7.2,0,0,20.8,77777,9,999999999,329,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101500,680,1322,383,460,729,85,48500,71800,11500,1870,200,6.2,0,0,20.8,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101500,447,1322,379,265,601,62,28000,55400,9300,1230,190,5.7,0,0,19.2,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101500,206,1322,377,92,347,38,9400,23900,5700,690,190,5.2,0,0,19.2,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101500,18,540,374,3,27,3,0,0,0,0,210,5.2,0,0,19.2,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101600,0,0,374,0,0,0,0,0,0,0,220,3.1,0,0,19.2,77777,9,999999999,340,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101500,0,0,374,0,0,0,0,0,0,0,220,3.6,0,0,16.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101500,0,0,371,0,0,0,0,0,0,0,230,4.6,0,0,16.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101500,0,0,371,0,0,0,0,0,0,0,240,5.7,0,0,16.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101500,0,0,369,0,0,0,0,0,0,0,260,4.1,0,0,16.0,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101500,0,0,369,0,0,0,0,0,0,0,250,3.1,0,0,16.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101500,0,0,370,0,0,0,0,0,0,0,260,3.6,0,0,12.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101500,0,0,370,0,0,0,0,0,0,0,230,3.6,3,1,9.6,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101600,15,518,368,2,0,2,0,0,0,0,240,3.6,2,1,8.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101600,198,1322,377,69,101,54,7500,6900,6500,1140,250,4.1,3,1,6.4,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101600,439,1322,387,203,260,116,21600,24300,13600,2300,240,5.7,4,2,8.0,77777,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101600,672,1322,403,347,335,176,37600,34900,19800,3880,240,3.6,5,3,8.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,20.0,59,101600,882,1322,404,571,553,201,61700,57300,23400,5230,240,4.1,4,1,9.6,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.9,53,101600,1054,1322,406,722,620,227,76000,62800,25800,7950,240,5.2,4,1,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,18.3,45,101600,1176,1322,417,834,679,230,88900,69300,27200,11610,240,3.6,2,1,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,17.8,41,101600,1240,1322,415,926,710,260,98500,72200,30600,17330,240,4.1,3,0,12.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,20.0,53,101500,1241,1322,419,893,672,262,94900,68300,30600,17540,180,5.7,2,2,12.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,22.2,59,101500,1179,1322,411,869,716,230,92600,73000,27300,11730,200,5.7,0,0,12.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,22.2,61,101500,1059,1322,409,760,681,214,80300,69200,24800,7620,190,6.7,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.2,67,101400,888,1322,400,605,621,187,63300,62500,21200,4860,200,7.2,0,0,9.6,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.2,72,101400,679,1322,394,420,524,151,45100,52800,17900,3180,200,6.7,0,0,9.6,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101400,445,1322,398,224,345,108,23600,31600,12900,2040,190,6.2,3,1,8.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101400,204,1322,401,73,83,60,7900,5700,7000,1270,210,5.7,5,2,8.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101400,17,540,384,2,0,2,0,0,0,0,200,5.2,1,0,9.6,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101500,0,0,390,0,0,0,0,0,0,0,230,5.2,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101500,0,0,388,0,0,0,0,0,0,0,240,5.7,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101500,0,0,390,0,0,0,0,0,0,0,250,4.1,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.0,67,101500,0,0,385,0,0,0,0,0,0,0,260,3.6,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101500,0,0,382,0,0,0,0,0,0,0,270,2.1,0,0,11.2,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101500,0,0,382,0,0,0,0,0,0,0,10,3.1,0,0,16.0,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101600,0,0,382,0,0,0,0,0,0,0,50,3.1,3,1,12.8,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,101600,0,0,379,0,0,0,0,0,0,0,40,2.6,2,1,14.4,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101600,14,496,368,2,23,2,0,0,0,0,30,2.6,0,0,12.8,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101700,195,1322,380,78,285,36,8000,19200,5200,650,50,3.1,1,1,14.4,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101700,436,1322,380,258,599,60,27300,54900,9100,1190,40,3.6,0,0,19.2,77777,9,999999999,350,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,17.2,53,101700,670,1322,388,452,728,82,47600,71700,11200,1810,60,4.6,0,0,20.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,16.7,48,101700,881,1322,400,598,740,105,63800,74600,14000,2750,80,3.1,1,1,20.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,17.8,46,101700,1053,1322,403,785,843,113,81100,84300,13800,3290,130,5.2,0,0,20.8,77777,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.3,51,101700,1175,1322,459,322,0,322,38300,0,38300,14810,120,6.2,10,10,19.2,4267,9,999999999,359,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,16.7,48,101700,1239,1322,453,341,0,341,40800,0,40800,15660,130,6.2,10,10,19.2,4267,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,19.4,59,101700,1240,1322,441,354,45,311,39200,4600,34900,17370,110,5.2,10,9,19.2,4267,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101700,1178,1322,432,273,102,182,31700,11200,21700,8210,120,6.7,10,9,19.2,4267,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101700,1058,1322,437,286,0,286,33800,0,33800,13180,120,6.2,10,10,17.6,3962,9,999999999,370,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101700,887,1322,426,234,0,234,27400,0,27400,10480,110,5.2,10,10,17.6,3962,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101700,677,1322,423,113,0,113,13500,0,13500,5190,100,6.2,10,10,11.2,366,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101700,444,1322,424,65,0,65,7700,0,7700,2780,80,4.1,10,10,9.6,335,9,999999999,379,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101700,202,1322,420,23,0,23,2700,0,2700,910,90,3.1,10,10,8.0,366,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101700,16,518,417,1,0,1,0,0,0,0,90,5.7,10,10,8.0,305,9,999999999,390,0.2210,0,88,0.130,1.0,1.0 +1994,7,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101700,0,0,417,0,0,0,0,0,0,0,90,5.7,10,10,9.6,213,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101600,0,0,417,0,0,0,0,0,0,0,70,5.7,10,10,6.4,183,9,999999999,390,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101600,0,0,417,0,0,0,0,0,0,0,90,6.2,10,10,8.0,183,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101600,0,0,417,0,0,0,0,0,0,0,90,6.7,10,10,6.4,122,9,999999999,400,0.2210,0,88,0.130,0.0,1.0 +1994,7,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,101500,0,0,418,0,0,0,0,0,0,0,90,4.6,10,10,6.4,122,9,999999999,400,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101500,0,0,421,0,0,0,0,0,0,0,90,3.1,10,10,9.6,274,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101500,0,0,417,0,0,0,0,0,0,0,30,2.1,10,10,6.4,183,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.6,97,101400,0,0,413,0,0,0,0,0,0,0,10,2.6,10,10,8.0,183,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101400,13,474,417,1,0,1,0,0,0,0,40,2.5,10,10,4.0,120,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.6,97,101500,193,1322,413,25,0,25,2900,0,2900,970,20,4.1,10,10,3.2,122,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.6,100,101500,434,1322,410,47,0,47,5700,0,5700,2080,30,3.6,10,10,3.2,122,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,19.4,93,101600,668,1322,409,85,0,85,10300,0,10300,4040,20,5.2,10,10,4.8,152,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101500,879,1322,408,147,0,147,17800,0,17800,7200,10,4.6,10,10,11.2,244,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101600,1051,1322,415,185,0,185,22600,0,22600,9290,360,4.6,10,10,12.8,244,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,19.4,84,101600,1174,1322,418,211,0,211,25900,0,25900,10580,360,4.1,10,10,12.8,274,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101500,1238,1322,428,225,0,225,27800,0,27800,11260,360,3.6,10,10,16.0,396,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101500,1239,1322,425,552,83,474,60900,8600,52900,25110,30,3.6,9,9,16.0,518,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,20.0,65,101500,1177,1322,435,468,151,334,52300,16200,37900,15360,20,4.6,9,9,16.0,640,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.0,63,101500,1057,1322,423,624,327,362,67800,35400,39400,12840,220,2.1,7,7,16.0,732,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.0,63,101400,886,1322,414,442,369,195,48000,38200,22300,5080,240,1.5,5,5,12.8,77777,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,101400,676,1322,403,312,265,176,33800,27600,19700,3890,200,4.6,4,4,12.8,77777,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.0,71,101400,442,1322,380,232,411,94,24700,37700,12100,1750,140,4.1,0,0,12.8,77777,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101500,201,1322,381,78,93,63,8300,6300,7400,1330,160,3.6,6,2,11.2,77777,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101500,16,518,394,2,0,2,0,0,0,0,160,4.1,8,6,11.2,7620,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101500,0,0,394,0,0,0,0,0,0,0,170,4.1,9,6,11.2,6706,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,403,0,0,0,0,0,0,0,160,3.1,10,8,11.2,6706,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,397,0,0,0,0,0,0,0,150,3.1,10,7,12.8,6706,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,424,0,0,0,0,0,0,0,140,4.1,10,10,11.2,274,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101400,0,0,424,0,0,0,0,0,0,0,130,4.1,10,10,11.2,274,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101400,0,0,428,0,0,0,0,0,0,0,100,2.6,10,10,9.6,244,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101400,0,0,428,0,0,0,0,0,0,0,60,2.1,10,10,8.0,213,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101500,0,0,427,0,0,0,0,0,0,0,50,3.1,10,10,9.6,244,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101500,12,452,409,1,0,1,0,0,0,0,50,2.1,10,9,8.0,6706,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101500,190,1322,400,65,50,58,7100,3700,6600,1360,30,2.1,9,7,9.6,7620,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101600,431,1322,433,91,0,91,10500,0,10500,3610,0,0.0,10,10,9.6,3962,9,999999999,450,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101600,666,1322,413,331,258,201,35500,26800,22000,4530,350,1.5,7,7,9.6,3962,9,999999999,440,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,20.6,61,101600,877,1322,437,273,98,207,30500,10400,23500,5980,360,3.6,9,8,9.6,3962,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,19.4,55,101600,1050,1322,431,582,421,247,63200,44000,28200,8700,360,2.6,7,7,11.2,3962,9,999999999,430,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,18.3,48,101600,1172,1322,444,609,153,473,66500,16300,52100,21480,350,2.6,9,8,14.4,3962,9,999999999,419,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,18.9,47,101600,1236,1322,444,619,417,229,69600,43900,28500,15180,250,3.6,7,7,14.4,3962,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,17.8,44,101600,1238,1322,472,339,0,339,40500,0,40500,15590,20,3.1,10,10,14.4,3962,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.7,45,101600,1176,1322,460,256,0,256,31000,0,31000,12410,350,4.1,10,10,14.4,1676,9,999999999,400,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,17.8,46,101600,1055,1322,443,464,239,273,51500,26000,30700,9320,320,4.1,9,8,16.0,1829,9,999999999,390,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,17.8,48,101600,884,1322,462,184,0,184,21900,0,21900,8690,260,3.6,10,10,14.4,1524,9,999999999,390,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.3,51,101600,675,1322,437,202,81,160,22400,8400,18100,4010,270,4.6,8,8,14.4,3962,9,999999999,379,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.9,53,101600,440,1322,431,183,122,142,19800,11400,16000,3220,230,3.6,9,7,14.4,3962,9,999999999,370,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101600,199,1322,430,58,21,55,6400,1600,6100,1330,240,3.1,8,8,19.2,1676,9,999999999,370,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,17.8,55,101600,15,496,415,2,4,2,0,0,0,0,80,3.1,6,6,19.2,1676,9,999999999,359,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,17.2,51,101700,0,0,429,0,0,0,0,0,0,0,10,3.6,8,8,19.2,1676,9,999999999,359,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.7,53,101700,0,0,407,0,0,0,0,0,0,0,10,2.6,5,5,19.2,77777,9,999999999,350,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,17.8,64,101700,0,0,381,0,0,0,0,0,0,0,70,1.5,1,1,19.2,77777,9,999999999,340,0.2200,0,88,0.130,0.0,1.0 +1994,7,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,14.4,54,101700,0,0,367,0,0,0,0,0,0,0,80,1.5,0,0,19.2,77777,9,999999999,340,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,19.4,79,101700,0,0,368,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,329,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,16.7,62,101700,0,0,370,0,0,0,0,0,0,0,360,3.6,0,0,16.0,77777,9,999999999,320,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101700,0,0,363,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,320,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101800,0,0,358,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,309,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101900,11,430,365,1,8,1,0,0,0,0,10,3.6,2,1,16.0,77777,9,999999999,300,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101900,187,1322,377,55,107,40,5900,6600,5000,710,10,3.6,5,3,19.2,77777,9,999999999,300,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101900,429,1322,376,234,510,68,24400,46300,9400,1310,20,3.6,2,1,19.2,77777,9,999999999,290,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101900,664,1322,380,442,691,94,47000,68800,12500,2060,30,2.6,0,0,20.8,77777,9,999999999,300,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,18.3,56,102000,875,1322,389,617,752,119,64900,75300,14900,2960,210,3.1,1,0,20.8,77777,9,999999999,300,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101900,1048,1322,412,602,522,188,64200,53300,21800,6610,180,3.6,4,4,20.8,77777,9,999999999,309,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.9,57,101900,1171,1322,413,771,652,193,83100,67000,23600,9650,190,5.2,4,4,20.8,77777,9,999999999,320,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,19.4,59,101900,1235,1322,413,637,465,202,68900,47800,24100,13280,190,4.6,4,4,20.8,77777,9,999999999,320,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,19.4,59,101800,1237,1322,416,927,716,257,98600,72900,30300,16800,180,4.1,5,5,20.8,77777,9,999999999,329,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.3,53,101800,1175,1322,412,767,589,243,81300,59900,28000,12130,190,4.1,6,3,19.2,77777,9,999999999,340,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.7,45,101800,1054,1322,419,680,530,257,73700,55400,29400,9160,200,3.6,7,4,19.2,7620,9,999999999,350,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,16.7,49,101800,883,1322,428,438,279,251,47700,30000,27700,6700,170,4.6,8,8,19.2,7620,9,999999999,350,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,17.8,53,101800,673,1322,423,338,89,293,37000,9000,32500,8150,190,5.2,9,7,17.6,7620,9,999999999,359,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,17.8,56,101700,439,1322,423,144,72,120,15800,6700,13600,3280,180,4.1,9,8,17.6,7620,9,999999999,370,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,101800,196,1322,413,58,34,53,6400,2500,6000,1290,170,4.6,7,7,17.6,7620,9,999999999,370,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.0,71,101700,14,496,406,2,2,2,0,0,0,0,180,3.6,8,6,14.4,7620,9,999999999,379,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101800,0,0,401,0,0,0,0,0,0,0,190,3.6,7,5,14.4,7620,9,999999999,390,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101800,0,0,415,0,0,0,0,0,0,0,160,2.1,8,8,14.4,4267,9,999999999,390,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101800,0,0,391,0,0,0,0,0,0,0,160,4.6,6,2,14.4,77777,9,999999999,400,0.2200,0,88,0.130,0.0,1.0 +1994,7,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101800,0,0,425,0,0,0,0,0,0,0,140,3.1,10,9,12.8,2286,9,999999999,409,0.2200,0,88,0.130,0.0,1.0 +1994,7,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101700,0,0,402,0,0,0,0,0,0,0,120,2.1,9,6,12.8,7620,9,999999999,409,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101700,0,0,419,0,0,0,0,0,0,0,120,2.6,9,9,11.2,3353,9,999999999,419,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101700,0,0,431,0,0,0,0,0,0,0,120,2.1,10,10,9.6,3048,9,999999999,430,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101700,0,0,434,0,0,0,0,0,0,0,110,2.1,10,10,8.0,3353,9,999999999,430,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101700,10,430,434,1,0,1,0,0,0,0,120,3.1,10,10,6.4,3962,9,999999999,440,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101700,184,1322,434,42,0,42,4700,0,4700,1450,100,2.6,10,10,6.4,3962,9,999999999,450,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101700,426,1322,435,65,0,65,7700,0,7700,2740,110,3.1,10,10,6.4,2591,9,999999999,450,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101800,662,1322,435,121,0,121,14300,0,14300,5440,100,3.6,10,10,6.4,2438,9,999999999,450,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101800,873,1322,432,146,0,146,17700,0,17700,7140,120,3.6,10,10,4.0,244,9,999999999,450,0.2190,0,88,0.130,1.0,1.0 +1994,7,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101900,1046,1322,428,154,0,154,19000,0,19000,7920,100,3.1,10,10,4.0,183,9,999999999,440,0.2190,0,88,0.130,2.0,1.0 +1994,7,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101800,1169,1322,424,176,0,176,21900,0,21900,9050,100,3.6,10,10,2.8,152,9,999999999,440,0.2190,0,88,0.130,4.0,1.0 +1994,7,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101700,1234,1322,431,224,0,224,27600,0,27600,11210,100,3.6,10,10,8.0,244,9,999999999,440,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101700,1235,1322,434,268,0,268,32600,0,32600,13000,90,3.1,10,10,9.6,1067,9,999999999,440,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101700,1174,1322,436,252,0,252,30600,0,30600,12250,60,2.6,10,10,9.6,579,9,999999999,430,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101600,1053,1322,437,221,0,221,26600,0,26600,10770,150,4.1,10,10,9.6,457,9,999999999,430,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101600,882,1322,430,177,0,177,21100,0,21100,8410,120,4.1,10,10,9.6,1372,9,999999999,430,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,101600,671,1322,417,223,48,198,24500,4800,22000,6070,140,5.7,9,9,9.6,1524,9,999999999,419,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101700,437,1322,424,67,0,67,7900,0,7900,2830,140,4.6,10,10,9.6,1463,9,999999999,419,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101700,194,1322,383,52,29,48,5700,2100,5400,1180,140,2.6,6,4,11.2,7620,9,999999999,419,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,13,474,382,2,0,2,0,0,0,0,140,3.1,9,4,11.2,77777,9,999999999,419,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,0,0,382,0,0,0,0,0,0,0,150,2.1,8,4,9.6,77777,9,999999999,409,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,0,0,392,0,0,0,0,0,0,0,140,3.1,10,7,9.6,3962,9,999999999,409,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101700,0,0,408,0,0,0,0,0,0,0,170,2.6,10,9,9.6,6706,9,999999999,409,0.2190,0,88,0.130,0.0,1.0 +1994,7,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101700,0,0,419,0,0,0,0,0,0,0,170,3.1,10,10,9.6,3962,9,999999999,409,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101700,0,0,423,0,0,0,0,0,0,0,30,1.5,10,10,9.6,457,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101700,0,0,417,0,0,0,0,0,0,0,80,2.1,10,10,9.6,610,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101700,0,0,417,0,0,0,0,0,0,0,80,2.1,10,10,6.4,549,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101700,0,0,417,0,0,0,0,0,0,0,110,2.1,10,10,6.4,549,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101800,9,408,389,1,0,1,0,0,0,0,120,1.5,9,7,6.4,4267,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101800,182,1323,420,31,0,31,3600,0,3600,1140,140,2.6,10,10,8.0,396,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101900,424,1323,400,127,42,113,13900,3900,12600,3080,170,2.6,9,7,8.0,396,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101900,659,1323,405,255,95,207,28000,9400,23200,6220,200,2.6,8,6,9.6,396,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101900,871,1323,397,476,333,256,51700,35700,28100,6780,250,3.1,7,2,9.6,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101900,1045,1323,404,658,421,325,69500,43800,34800,11520,200,4.1,8,3,9.6,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,102000,1168,1323,400,813,560,318,87600,58600,35800,15840,190,5.2,6,2,9.6,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,102000,1233,1323,410,812,433,408,86000,45200,43800,26980,190,4.6,5,3,9.6,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,101900,1234,1323,398,861,587,313,93700,61500,36200,20650,190,5.2,4,1,9.6,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.2,72,101900,1172,1323,401,812,576,302,88100,60300,34500,15250,200,5.7,3,1,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.2,72,101900,1052,1323,407,710,513,301,75600,53400,33000,10770,200,5.2,6,2,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,101900,880,1323,408,535,444,239,56800,45900,26200,6290,190,5.2,4,3,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101900,670,1323,401,363,331,196,39100,34400,21700,4400,190,6.2,5,2,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101900,435,1323,392,190,208,122,20300,19400,13900,2450,200,5.7,3,1,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101900,192,1323,390,60,44,54,6600,3200,6100,1290,190,5.7,2,1,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101900,12,452,388,1,0,1,0,0,0,0,190,4.6,1,1,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,102000,0,0,389,0,0,0,0,0,0,0,190,5.2,1,1,11.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,102000,0,0,389,0,0,0,0,0,0,0,210,5.2,4,1,9.6,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,102100,0,0,389,0,0,0,0,0,0,0,190,4.1,4,1,8.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,102100,0,0,398,0,0,0,0,0,0,0,200,4.1,6,3,8.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,102000,0,0,394,0,0,0,0,0,0,0,240,2.1,8,3,8.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,102000,0,0,390,0,0,0,0,0,0,0,0,0.0,7,2,9.6,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.9,97,102000,0,0,385,0,0,0,0,0,0,0,190,3.6,4,1,8.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,102000,0,0,394,0,0,0,0,0,0,0,180,3.1,7,4,8.0,7620,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,102100,9,386,391,1,0,1,0,0,0,0,190,2.6,6,3,4.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,102100,179,1323,390,56,9,55,6200,100,6100,1710,230,2.1,6,2,4.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,102200,421,1323,397,159,97,128,17300,9000,14400,2880,220,2.6,5,3,4.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.9,90,102200,657,1323,397,340,240,221,37000,24500,24800,5490,200,3.1,7,2,4.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.9,88,102200,869,1323,425,359,105,290,39500,10700,32500,9850,200,3.1,8,8,4.8,91,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,24.4,82,102200,1043,1323,404,679,447,327,71700,46500,35000,11550,190,3.1,4,1,4.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.9,77,102200,1167,1323,416,692,375,361,76300,40800,40200,16480,190,3.6,3,3,8.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.3,67,102100,1231,1323,420,761,393,395,84000,42800,44100,22950,200,4.1,2,2,9.6,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.9,70,102100,1233,1323,408,883,563,358,94800,58900,39800,23560,190,5.2,0,0,12.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.9,72,102100,1171,1323,418,783,447,387,82700,46600,41400,19680,190,6.2,2,2,12.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,24.4,79,102100,1050,1323,416,715,415,385,77200,44900,41500,13620,180,5.7,3,3,9.6,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.9,74,102000,879,1323,402,556,417,279,60200,44700,30400,7550,190,5.7,2,0,12.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,24.4,77,102000,668,1323,402,369,322,207,39600,33400,22700,4700,190,5.2,0,0,12.8,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,23.9,79,102000,432,1323,396,187,171,131,20300,16000,15100,2960,180,5.7,0,0,16.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.9,85,102000,189,1323,398,57,18,54,6200,1300,6000,1290,180,5.7,1,1,16.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.9,85,102000,12,452,390,1,0,1,0,0,0,0,200,6.7,1,0,16.0,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,24.4,85,102000,0,0,393,0,0,0,0,0,0,0,200,4.6,1,0,19.2,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.9,85,102000,0,0,390,0,0,0,0,0,0,0,220,4.6,0,0,19.2,77777,9,999999999,400,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.3,85,102000,0,0,386,0,0,0,0,0,0,0,240,3.1,0,0,20.8,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.3,85,102000,0,0,386,0,0,0,0,0,0,0,220,4.1,0,0,19.2,77777,9,999999999,390,0.2190,0,88,0.130,0.0,1.0 +1994,7,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,102000,0,0,383,0,0,0,0,0,0,0,230,4.6,0,0,19.2,77777,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,102000,0,0,383,0,0,0,0,0,0,0,230,4.6,0,0,19.2,77777,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,102000,0,0,387,0,0,0,0,0,0,0,230,3.6,2,1,19.2,77777,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,102000,0,0,384,0,0,0,0,0,0,0,220,3.6,3,1,19.2,77777,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,102000,8,364,377,0,0,0,0,0,0,0,220,3.6,1,0,19.2,77777,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,102000,176,1323,403,50,9,49,5500,100,5500,1580,220,3.6,6,5,17.6,7620,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,102100,418,1323,439,75,0,75,8700,0,8700,3060,240,4.6,10,10,16.0,244,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.9,90,102100,655,1323,431,287,30,271,31700,2900,30200,9390,240,3.6,9,9,16.0,274,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.9,82,102000,867,1323,453,152,0,152,18300,0,18300,7360,230,4.6,10,10,14.4,396,9,999999999,390,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.9,77,102000,1041,1323,419,602,381,302,64000,39700,32700,10560,200,4.6,4,4,17.6,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,102000,1165,1323,417,779,527,314,83900,55100,35300,15450,190,4.6,2,2,19.2,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.8,70,102000,1230,1323,421,790,420,399,83800,43800,43000,25960,200,5.2,4,4,20.8,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.9,74,101900,1232,1323,422,828,500,363,88800,52300,40100,23720,190,6.2,4,4,20.8,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.9,72,101900,1170,1323,428,683,368,358,75400,40000,40000,16480,190,6.7,5,5,20.8,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,101700,1049,1323,422,734,500,337,77200,52000,35900,12080,190,7.7,4,4,20.8,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.3,74,101700,877,1323,415,535,292,341,56900,31200,36200,9580,200,8.8,3,3,20.8,77777,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,101600,666,1323,405,360,329,194,38700,34200,21500,4350,200,8.2,2,1,20.8,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101600,430,1323,394,184,187,123,19500,17400,13900,2470,200,9.3,1,1,19.2,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101600,187,1323,405,53,2,52,5800,0,5800,1690,190,7.2,5,4,19.2,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,101600,11,430,410,1,0,1,0,0,0,0,190,7.2,8,6,19.2,7620,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101600,0,0,396,0,0,0,0,0,0,0,190,7.7,7,2,19.2,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.3,87,101600,0,0,400,0,0,0,0,0,0,0,190,7.2,8,3,20.8,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,101600,0,0,401,0,0,0,0,0,0,0,190,7.2,10,4,20.8,77777,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,101500,0,0,398,0,0,0,0,0,0,0,190,7.7,10,3,19.2,77777,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,101500,0,0,426,0,0,0,0,0,0,0,190,6.7,10,9,19.2,3962,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,24.4,96,101400,0,0,429,0,0,0,0,0,0,0,190,9.3,9,9,19.2,823,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101400,0,0,435,0,0,0,0,0,0,0,200,6.7,10,10,19.2,823,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101400,0,0,435,0,0,0,0,0,0,0,200,6.2,10,10,19.2,610,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,101400,7,342,436,0,0,0,0,0,0,0,210,5.2,10,10,19.2,701,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101500,173,1323,439,34,0,34,3900,0,3900,1210,210,5.2,10,10,19.2,1219,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.9,88,101500,416,1323,425,151,41,138,16500,3800,15300,3560,230,6.2,8,8,19.2,1524,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,101500,652,1323,433,221,43,199,24200,4300,22100,5990,200,6.2,9,9,19.2,1219,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101500,865,1323,444,172,0,172,20500,0,20500,8150,200,6.2,10,10,19.2,1097,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,101500,1040,1323,449,217,0,217,26100,0,26100,10570,210,5.2,10,10,17.6,1128,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.3,79,101500,1163,1323,452,250,0,250,30300,0,30300,12150,200,5.2,10,10,17.6,1341,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,101500,1229,1323,434,711,285,446,77700,31000,48900,25840,190,6.7,7,7,16.0,1463,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101400,1230,1323,405,713,395,345,76700,41300,38300,22320,200,6.2,8,3,16.0,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.8,74,101300,1168,1323,408,819,511,368,87000,53300,39800,18460,200,8.2,2,2,17.6,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101300,1047,1323,405,749,666,222,78900,67500,25400,7640,190,8.8,3,3,17.6,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101200,875,1323,388,592,618,183,61900,62100,20800,4670,200,10.3,0,0,17.6,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101200,664,1323,405,343,339,172,37100,35200,19400,3760,200,9.8,3,3,17.6,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101200,428,1323,390,203,325,98,21500,29400,11900,1830,200,7.7,1,1,16.0,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101200,184,1323,393,57,72,47,6200,4700,5600,990,190,7.7,3,3,16.0,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101300,10,408,395,1,0,1,0,0,0,0,190,7.2,7,4,16.0,6706,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101300,0,0,390,0,0,0,0,0,0,0,200,6.2,8,3,19.2,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101300,0,0,385,0,0,0,0,0,0,0,200,6.7,9,2,19.2,77777,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101300,0,0,396,0,0,0,0,0,0,0,200,5.2,10,6,19.2,7620,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.2,84,101400,0,0,410,0,0,0,0,0,0,0,230,4.6,10,7,19.2,3048,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101300,0,0,415,0,0,0,0,0,0,0,220,3.6,9,9,19.2,2896,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101300,0,0,403,0,0,0,0,0,0,0,200,4.6,10,8,19.2,7620,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101300,0,0,424,0,0,0,0,0,0,0,200,4.6,10,10,14.4,579,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101300,0,0,407,0,0,0,0,0,0,0,220,3.1,8,8,12.8,2896,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101400,6,320,413,0,0,0,0,0,0,0,190,5.2,10,9,12.8,2743,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101400,170,1323,404,45,31,41,4900,2200,4600,1000,200,5.2,8,8,11.2,2896,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101400,413,1323,426,70,0,70,8200,0,8200,2880,210,5.2,10,10,11.2,457,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101400,650,1323,434,128,0,128,15000,0,15000,5650,200,6.2,10,10,14.4,488,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101400,863,1323,437,181,0,181,21500,0,21500,8480,210,4.6,10,10,16.0,488,9,999999999,430,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101500,1038,1323,437,224,0,224,26900,0,26900,10840,200,4.6,10,10,16.0,823,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.3,82,101400,1162,1323,449,254,0,254,30700,0,30700,12300,190,4.6,10,10,16.0,1067,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101400,1227,1323,426,337,0,337,40300,0,40300,15480,190,6.2,10,10,14.4,3962,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101300,1229,1323,419,908,692,265,96300,70300,30900,16520,190,7.7,7,7,14.4,3962,9,999999999,419,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101300,1167,1323,424,255,0,255,30900,0,30900,12350,250,4.6,10,10,0.8,518,9,999999999,419,0.2180,0,88,0.130,11.0,1.0 +1994,7,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.9,100,101400,1046,1323,434,226,0,226,27100,0,27100,10940,220,8.2,10,10,8.0,1067,9,999999999,419,0.2180,0,88,0.130,8.0,1.0 +1994,7,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101400,873,1323,431,183,0,183,21800,0,21800,8600,240,4.1,10,10,6.4,610,9,999999999,409,0.2180,0,88,0.130,4.0,1.0 +1994,7,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101400,662,1323,420,131,0,131,15400,0,15400,5800,240,4.6,10,10,9.6,823,9,999999999,409,0.2180,0,88,0.130,4.0,1.0 +1994,7,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101400,425,1323,417,73,0,73,8500,0,8500,3010,200,5.7,10,10,12.8,823,9,999999999,409,0.2180,0,88,0.130,1.0,1.0 +1994,7,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101300,181,1323,421,32,0,32,3700,0,3700,1170,190,5.2,10,10,16.0,3962,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101300,9,386,406,1,0,1,0,0,0,0,200,4.6,9,9,14.4,3962,9,999999999,409,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101400,0,0,416,0,0,0,0,0,0,0,230,3.6,10,10,14.4,975,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101400,0,0,424,0,0,0,0,0,0,0,160,3.1,10,10,14.4,3962,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101400,0,0,412,0,0,0,0,0,0,0,200,5.2,10,10,11.2,122,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101400,0,0,419,0,0,0,0,0,0,0,230,3.1,10,10,11.2,457,9,999999999,400,0.2180,0,88,0.130,0.0,1.0 +1994,7,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101300,0,0,424,0,0,0,0,0,0,0,190,3.6,10,10,11.2,335,9,999999999,400,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101300,0,0,420,0,0,0,0,0,0,0,220,4.1,10,10,11.2,3962,9,999999999,400,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101200,0,0,389,0,0,0,0,0,0,0,200,3.1,6,6,11.2,3658,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101200,0,0,412,0,0,0,0,0,0,0,180,4.1,10,10,8.0,91,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,101300,6,298,410,0,0,0,0,0,0,0,190,2.1,10,10,8.0,91,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101300,166,1324,417,20,0,20,2400,0,2400,780,190,1.5,10,10,6.4,91,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101300,410,1324,420,44,0,44,5300,0,5300,1930,170,2.6,10,10,4.8,91,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101300,647,1324,406,104,1,103,12400,100,12300,4710,210,2.1,10,9,2.4,61,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101300,861,1324,419,249,33,227,27400,3300,25200,7990,230,2.1,10,9,4.8,244,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101300,1036,1324,395,697,618,212,73400,62700,24300,7140,250,2.6,7,2,11.2,77777,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.1,67,101300,1160,1324,413,701,435,319,75400,45500,35400,15420,230,2.6,8,4,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,101300,1226,1324,417,714,515,236,76200,52600,27400,14570,210,4.1,7,5,11.2,7620,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,21.1,63,101200,1227,1324,419,849,600,292,89300,60600,33100,17930,190,3.6,5,4,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,21.1,63,101200,1165,1324,411,828,736,179,86700,74000,21400,7950,210,3.6,2,2,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.1,67,101100,1044,1324,409,735,703,180,78500,71900,21700,6280,190,4.6,3,3,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101100,871,1324,388,569,614,165,60000,62000,19100,4250,200,5.2,1,1,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101100,659,1324,396,388,519,129,40400,50900,15000,2690,180,5.2,3,3,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101100,423,1324,373,229,469,79,23600,42000,10200,1480,190,5.2,0,0,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.6,60,101200,178,1324,373,63,165,41,6600,10100,5300,730,190,4.6,1,1,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,101200,8,364,377,1,0,1,0,0,0,0,190,3.1,5,2,14.4,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101200,0,0,386,0,0,0,0,0,0,0,220,3.1,8,5,11.2,7620,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101200,0,0,404,0,0,0,0,0,0,0,210,3.1,9,7,11.2,3962,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101200,0,0,389,0,0,0,0,0,0,0,240,3.1,4,3,9.6,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101200,0,0,382,0,0,0,0,0,0,0,210,3.1,2,2,12.8,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101100,0,0,382,0,0,0,0,0,0,0,210,2.6,4,2,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101100,0,0,382,0,0,0,0,0,0,0,210,2.6,3,1,6.4,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101100,0,0,374,0,0,0,0,0,0,0,240,3.1,0,0,4.8,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101100,0,0,371,0,0,0,0,0,0,0,270,4.1,0,0,4.8,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,101100,5,298,375,0,0,0,0,0,0,0,260,2.6,0,0,3.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,101100,163,1324,375,48,15,46,5200,1000,5100,1090,220,2.6,0,0,3.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101200,407,1324,381,173,170,120,18800,15600,14000,2690,260,2.6,0,0,3.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,101200,645,1324,399,342,292,199,36500,30100,21800,4450,250,2.6,3,1,8.0,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.2,70,101200,859,1324,404,525,380,278,56600,40700,30200,7390,240,2.6,4,1,9.6,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.2,65,101200,1034,1324,420,687,398,376,74200,43000,40500,12890,240,4.1,4,3,9.6,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,21.1,57,101200,1159,1324,421,704,298,443,76300,32300,48000,20180,250,4.1,6,2,9.6,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,21.7,59,101100,1224,1324,426,826,409,448,90200,44400,49100,25410,210,5.2,8,3,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.8,70,101100,1226,1324,414,777,412,395,82500,43000,42600,25070,200,5.7,7,2,11.2,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.8,74,101100,1164,1324,418,674,356,361,74300,38700,40200,16290,190,6.2,9,5,9.6,7620,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101100,1042,1324,405,513,199,356,56400,21200,39700,12450,200,7.7,7,7,9.6,4267,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,20.0,65,101000,869,1324,426,427,117,350,46900,12000,39000,11390,190,6.2,8,8,16.0,7620,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,101000,657,1324,421,194,23,182,22100,1800,21200,7410,230,4.1,9,9,12.8,4267,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101000,420,1324,430,115,0,115,12900,0,12900,4210,220,5.7,10,10,11.2,3962,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101000,175,1324,418,47,1,47,5200,0,5200,1540,230,2.1,9,9,12.8,3658,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101000,7,342,403,0,0,0,0,0,0,0,210,2.1,8,8,12.8,3658,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,101100,0,0,410,0,0,0,0,0,0,0,220,2.6,9,9,12.8,3962,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101000,0,0,399,0,0,0,0,0,0,0,190,3.1,9,8,14.4,3962,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,101100,0,0,378,0,0,0,0,0,0,0,200,4.1,5,2,14.4,77777,9,999999999,379,0.2170,0,88,0.130,0.0,1.0 +1994,7,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101000,0,0,370,0,0,0,0,0,0,0,190,2.6,4,1,14.4,77777,9,999999999,390,0.2170,0,88,0.130,0.0,1.0 +1994,7,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101000,0,0,370,0,0,0,0,0,0,0,220,2.1,3,1,14.4,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101000,0,0,372,0,0,0,0,0,0,0,240,2.1,5,2,12.8,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101000,0,0,380,0,0,0,0,0,0,0,210,3.6,6,4,11.2,7620,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101000,0,0,372,0,0,0,0,0,0,0,220,2.6,7,2,9.6,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101000,4,276,381,0,0,0,0,0,0,0,240,2.6,8,5,9.6,7620,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101000,160,1324,419,32,0,32,3600,0,3600,1130,200,4.6,10,10,9.6,3962,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101000,404,1324,414,113,43,100,12400,3900,11200,2740,200,3.6,10,9,9.6,3962,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,101000,643,1324,402,346,258,220,36600,26600,23700,5030,200,3.6,10,7,9.6,7620,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101000,857,1324,412,390,118,313,42800,12100,35000,10330,190,4.1,10,8,9.6,4267,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101000,1032,1324,401,579,447,230,63200,46700,26700,7730,200,3.1,10,5,11.2,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,101100,1157,1324,401,789,596,268,83000,60200,30200,12360,190,5.2,9,4,11.2,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101100,1222,1324,397,858,705,207,92600,72400,25600,12650,190,6.2,7,2,9.6,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.2,72,101000,1224,1324,411,866,637,277,91500,64500,31800,16770,180,5.7,8,3,9.6,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,100900,1162,1324,397,782,625,233,83100,63600,27100,11070,190,7.2,7,2,9.6,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,100800,1040,1324,400,587,444,238,63900,46400,27400,8160,180,5.2,9,5,9.6,7620,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,100800,867,1324,435,223,0,223,26100,0,26100,9990,190,6.2,10,10,8.0,3962,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,100900,654,1324,429,125,0,125,14700,0,14700,5560,250,3.6,10,10,2.8,1219,9,999999999,390,0.2160,0,88,0.130,3.0,1.0 +1994,7,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100900,417,1324,420,67,0,67,7900,0,7900,2780,260,3.1,10,10,8.0,1280,9,999999999,390,0.2160,0,88,0.130,8.0,1.0 +1994,7,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100900,172,1324,420,27,0,27,3100,0,3100,1010,220,3.6,10,10,9.6,2438,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100800,6,342,421,0,0,0,0,0,0,0,220,2.6,10,10,9.6,2438,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,100900,0,0,423,0,0,0,0,0,0,0,180,3.6,10,10,11.2,4267,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,100900,0,0,419,0,0,0,0,0,0,0,180,4.1,10,10,11.2,4267,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100900,0,0,420,0,0,0,0,0,0,0,230,3.0,10,10,9.7,480,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100900,0,0,420,0,0,0,0,0,0,0,230,3.1,10,10,9.6,2743,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100800,0,0,409,0,0,0,0,0,0,0,260,3.6,9,9,9.6,2286,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,100800,0,0,419,0,0,0,0,0,0,0,270,3.6,10,10,9.6,1524,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,100800,0,0,409,0,0,0,0,0,0,0,230,3.1,9,9,9.6,244,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,100800,0,0,417,0,0,0,0,0,0,0,230,3.1,10,10,8.0,244,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100900,4,254,421,0,0,0,0,0,0,0,260,3.1,10,10,6.4,213,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,100900,157,1324,412,34,10,33,3700,700,3700,820,280,2.6,9,9,6.4,244,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101000,402,1324,426,53,0,53,6300,0,6300,2250,360,3.1,10,10,6.4,274,9,999999999,379,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101000,640,1324,394,380,471,152,40400,47000,17700,3140,350,3.6,4,4,11.2,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101100,854,1324,394,529,532,186,57400,55000,21900,4640,20,4.6,4,2,12.8,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101100,1030,1324,399,606,474,237,65900,49500,27300,7950,60,3.1,8,3,16.0,77777,9,999999999,390,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,20.0,61,101100,1155,1324,407,807,684,210,86300,70000,25200,9820,340,2.1,4,2,16.0,77777,9,999999999,400,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,18.3,51,101100,1221,1324,437,582,187,410,64500,20000,46000,21440,310,1.5,8,8,16.0,3962,9,999999999,400,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,16.7,45,101100,1222,1324,431,725,370,384,80100,40300,42900,21300,200,3.1,7,7,16.0,3962,9,999999999,409,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.6,65,101100,1160,1324,452,314,0,314,37400,0,37400,14480,190,3.6,10,10,16.0,3962,9,999999999,409,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.0,63,101100,1038,1324,423,559,387,255,60400,40400,28700,8740,190,4.1,7,7,16.0,3962,9,999999999,409,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101100,865,1324,447,221,0,221,25800,0,25800,9910,180,4.6,10,10,11.2,3962,9,999999999,419,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101100,652,1324,436,154,0,154,17800,0,17800,6530,180,4.6,10,10,9.6,3962,9,999999999,419,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101100,414,1324,431,82,0,82,9500,0,9500,3270,190,2.6,10,10,9.6,3048,9,999999999,430,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101100,169,1324,434,28,0,28,3200,0,3200,1030,190,3.6,10,10,8.0,2591,9,999999999,430,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101100,6,320,431,0,0,0,0,0,0,0,170,3.1,10,10,6.4,2286,9,999999999,430,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101100,0,0,431,0,0,0,0,0,0,0,160,3.6,10,10,4.8,914,9,999999999,440,0.2160,0,88,0.130,4.0,1.0 +1994,7,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101100,0,0,416,0,0,0,0,0,0,0,80,2.6,10,10,8.0,853,9,999999999,440,0.2160,0,88,0.130,4.0,1.0 +1994,7,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101000,0,0,425,0,0,0,0,0,0,0,110,2.6,10,10,6.4,457,9,999999999,450,0.2160,0,88,0.130,0.0,1.0 +1994,7,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,23.3,96,100900,0,0,433,0,0,0,0,0,0,0,150,6.2,10,10,8.0,244,9,999999999,450,0.2160,0,88,0.130,0.0,1.0 +1994,7,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.9,97,100800,0,0,436,0,0,0,0,0,0,0,190,7.7,10,10,11.2,396,9,999999999,450,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,100800,0,0,432,0,0,0,0,0,0,0,190,6.7,10,10,12.8,2591,9,999999999,459,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.8,100,100800,0,0,426,0,0,0,0,0,0,0,210,6.2,10,10,11.2,183,9,999999999,459,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,100800,0,0,425,0,0,0,0,0,0,0,200,5.2,10,10,11.2,2591,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,100900,3,232,409,0,0,0,0,0,0,0,200,5.7,9,9,11.2,3353,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,100900,154,1325,413,36,3,35,4000,0,4000,1190,200,4.1,9,9,12.8,3962,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101000,399,1325,390,204,354,97,21300,31300,11900,1810,220,3.6,3,3,14.4,77777,9,999999999,480,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101000,637,1325,431,144,0,144,16700,0,16700,6140,190,4.1,10,10,14.4,3962,9,999999999,480,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101000,852,1325,427,170,0,170,20300,0,20300,8010,200,4.1,10,10,14.4,732,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101000,1028,1325,425,485,92,413,53300,9500,45900,15450,190,4.1,9,9,14.4,823,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,101000,1153,1325,428,258,75,192,29700,8100,22600,8260,190,7.7,9,9,16.0,3962,9,999999999,469,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,101000,1219,1325,394,843,722,179,89000,72800,21900,9970,190,7.2,2,2,17.6,77777,9,999999999,459,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101000,1221,1325,415,810,460,386,86200,48000,41800,23820,200,9.8,8,8,17.6,1219,9,999999999,459,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101000,1158,1325,424,248,0,248,30000,0,30000,12060,220,4.1,10,10,16.0,823,9,999999999,459,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101000,1036,1325,413,571,239,384,62500,25400,42600,13300,200,5.2,8,8,17.6,3962,9,999999999,450,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101100,862,1325,410,399,350,170,43600,36300,20000,4250,190,6.2,7,7,17.6,2286,9,999999999,450,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101100,649,1325,422,259,55,232,28400,5500,25700,6710,210,5.7,9,9,16.0,1341,9,999999999,450,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101200,411,1325,426,62,0,62,7300,0,7300,2600,200,5.7,10,10,19.2,945,9,999999999,450,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101300,165,1325,411,38,3,38,4300,0,4300,1300,220,5.7,9,9,19.2,945,9,999999999,440,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101300,5,298,432,0,0,0,0,0,0,0,250,4.1,10,10,16.0,2438,9,999999999,440,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101400,0,0,431,0,0,0,0,0,0,0,260,4.6,10,10,16.0,2743,9,999999999,440,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101400,0,0,431,0,0,0,0,0,0,0,280,4.1,10,10,14.4,945,9,999999999,430,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101400,0,0,406,0,0,0,0,0,0,0,280,4.1,10,8,14.4,7620,9,999999999,430,0.2150,0,88,0.130,0.0,1.0 +1994,7,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101400,0,0,423,0,0,0,0,0,0,0,250,3.1,10,10,12.8,1006,9,999999999,430,0.2150,0,88,0.130,0.0,1.0 +1994,7,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101400,0,0,409,0,0,0,0,0,0,0,260,3.6,9,9,12.8,1067,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101500,0,0,400,0,0,0,0,0,0,0,270,3.6,8,8,11.2,945,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101500,0,0,371,0,0,0,0,0,0,0,260,3.1,2,2,11.2,77777,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,395,0,0,0,0,0,0,0,280,3.1,8,8,16.0,3962,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101600,3,210,416,0,0,0,0,0,0,0,310,3.1,10,10,16.0,3353,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101700,150,1325,402,46,28,43,5000,1900,4800,1010,290,2.6,9,9,17.6,2743,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,101800,396,1325,393,169,272,88,17900,24000,10700,1630,320,2.1,7,7,20.8,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,101800,635,1325,413,282,229,172,30400,23600,19100,3730,300,2.1,9,9,19.2,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,17.2,62,101800,850,1325,404,396,148,301,43200,15600,33200,8490,0,0.0,7,7,19.2,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101900,1026,1325,418,237,59,191,27000,6400,22100,6510,170,1.5,8,8,19.2,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101900,1152,1325,439,310,0,310,36900,0,36900,14310,200,4.6,10,10,19.2,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,101900,1217,1325,425,330,0,330,39400,0,39400,15210,210,4.1,10,10,19.2,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.8,60,101900,1219,1325,411,692,261,452,75500,28300,49300,25050,220,4.1,7,7,17.6,3962,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101900,1156,1325,403,706,454,309,76100,47500,34600,14660,200,4.1,6,4,17.6,7620,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,101900,1034,1325,400,667,484,289,71200,50400,31700,9890,190,4.6,6,5,19.2,7620,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.8,60,101800,860,1325,406,531,484,216,56700,50000,24200,5490,190,4.6,6,6,19.2,7620,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,17.8,64,101800,646,1325,400,313,163,233,33800,16600,25700,5760,170,4.1,7,6,24.0,7620,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.3,69,101900,408,1325,408,125,73,103,13800,6700,11700,2310,180,4.1,8,8,20.8,3962,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,102000,162,1325,399,44,25,41,4800,1700,4600,990,180,4.1,7,7,14.4,3962,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,102000,4,276,409,0,0,0,0,0,0,0,180,4.6,8,8,12.8,3962,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,102000,0,0,397,0,0,0,0,0,0,0,190,4.1,7,7,9.6,3962,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,0,0,422,0,0,0,0,0,0,0,190,3.6,10,10,0.8,61,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,0,0,422,0,0,0,0,0,0,0,190,2.6,10,10,6.4,122,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,0,0,422,0,0,0,0,0,0,0,180,2.6,10,10,6.4,122,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,102000,0,0,429,0,0,0,0,0,0,0,180,3.1,10,10,9.6,122,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,102000,0,0,429,0,0,0,0,0,0,0,200,5.2,10,10,9.6,122,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.8,100,101900,0,0,426,0,0,0,0,0,0,0,190,5.2,10,10,0.8,61,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,0,0,410,0,0,0,0,0,0,0,180,4.1,9,9,0.6,61,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,101900,2,188,422,0,0,0,0,0,0,0,190,3.6,10,10,0.6,61,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,147,1325,410,34,7,34,3900,0,3900,1150,200,3.6,9,9,2.4,91,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,102000,393,1325,410,111,50,96,12200,4500,10800,2620,200,3.6,9,9,4.8,91,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,102100,632,1325,404,123,37,104,13500,3600,11700,3390,200,4.6,7,7,14.4,152,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.2,82,102100,848,1325,409,355,174,243,39200,18400,27400,6830,210,4.1,8,6,17.6,4267,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,102100,1024,1325,417,534,386,236,58100,40300,26900,7800,190,4.6,7,7,20.8,4267,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,102100,1150,1325,408,672,234,469,73300,24800,51700,20000,200,5.2,6,5,24.0,7620,9,999999999,430,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,102100,1215,1325,405,878,662,270,92800,67100,31100,15650,200,5.7,7,4,24.0,77777,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,102000,1217,1325,412,777,576,247,82600,58700,28600,14510,200,6.2,8,4,24.0,77777,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,102000,1154,1325,412,743,533,279,81000,55800,32300,13080,200,6.2,7,4,19.2,77777,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,102000,1032,1325,404,695,498,306,73600,51800,33200,10460,180,6.7,8,5,24.0,7620,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,101900,857,1325,409,475,372,234,51900,39900,26000,6030,190,7.7,5,5,24.0,77777,9,999999999,419,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101900,643,1325,410,226,242,109,24900,24200,13100,2190,190,7.7,5,5,20.8,77777,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101900,404,1325,404,204,270,122,21600,24500,14100,2460,200,7.7,4,4,24.0,77777,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.3,69,102000,158,1325,391,46,60,39,5100,3600,4600,820,190,6.2,5,4,24.0,77777,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,102000,4,254,384,0,0,0,0,0,0,0,220,3.6,2,2,20.8,77777,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,102100,0,0,377,0,0,0,0,0,0,0,210,4.1,3,1,19.2,77777,9,999999999,409,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,102100,0,0,367,0,0,0,0,0,0,0,210,4.6,0,0,16.0,77777,9,999999999,400,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,102100,0,0,380,0,0,0,0,0,0,0,220,2.6,3,3,16.0,77777,9,999999999,400,0.2140,0,88,0.130,0.0,1.0 +1994,7,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,102100,0,0,392,0,0,0,0,0,0,0,200,3.1,7,5,14.4,7620,9,999999999,400,0.2140,0,88,0.130,0.0,1.0 +1994,7,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,102100,0,0,400,0,0,0,0,0,0,0,220,2.6,10,7,11.2,7620,9,999999999,400,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,102100,0,0,415,0,0,0,0,0,0,0,230,2.6,10,9,11.2,3658,9,999999999,400,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,102100,0,0,419,0,0,0,0,0,0,0,220,2.6,10,9,11.2,3353,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,102100,0,0,411,0,0,0,0,0,0,0,0,0.0,10,8,11.2,7620,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,102100,2,166,427,0,0,0,0,0,0,0,90,1.5,10,10,9.6,3962,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,102200,144,1326,428,32,0,32,3600,0,3600,1090,0,0.0,10,10,8.0,3658,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,102200,390,1326,431,74,0,74,8600,0,8600,2940,170,1.5,10,10,8.0,3658,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.6,74,102200,630,1326,439,115,0,115,13600,0,13600,5100,360,2.1,10,10,9.6,2591,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,102300,845,1326,442,213,0,213,24900,0,24900,9520,30,3.1,10,10,9.6,3962,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,102300,1022,1326,440,269,0,269,31800,0,31800,12420,30,2.6,10,10,9.6,3962,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,19.4,62,102300,1148,1326,447,309,0,309,36700,0,36700,14270,40,2.6,10,10,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.3,53,102200,1214,1326,434,646,132,524,70200,14000,57400,26660,150,2.1,9,8,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.0,63,102200,1215,1326,439,451,131,331,50600,14100,37600,16920,190,4.6,9,9,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,19.4,62,102200,1152,1326,435,476,70,414,52400,7200,46100,18460,180,4.6,10,9,11.2,6096,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,20.6,67,102200,1029,1326,420,574,340,310,62900,36800,34200,10230,190,4.6,9,7,9.6,6096,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.9,62,102100,855,1326,443,216,0,216,25300,0,25300,9680,190,3.6,10,10,9.6,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,102100,640,1326,405,310,84,269,33900,8400,29800,7390,200,3.1,9,7,9.6,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.8,69,102100,401,1326,414,78,29,70,8700,2600,7900,2020,210,2.6,10,9,9.6,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,102100,154,1326,419,35,5,34,3900,0,3900,1170,200,2.6,9,9,9.6,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,102100,3,232,431,0,0,0,0,0,0,0,200,3.1,10,10,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,102100,0,0,428,0,0,0,0,0,0,0,200,3.1,10,10,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.9,82,102100,0,0,428,0,0,0,0,0,0,0,190,3.2,10,10,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.8,82,102100,0,0,416,0,0,0,0,0,0,0,210,3.2,9,9,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1994,7,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.7,85,102200,0,0,416,0,0,0,0,0,0,0,220,3.3,9,9,11.2,4267,9,999999999,390,0.2130,0,88,0.130,0.0,1.0 +1995,8,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.7,60,102000,0,0,371,0,0,0,0,0,0,0,250,3.4,0,0,32.0,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.6,64,102000,0,0,371,0,0,0,0,0,0,0,250,3.5,0,0,32.0,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.5,71,102000,0,0,371,0,0,0,0,0,0,0,250,3.5,0,0,32.0,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101900,0,0,371,0,0,0,0,0,0,0,250,3.6,0,0,32.0,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101900,1,144,371,0,0,0,0,0,0,0,250,3.1,0,0,24.0,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.9,74,101900,141,1326,370,46,96,35,4800,4800,4300,640,250,2.6,0,0,20.8,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101900,387,1326,379,196,392,81,20800,34400,10800,1480,240,2.6,0,0,19.2,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.0,67,101900,628,1326,385,391,571,121,40700,55600,14400,2480,220,3.1,0,0,19.2,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,20.0,61,101900,844,1326,394,582,674,153,61400,68000,18100,3820,230,3.6,0,0,19.2,77777,9,999999999,270,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,20.6,59,101900,1021,1326,400,741,734,176,79100,75000,21300,5820,220,5.2,0,0,16.0,77777,9,999999999,279,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,20.0,53,101800,1146,1326,406,855,769,190,88800,77000,22100,7690,230,5.7,0,0,16.0,77777,9,999999999,279,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,18.3,44,101800,1212,1326,412,915,784,197,95400,78600,23300,10370,230,5.7,0,0,19.2,77777,9,999999999,279,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,20.0,50,101700,1214,1326,412,916,784,197,95500,78600,23400,10450,220,5.2,0,0,19.2,77777,9,999999999,279,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,20.0,50,101700,1151,1326,412,858,769,190,89100,77000,22200,7820,200,5.7,0,0,19.2,77777,9,999999999,290,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,19.4,51,101600,1028,1326,405,746,735,176,79700,75200,21300,5910,200,7.2,0,0,19.2,77777,9,999999999,290,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,19.4,53,101600,853,1326,402,589,676,154,62200,68300,18200,3890,190,6.7,0,0,20.8,77777,9,999999999,290,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,21.1,63,101600,638,1326,398,399,575,122,41600,56100,14500,2520,190,8.2,0,0,20.8,77777,9,999999999,300,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,19.4,60,101600,398,1326,390,204,401,83,21700,35500,11000,1520,200,7.7,0,0,19.2,77777,9,999999999,300,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101600,151,1326,394,49,104,37,5200,5500,4600,670,200,7.7,1,1,17.6,77777,9,999999999,300,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101700,2,210,385,0,0,0,0,0,0,0,190,6.2,0,0,14.4,77777,9,999999999,300,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,101700,0,0,384,0,0,0,0,0,0,0,210,4.6,0,0,16.0,77777,9,999999999,309,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101800,0,0,382,0,0,0,0,0,0,0,210,3.6,2,0,16.0,77777,9,999999999,309,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101800,0,0,386,0,0,0,0,0,0,0,230,3.1,3,1,19.2,77777,9,999999999,309,0.2060,0,88,0.140,0.0,1.0 +1995,8,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,101900,0,0,385,0,0,0,0,0,0,0,240,4.1,2,1,20.8,77777,9,999999999,320,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101800,0,0,386,0,0,0,0,0,0,0,250,4.1,4,1,24.0,77777,9,999999999,320,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101800,0,0,384,0,0,0,0,0,0,0,240,3.1,3,1,20.8,77777,9,999999999,320,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101800,0,0,390,0,0,0,0,0,0,0,250,3.6,4,2,20.8,77777,9,999999999,320,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.1,79,101800,0,0,385,0,0,0,0,0,0,0,240,3.1,4,1,19.2,77777,9,999999999,329,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101900,1,122,375,0,2,0,0,0,0,0,240,3.1,2,0,14.4,77777,9,999999999,329,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101900,138,1326,379,52,191,32,5400,10000,4400,570,260,3.6,3,0,11.2,77777,9,999999999,329,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101900,384,1326,392,197,451,66,20400,39500,9000,1240,240,3.1,2,1,11.2,77777,9,999999999,340,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.3,74,102000,625,1326,398,384,614,95,40700,60400,12200,2010,230,2.1,3,0,9.6,77777,9,999999999,340,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,102000,841,1326,404,585,753,108,61900,75400,13900,2630,200,2.6,1,0,8.0,77777,9,999999999,340,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.9,72,102000,1018,1326,412,702,746,128,74700,75400,16600,4030,200,3.6,3,1,8.0,77777,9,999999999,350,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.9,70,102000,1144,1326,421,702,502,268,76600,52600,31100,12100,190,4.1,5,2,9.6,77777,9,999999999,350,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.9,72,102000,1210,1326,412,861,753,173,91000,76000,21500,9240,190,4.6,6,1,9.6,77777,9,999999999,350,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,24.4,72,102000,1212,1326,416,816,669,205,88000,68700,25100,11840,190,5.2,4,1,9.6,77777,9,999999999,350,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,24.4,72,102000,1149,1326,416,817,753,164,86200,75900,20300,6940,190,5.7,3,1,9.6,77777,9,999999999,359,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101900,1025,1326,411,757,823,120,81200,83500,16600,3900,180,5.2,0,0,11.2,77777,9,999999999,359,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,22.8,65,101900,850,1326,406,598,745,120,62500,74300,14800,2850,200,6.2,3,0,11.2,77777,9,999999999,359,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.2,65,101900,635,1326,416,313,443,101,33100,43600,12200,2140,190,6.7,6,2,11.2,77777,9,999999999,370,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.3,79,101900,395,1326,409,205,427,78,22000,37700,10700,1420,180,6.2,6,3,11.2,77777,9,999999999,370,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,23.3,77,102000,147,1326,408,48,128,34,5100,6600,4400,610,190,5.2,6,2,11.2,77777,9,999999999,370,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.3,79,102000,2,188,409,0,2,0,0,0,0,0,190,4.1,8,3,11.2,77777,9,999999999,379,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,102100,0,0,415,0,0,0,0,0,0,0,0,0.0,7,5,11.2,7620,9,999999999,379,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.8,74,102100,0,0,415,0,0,0,0,0,0,0,160,1.5,8,4,11.2,77777,9,999999999,379,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,102100,0,0,414,0,0,0,0,0,0,0,190,2.1,7,5,11.2,7620,9,999999999,390,0.2060,0,88,0.140,0.0,1.0 +1995,8,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,102200,0,0,412,0,0,0,0,0,0,0,190,3.1,8,4,11.2,77777,9,999999999,390,0.2060,0,88,0.140,0.0,1.0 +1995,8,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,102200,0,0,405,0,0,0,0,0,0,0,230,3.6,8,3,11.2,77777,9,999999999,390,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,102200,0,0,402,0,0,0,0,0,0,0,240,4.1,7,2,11.2,77777,9,999999999,390,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,102200,0,0,402,0,0,0,0,0,0,0,230,3.1,8,3,11.2,77777,9,999999999,400,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.3,85,102200,0,0,406,0,0,0,0,0,0,0,250,3.1,7,4,9.6,77777,9,999999999,400,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,102200,1,100,409,0,0,0,0,0,0,0,60,1.5,9,6,6.4,7620,9,999999999,400,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.3,85,102300,134,1327,418,35,1,35,3900,0,3900,1140,120,1.5,9,7,6.4,7620,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,23.3,85,102300,381,1327,403,164,162,117,17700,14500,13600,2600,170,2.1,8,3,8.0,77777,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.8,79,102400,622,1327,402,348,363,178,37400,37200,19900,3870,180,3.6,7,2,9.6,77777,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,22.8,74,102300,839,1327,402,534,528,200,57300,54400,22900,4920,190,3.1,4,1,11.2,77777,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.8,68,102300,1016,1327,436,677,516,281,72200,53700,31000,9240,180,2.6,7,7,12.8,3353,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,102300,1142,1327,463,246,0,246,29700,0,29700,11940,190,3.6,10,10,12.8,1676,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.9,77,102300,1208,1327,447,523,93,438,57700,9600,49000,21520,190,3.6,10,9,12.8,1676,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,24.4,77,102300,1210,1327,420,782,441,380,83200,46000,41100,22140,200,3.6,8,3,12.8,77777,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,24.4,72,102200,1146,1327,422,793,561,308,85400,58600,34600,14080,190,6.2,7,2,12.8,77777,9,999999999,409,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,24.4,77,102200,1023,1327,420,627,439,288,66800,45700,31500,9600,180,5.7,4,3,16.0,77777,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,24.4,79,102100,847,1327,412,522,475,219,55700,48900,24300,5480,180,5.7,4,2,16.0,77777,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,24.4,82,102100,631,1327,414,318,282,184,34200,29000,20300,4040,190,6.2,8,3,19.2,77777,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,24.4,87,102100,391,1327,411,184,135,144,19700,12100,16100,3210,190,6.7,9,4,19.2,77777,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,24.4,90,102100,143,1327,408,43,24,41,4800,1600,4600,960,180,6.2,8,4,19.2,6706,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,25.0,94,102100,1,166,415,0,0,0,0,0,0,0,180,5.7,9,6,16.0,6706,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,24.4,90,102100,0,0,414,0,0,0,0,0,0,0,180,4.6,8,6,14.4,6706,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,24.4,93,102100,0,0,416,0,0,0,0,0,0,0,180,5.2,10,7,14.4,6096,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,102100,0,0,440,0,0,0,0,0,0,0,190,3.6,10,10,14.4,6096,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,102100,0,0,397,0,0,0,0,0,0,0,190,3.6,7,4,16.0,77777,9,999999999,419,0.2050,0,88,0.140,0.0,1.0 +1995,8,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,102100,0,0,390,0,0,0,0,0,0,0,190,3.1,7,2,16.0,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,102000,0,0,391,0,0,0,0,0,0,0,180,2.6,8,3,16.0,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,102000,0,0,387,0,0,0,0,0,0,0,190,2.6,6,2,16.0,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101900,0,0,382,0,0,0,0,0,0,0,210,1.5,4,1,16.0,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101900,0,100,387,0,0,0,0,0,0,0,210,2.1,5,2,14.4,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101900,131,1327,397,39,60,33,4300,3300,3900,690,190,2.6,6,3,14.4,77777,9,999999999,419,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.9,85,101900,378,1327,403,181,344,82,19100,29900,10500,1500,240,4.1,4,2,17.6,77777,9,999999999,430,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,23.9,79,101900,619,1327,413,331,403,143,35300,40000,16600,2900,230,4.1,5,3,17.6,77777,9,999999999,430,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,24.4,77,101900,836,1327,416,540,619,150,57100,62500,17600,3720,220,4.1,2,2,19.2,77777,9,999999999,430,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,24.4,75,101800,1014,1327,413,685,692,156,73700,71000,19300,5140,200,3.6,3,1,19.2,77777,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101700,1140,1327,419,773,699,172,81100,70300,20500,6980,170,4.1,2,1,20.8,77777,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101600,1206,1327,429,807,660,207,86900,67700,25200,11640,180,4.6,3,3,24.0,77777,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,23.3,63,101500,1208,1327,434,797,602,249,84700,61200,28800,13920,180,5.7,4,4,24.0,77777,9,999999999,450,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,23.9,63,101500,1144,1327,442,767,632,221,81600,64500,25900,9850,200,4.6,5,5,20.8,77777,9,999999999,450,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,23.3,63,101400,1020,1327,426,722,684,196,76500,69500,22900,6400,210,4.6,2,2,20.8,77777,9,999999999,450,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101300,844,1327,439,470,279,292,50300,29800,31400,7740,200,4.6,6,6,20.8,4267,9,999999999,459,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101300,628,1327,444,245,175,163,27200,17900,18700,3990,200,3.6,7,7,20.8,4267,9,999999999,459,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,23.3,67,101300,387,1327,447,163,100,134,17600,9000,14900,2990,170,3.6,8,8,20.8,4267,9,999999999,459,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,21.1,49,101300,139,1327,456,33,21,31,3600,1400,3500,760,290,6.2,7,7,20.8,4267,9,999999999,469,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,21.1,52,101300,1,122,434,0,0,0,0,0,0,0,270,5.2,3,3,24.0,77777,9,999999999,469,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,20.6,50,101300,0,0,444,0,0,0,0,0,0,0,290,5.7,6,6,24.0,4267,9,999999999,469,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.2,70,101300,0,0,435,0,0,0,0,0,0,0,40,4.1,8,8,20.8,2896,9,999999999,480,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,101300,0,0,428,0,0,0,0,0,0,0,40,3.1,7,7,20.8,4267,9,999999999,480,0.2040,0,88,0.140,0.0,1.0 +1995,8,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,101300,0,0,457,0,0,0,0,0,0,0,260,2.6,10,10,20.8,2896,9,999999999,480,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101300,0,0,442,0,0,0,0,0,0,0,260,2.6,10,10,19.2,2438,9,999999999,490,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.3,82,101300,0,0,449,0,0,0,0,0,0,0,270,3.6,10,10,20.8,4267,9,999999999,490,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.8,85,101200,0,0,442,0,0,0,0,0,0,0,230,2.6,10,10,20.8,4267,9,999999999,490,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.3,87,101200,0,0,431,0,0,0,0,0,0,0,250,3.1,9,9,20.8,4267,9,999999999,500,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,101200,0,77,433,0,0,0,0,0,0,0,50,2.1,9,9,17.6,3658,9,999999999,500,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101200,127,1327,420,32,13,31,3500,800,3500,750,20,4.1,9,7,14.4,3658,9,999999999,509,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101300,375,1327,426,120,29,111,13100,2600,12300,2880,40,2.6,8,8,14.4,4267,9,999999999,509,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,101300,617,1327,425,331,278,201,35100,28400,21900,4480,30,3.6,7,7,17.6,4267,9,999999999,500,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.7,63,101300,834,1327,463,165,0,165,19600,0,19600,7740,30,3.1,10,10,20.8,2896,9,999999999,500,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,21.7,61,101300,1012,1327,438,667,384,374,71800,41500,40200,12340,30,3.6,7,7,20.8,3962,9,999999999,490,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.1,61,101200,1138,1327,463,244,0,244,29500,0,29500,11850,30,1.5,10,10,24.0,1189,9,999999999,490,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101200,1204,1327,448,261,0,261,31700,0,31700,12650,140,6.7,10,10,19.2,975,9,999999999,480,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,101200,1205,1327,441,319,43,280,35400,4400,31400,14400,130,4.1,9,9,19.2,3962,9,999999999,480,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.2,67,101200,1142,1327,432,693,399,350,73700,41600,37800,15850,150,4.6,7,7,19.2,3962,9,999999999,469,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.8,82,101000,1017,1327,424,403,130,303,44600,13900,34000,10180,140,5.7,8,8,11.2,3962,9,999999999,469,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,101000,841,1327,439,209,0,209,24400,0,24400,9360,120,4.6,10,10,9.6,3962,9,999999999,459,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.8,91,101100,624,1327,435,94,0,94,11300,0,11300,4290,150,3.6,10,10,8.0,213,9,999999999,459,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.9,97,101000,383,1327,436,40,0,40,4800,0,4800,1730,140,3.6,10,10,2.4,152,9,999999999,450,0.2040,0,88,0.140,1.0,1.0 +1995,8,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.9,97,101000,135,1327,436,17,0,17,2000,0,2000,650,160,3.1,10,10,2.4,122,9,999999999,450,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,101000,1,100,440,0,0,0,0,0,0,0,150,3.1,10,10,2.4,122,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,101100,0,0,439,0,0,0,0,0,0,0,160,3.1,10,10,9.6,1494,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,101100,0,0,436,0,0,0,0,0,0,0,220,2.1,10,10,12.8,1676,9,999999999,440,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,22.2,88,101000,0,0,434,0,0,0,0,0,0,0,260,3.1,10,10,14.4,3962,9,999999999,430,0.2040,0,88,0.140,0.0,1.0 +1995,8,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,23.3,94,101000,0,0,436,0,0,0,0,0,0,0,250,3.1,10,10,11.2,3962,9,999999999,430,0.2040,0,88,0.140,0.0,1.0 +1995,8,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,100900,0,0,439,0,0,0,0,0,0,0,300,2.6,10,10,8.0,3962,9,999999999,419,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.3,90,100900,0,0,439,0,0,0,0,0,0,0,270,2.1,10,10,9.6,3962,9,999999999,419,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,100900,0,0,439,0,0,0,0,0,0,0,360,2.6,10,10,9.6,3962,9,999999999,409,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,100900,0,0,432,0,0,0,0,0,0,0,360,3.1,10,10,9.6,2438,9,999999999,409,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101000,0,55,429,0,0,0,0,0,0,0,10,2.6,10,10,9.6,3353,9,999999999,400,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101000,124,1328,429,27,0,27,3000,0,3000,920,50,2.6,10,10,9.6,3353,9,999999999,400,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101000,372,1328,424,39,0,39,4700,0,4700,1680,40,4.1,10,10,12.8,152,9,999999999,390,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101100,614,1328,420,78,0,78,9500,0,9500,3630,40,5.2,10,10,12.8,152,9,999999999,390,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101100,831,1328,417,117,0,117,14300,0,14300,5780,50,5.2,10,10,11.2,152,9,999999999,379,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101200,1010,1328,412,178,0,178,21600,0,21600,8880,60,4.6,10,10,11.2,213,9,999999999,379,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101200,1136,1328,412,205,0,205,25100,0,25100,10270,60,4.6,10,10,16.0,274,9,999999999,370,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101200,1202,1328,411,219,0,219,26900,0,26900,10950,70,5.2,10,10,19.2,396,9,999999999,370,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101200,1203,1328,414,261,0,261,31700,0,31700,12650,60,5.2,10,10,19.2,427,9,999999999,359,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101200,1139,1328,424,245,0,245,29600,0,29600,11890,50,7.2,10,10,20.8,610,9,999999999,359,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101200,1015,1328,419,214,0,214,25700,0,25700,10360,70,6.2,10,10,24.0,610,9,999999999,359,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,101200,838,1328,419,169,0,169,20100,0,20100,7910,50,5.2,10,10,24.0,610,9,999999999,350,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.3,84,101300,621,1328,410,113,0,113,13300,0,13300,5000,30,4.6,10,10,19.2,488,9,999999999,350,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101400,379,1328,405,48,0,48,5700,0,5700,2030,30,4.1,10,10,1.6,366,9,999999999,340,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101500,130,1328,405,19,0,19,2200,0,2200,710,40,3.1,10,10,4.8,244,9,999999999,340,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101500,0,77,401,0,0,0,0,0,0,0,30,4.1,10,10,20.8,732,9,999999999,329,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101500,0,0,401,0,0,0,0,0,0,0,50,3.1,10,10,24.0,975,9,999999999,329,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101600,0,0,404,0,0,0,0,0,0,0,60,3.6,10,10,24.0,823,9,999999999,320,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101600,0,0,400,0,0,0,0,0,0,0,60,5.7,10,10,32.0,823,9,999999999,320,0.2030,0,88,0.140,0.0,1.0 +1995,8,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101700,0,0,399,0,0,0,0,0,0,0,50,4.1,10,10,32.0,732,9,999999999,309,0.2030,0,88,0.140,0.0,1.0 +1995,8,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101700,0,0,399,0,0,0,0,0,0,0,50,4.1,10,10,32.0,853,9,999999999,309,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101700,0,0,399,0,0,0,0,0,0,0,50,3.6,10,10,24.0,610,9,999999999,309,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101800,0,0,396,0,0,0,0,0,0,0,40,3.6,10,10,24.0,610,9,999999999,300,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,101900,0,0,393,0,0,0,0,0,0,0,40,2.6,10,10,20.8,853,9,999999999,300,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.0,76,101900,0,33,397,0,0,0,0,0,0,0,50,3.1,10,10,24.0,975,9,999999999,290,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,102000,120,1328,398,20,0,20,2300,0,2300,720,40,4.1,10,10,24.0,518,9,999999999,290,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,102000,368,1328,398,57,0,57,6700,0,6700,2330,40,4.1,10,10,24.0,518,9,999999999,279,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,102100,611,1328,401,115,0,115,13500,0,13500,5030,30,3.6,10,10,32.0,610,9,999999999,279,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,102100,829,1328,390,436,225,296,47500,23600,32800,8190,60,6.2,8,8,32.0,701,9,999999999,279,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.0,64,102100,1007,1328,386,580,224,410,63000,23700,45000,13600,50,5.2,7,7,40.0,853,9,999999999,270,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,14.4,55,102200,1134,1328,390,670,433,300,72200,45300,33500,13120,50,5.7,8,6,40.0,7620,9,999999999,270,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.9,50,102200,1200,1328,400,446,74,380,49400,7600,42500,18650,50,5.7,7,7,40.0,1219,9,999999999,270,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,13.9,55,102200,1201,1328,397,594,185,426,65400,19700,47500,20650,50,5.7,8,8,32.0,1219,9,999999999,259,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,12.8,48,102200,1137,1328,390,613,249,400,66800,27000,43600,16830,70,5.2,7,6,32.0,1433,9,999999999,259,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,12.8,48,102200,1012,1328,387,639,482,272,68400,50200,30100,8820,60,5.2,6,5,32.0,7620,9,999999999,259,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.2,43,102200,834,1328,383,552,627,158,58100,63100,18400,3870,60,5.7,6,2,32.0,77777,9,999999999,259,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.8,44,102200,617,1328,393,306,405,118,33300,40200,14500,2350,60,4.6,5,4,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,12.8,47,102200,375,1328,380,194,394,83,20500,34100,10900,1520,70,3.1,4,2,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.0,68,102200,126,1328,367,37,63,31,4000,3400,3700,650,130,4.1,3,3,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,102300,0,55,362,0,0,0,0,0,0,0,110,2.6,2,2,32.0,77777,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.7,81,102300,0,0,355,0,0,0,0,0,0,0,100,2.6,3,1,32.0,77777,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,102300,0,0,348,0,0,0,0,0,0,0,60,2.6,4,1,32.0,77777,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,102300,0,0,332,0,0,0,0,0,0,0,70,3.1,0,0,32.0,77777,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,102300,0,0,327,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.7,72,102300,0,0,334,0,0,0,0,0,0,0,30,3.1,2,1,32.0,77777,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.1,72,102300,0,0,331,0,0,0,0,0,0,0,30,3.6,3,1,32.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.7,75,102300,0,0,325,0,0,0,0,0,0,0,40,3.1,2,0,32.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.6,72,102300,0,0,322,0,0,0,0,0,0,0,30,3.6,1,0,32.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.6,75,102400,0,11,330,0,0,0,0,0,0,0,30,3.1,2,2,32.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.6,65,102400,117,1329,335,35,77,28,3700,3300,3400,500,30,3.6,3,1,32.0,77777,9,999999999,209,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.1,59,102400,365,1329,346,180,417,66,18700,35800,8800,1230,50,3.6,2,1,32.0,77777,9,999999999,209,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,102400,608,1329,363,240,237,131,26300,24200,15100,2690,70,4.6,3,3,40.0,77777,9,999999999,209,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.2,50,102400,826,1329,371,555,674,135,58900,68200,16400,3340,80,4.6,2,2,40.0,77777,9,999999999,209,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,102400,1005,1329,385,700,623,229,73200,62700,25700,7080,80,4.1,5,3,40.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.2,42,102400,1132,1329,385,792,702,194,85000,72000,23600,8370,120,5.2,5,2,40.0,77777,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,11.1,38,102400,1198,1329,394,845,582,320,91300,60900,36300,17470,110,6.2,6,4,40.0,7620,9,999999999,220,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,10.6,36,102400,1198,1329,393,852,684,234,90800,69800,27700,12570,120,5.7,7,4,40.0,7620,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.7,41,102400,1134,1329,392,763,564,281,82800,59000,32300,12240,140,4.1,8,4,40.0,7620,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.1,39,102300,1009,1329,391,684,566,254,73600,59000,28800,8140,130,5.2,6,4,40.0,7620,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,10.6,39,102300,831,1329,385,503,502,189,54300,51700,21800,4590,140,5.7,5,3,40.0,77777,9,999999999,229,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,11.7,45,102300,613,1329,383,284,270,159,30700,27600,17900,3380,140,4.6,6,4,32.0,7620,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.3,57,102200,370,1329,374,166,182,115,18000,16200,13500,2550,130,4.1,8,4,32.0,7620,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.9,61,102200,121,1329,372,35,27,32,3800,1700,3600,760,120,3.1,7,4,32.0,7620,9,999999999,240,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,102200,0,33,369,0,0,0,0,0,0,0,100,2.1,8,4,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,102200,0,0,367,0,0,0,0,0,0,0,120,1.5,7,4,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.0,73,102200,0,0,362,0,0,0,0,0,0,0,0,0.0,8,3,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,14.4,70,102200,0,0,357,0,0,0,0,0,0,0,0,0.0,7,2,32.0,77777,9,999999999,250,0.2020,0,88,0.140,0.0,1.0 +1995,8,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,14.4,75,102200,0,0,356,0,0,0,0,0,0,0,60,2.1,6,3,32.0,77777,9,999999999,259,0.2020,0,88,0.140,0.0,1.0 +1995,8,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,14.4,75,102200,0,0,356,0,0,0,0,0,0,0,0,0.0,8,3,32.0,77777,9,999999999,259,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,14.4,78,102100,0,0,349,0,0,0,0,0,0,0,60,2.1,7,2,32.0,77777,9,999999999,259,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,14.4,80,102100,0,0,350,0,0,0,0,0,0,0,50,2.1,8,3,32.0,77777,9,999999999,270,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,102100,0,0,343,0,0,0,0,0,0,0,40,2.6,6,2,32.0,77777,9,999999999,270,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.9,84,102100,0,0,344,0,0,0,0,0,0,0,50,2.1,8,3,32.0,77777,9,999999999,270,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.0,76,102100,113,1318,355,34,15,32,3700,900,3600,760,40,2.6,7,2,32.0,77777,9,999999999,270,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,102100,362,1329,370,157,131,121,16900,11500,13800,2680,20,2.6,8,3,24.0,77777,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,12.8,50,102100,605,1329,384,225,201,133,24600,20500,15200,2740,10,3.6,7,5,24.0,7620,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.2,42,102000,824,1329,395,522,417,263,56200,44500,28600,6730,320,2.6,8,5,24.0,7620,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.1,39,102000,1003,1329,394,551,380,264,59000,39600,29100,8390,160,2.6,7,5,24.0,7620,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,13.9,48,102000,1129,1329,395,673,371,357,73800,40300,39500,14530,180,4.1,9,5,24.0,7620,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.8,45,102000,1195,1329,390,796,583,271,83900,59000,30700,14200,190,4.1,7,4,24.0,77777,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,12.8,42,101900,1196,1329,396,802,492,359,85600,51400,39300,19550,190,4.1,8,4,24.0,77777,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,13.9,48,101900,1131,1329,392,766,371,449,82500,40200,48200,18910,200,4.1,9,4,24.0,77777,9,999999999,279,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,14.4,50,101800,1006,1329,392,615,367,337,66700,39700,36600,10810,190,4.6,9,4,24.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,101800,827,1329,389,539,453,256,56200,46400,27200,6370,200,4.1,9,4,24.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,15.0,56,101700,609,1329,387,343,338,188,36600,34500,20800,4130,190,5.2,9,4,24.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.0,60,101700,366,1329,374,160,187,109,16900,16300,12400,2170,190,4.6,9,2,24.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.0,61,101700,117,1318,379,33,9,32,3600,0,3600,1030,190,4.6,8,4,24.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,101700,0,0,376,0,0,0,0,0,0,0,190,3.6,7,4,32.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101700,0,0,368,0,0,0,0,0,0,0,200,3.6,8,3,32.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101700,0,0,365,0,0,0,0,0,0,0,210,3.1,7,2,32.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101700,0,0,367,0,0,0,0,0,0,0,220,3.1,8,3,32.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101700,0,0,359,0,0,0,0,0,0,0,220,3.1,6,2,32.0,77777,9,999999999,290,0.2010,0,88,0.140,0.0,1.0 +1995,8,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,101700,0,0,364,0,0,0,0,0,0,0,250,3.6,7,2,32.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101600,0,0,364,0,0,0,0,0,0,0,240,3.1,8,3,32.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101600,0,0,361,0,0,0,0,0,0,0,280,3.1,6,2,32.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101700,0,0,361,0,0,0,0,0,0,0,270,3.1,6,3,32.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101700,0,0,358,0,0,0,0,0,0,0,290,3.1,5,2,32.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,101700,110,1296,367,33,126,22,3600,6100,3000,380,280,2.1,4,3,24.0,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101700,359,1330,367,174,434,56,18100,37300,8000,1060,280,2.1,2,1,19.2,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101700,602,1330,369,390,694,76,41000,67300,10400,1610,260,2.1,1,0,19.2,77777,9,999999999,300,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,101700,821,1330,378,585,796,93,62500,80000,13100,2310,210,3.6,0,0,19.2,77777,9,999999999,309,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.9,69,101700,1000,1330,383,697,791,102,72300,79000,12700,2770,200,4.6,1,1,19.2,77777,9,999999999,309,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101700,1127,1330,401,606,487,193,65000,49900,22600,8200,190,4.6,5,5,19.2,77777,9,999999999,309,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.8,60,101600,1193,1330,380,912,883,119,94000,88500,14400,5120,190,5.2,0,0,20.8,77777,9,999999999,309,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,16.7,54,101600,1193,1330,413,728,304,455,79000,33000,49400,22730,180,5.2,7,7,24.0,1676,9,999999999,309,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,101600,1128,1330,405,764,504,337,81400,52600,36700,14560,190,4.6,6,6,24.0,1676,9,999999999,320,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,101600,1002,1330,399,640,598,189,67800,60800,21900,5950,180,4.6,4,4,24.0,77777,9,999999999,320,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.3,62,101500,824,1330,400,563,636,168,58800,63700,19200,4020,180,4.1,4,4,24.0,77777,9,999999999,320,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101500,605,1330,379,398,711,74,41900,69000,10400,1590,180,5.7,0,0,24.0,77777,9,999999999,320,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.9,71,101500,361,1330,372,201,550,51,21100,47600,8100,980,180,5.2,0,0,24.0,77777,9,999999999,320,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101500,112,1296,368,40,203,23,4200,10800,3200,410,190,5.7,0,0,24.0,77777,9,999999999,329,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101500,0,0,368,0,0,0,0,0,0,0,190,4.1,0,0,24.0,77777,9,999999999,329,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.6,85,101500,0,0,369,0,0,0,0,0,0,0,200,2.6,0,0,24.0,77777,9,999999999,329,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101500,0,0,370,0,0,0,0,0,0,0,220,3.6,0,0,24.0,77777,9,999999999,329,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,367,0,0,0,0,0,0,0,220,3.1,0,0,20.8,77777,9,999999999,340,0.2000,0,88,0.140,0.0,1.0 +1995,8,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,367,0,0,0,0,0,0,0,210,2.1,0,0,20.8,77777,9,999999999,340,0.2000,0,88,0.140,0.0,1.0 +1995,8,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,367,0,0,0,0,0,0,0,250,3.1,0,0,20.8,77777,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101500,0,0,364,0,0,0,0,0,0,0,260,2.1,0,0,20.8,77777,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101500,0,0,364,0,0,0,0,0,0,0,240,2.6,0,0,20.8,77777,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101500,0,0,361,0,0,0,0,0,0,0,260,2.1,0,0,20.8,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.6,93,101500,0,0,361,0,0,0,0,0,0,0,230,2.1,0,0,20.8,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,106,1275,367,29,28,27,3200,1500,3100,560,0,0.0,0,0,19.2,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101500,355,1330,373,161,280,86,16800,23700,10500,1590,220,2.6,0,0,19.2,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101500,599,1330,382,350,475,136,37300,46800,16200,2720,200,3.1,0,0,20.8,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101500,818,1330,419,421,197,300,45800,20600,33100,8230,220,3.1,8,8,24.0,1676,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.1,69,101500,998,1330,402,672,511,288,71200,53100,31300,9120,210,3.1,5,2,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.6,65,101500,1125,1330,409,632,399,294,68100,41700,32800,12450,180,4.1,5,3,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,20.6,63,101500,1190,1330,408,861,673,258,91000,68300,29800,13270,190,3.6,4,2,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.1,65,101400,1191,1330,412,764,345,455,82900,37400,49400,22510,190,4.1,3,3,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,21.1,63,101300,1125,1330,406,764,637,224,81000,64800,26000,9350,170,5.7,2,1,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.1,67,101300,999,1330,409,667,520,276,71100,54100,30400,8730,180,5.2,5,3,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.1,69,101200,820,1330,402,518,437,248,54200,44800,26500,6100,170,5.2,7,2,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,22.2,76,101200,601,1330,408,326,286,196,34500,29000,21400,4340,170,5.7,8,4,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101200,357,1330,405,137,133,101,14900,11700,11800,2230,190,5.7,7,5,32.0,7620,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,21.7,82,101200,107,1275,395,29,12,28,3200,700,3100,670,180,3.6,5,3,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101300,0,0,383,0,0,0,0,0,0,0,210,2.6,2,1,32.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101200,0,0,390,0,0,0,0,0,0,0,190,3.1,4,3,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.8,94,101200,0,0,387,0,0,0,0,0,0,0,190,3.1,4,2,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101200,0,0,393,0,0,0,0,0,0,0,190,3.1,4,4,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101200,0,0,386,0,0,0,0,0,0,0,210,2.6,2,2,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101100,0,0,370,0,0,0,0,0,0,0,220,2.6,0,0,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101100,0,0,371,0,0,0,0,0,0,0,220,2.6,0,0,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101100,0,0,368,0,0,0,0,0,0,0,220,2.6,2,0,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101000,0,0,375,0,0,0,0,0,0,0,210,3.1,3,1,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101000,0,0,375,0,0,0,0,0,0,0,220,3.1,2,1,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101100,103,1253,386,27,1,27,3000,0,3000,900,220,3.6,5,3,20.8,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101100,352,1330,400,105,35,96,11500,3100,10700,2500,220,3.6,7,7,19.2,3658,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.2,82,101000,596,1330,402,290,235,184,30800,23800,20100,4010,220,3.6,4,4,24.0,77777,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,22.2,79,101000,816,1330,416,416,140,330,44900,14600,35900,9040,240,3.6,7,7,24.0,2438,9,999999999,350,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.8,77,101000,995,1330,418,414,98,340,45600,10100,38000,12670,200,4.6,6,6,24.0,7620,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,101000,1122,1330,428,703,264,480,76300,28000,52700,19120,220,3.6,7,7,24.0,3048,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.7,63,100900,1188,1330,441,642,169,490,69900,17900,53900,22770,190,4.6,9,8,24.0,3048,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.2,67,100800,1188,1330,432,719,183,555,77800,19300,60400,25810,180,4.6,7,7,24.0,3048,9,999999999,340,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.8,70,100700,1123,1330,440,316,32,289,35000,3300,32200,12870,180,5.2,8,8,24.0,3658,9,999999999,329,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.8,70,100600,996,1330,433,498,138,394,54100,14600,43100,12850,190,5.2,7,7,24.0,3658,9,999999999,329,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,23.3,77,100600,816,1330,434,393,187,278,42900,19600,30800,7610,200,5.7,8,8,20.8,3658,9,999999999,329,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,23.3,77,100600,597,1330,419,259,145,194,28200,14600,21600,4670,210,4.6,7,5,20.8,7620,9,999999999,320,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,100600,352,1330,446,135,14,131,14700,900,14500,4060,200,3.1,9,9,24.0,3658,9,999999999,320,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,21.7,56,100600,103,1253,465,25,0,25,2800,0,2800,850,280,6.2,9,9,24.0,1341,9,999999999,320,0.1990,0,88,0.140,1.0,1.0 +1995,8,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,23.3,70,100700,0,0,421,0,0,0,0,0,0,0,310,5.2,3,3,20.8,77777,9,999999999,309,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.2,70,100700,0,0,396,0,0,0,0,0,0,0,320,4.1,0,0,20.8,77777,9,999999999,309,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,100800,0,0,396,0,0,0,0,0,0,0,300,4.1,0,0,20.8,77777,9,999999999,309,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,100800,0,0,391,0,0,0,0,0,0,0,290,3.1,0,0,20.8,77777,9,999999999,309,0.1990,0,88,0.140,0.0,1.0 +1995,8,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,100800,0,0,407,0,0,0,0,0,0,0,290,3.1,3,3,20.8,77777,9,999999999,300,0.1990,0,88,0.140,0.0,1.0 +1995,8,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.6,65,100800,0,0,430,0,0,0,0,0,0,0,320,4.1,8,8,24.0,2286,9,999999999,300,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,100800,0,0,399,0,0,0,0,0,0,0,330,4.6,2,2,24.0,77777,9,999999999,300,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,100900,0,0,386,0,0,0,0,0,0,0,360,4.6,1,1,24.0,77777,9,999999999,290,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,100900,0,0,375,0,0,0,0,0,0,0,360,5.2,0,0,24.0,77777,9,999999999,290,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.8,69,101000,0,0,369,0,0,0,0,0,0,0,350,4.1,0,0,24.0,77777,9,999999999,290,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,101100,100,1231,368,26,6,25,2900,0,2900,850,360,5.2,0,0,24.0,77777,9,999999999,279,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.7,60,101100,348,1331,373,142,171,97,15000,14600,11200,1900,10,4.6,0,0,32.0,77777,9,999999999,279,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,15.6,52,101200,593,1331,377,324,358,164,34800,36300,18600,3490,30,4.1,0,0,32.0,77777,9,999999999,290,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,14.4,44,101100,813,1331,384,515,483,220,54500,49500,24200,5310,10,5.2,0,0,32.0,77777,9,999999999,290,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,14.4,41,101200,993,1331,390,679,561,261,72800,58400,29200,8120,330,4.1,0,0,32.0,77777,9,999999999,300,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,13.3,36,101100,1120,1331,394,796,606,286,86100,63300,32600,11900,350,4.1,0,0,32.0,77777,9,999999999,309,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,12.2,32,101100,1185,1331,396,857,626,299,89600,62900,33400,14840,350,4.6,0,0,32.0,77777,9,999999999,309,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,13.3,34,101100,1185,1331,400,857,626,299,89600,62900,33400,14840,10,4.1,0,0,32.0,77777,9,999999999,320,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,13.3,33,101100,1119,1331,403,795,604,286,85900,63100,32600,11890,20,3.1,0,0,32.0,77777,9,999999999,320,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,16.1,42,101100,992,1331,401,677,559,260,72500,58200,29100,8080,210,3.6,0,0,32.0,77777,9,999999999,329,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,15.6,42,101100,812,1331,397,514,467,228,54100,47900,24800,5520,210,4.1,2,0,32.0,77777,9,999999999,329,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,16.7,46,101100,592,1331,395,321,330,174,34300,33500,19400,3750,200,4.1,3,0,32.0,77777,9,999999999,340,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,15.0,43,101100,347,1331,391,141,163,98,14900,13900,11200,1920,170,3.1,1,0,32.0,77777,9,999999999,350,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.3,64,101100,98,1209,378,25,6,25,2900,0,2900,850,200,4.6,0,0,32.0,77777,9,999999999,350,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101200,0,0,377,0,0,0,0,0,0,0,200,3.6,0,0,32.0,77777,9,999999999,359,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101200,0,0,374,0,0,0,0,0,0,0,210,3.6,0,0,32.0,77777,9,999999999,359,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101200,0,0,381,0,0,0,0,0,0,0,190,3.1,1,1,32.0,77777,9,999999999,370,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101300,0,0,371,0,0,0,0,0,0,0,210,2.6,0,0,32.0,77777,9,999999999,379,0.1980,0,88,0.140,0.0,1.0 +1995,8,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101300,0,0,368,0,0,0,0,0,0,0,220,2.6,0,0,32.0,77777,9,999999999,379,0.1980,0,88,0.140,0.0,1.0 +1995,8,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101300,0,0,371,0,0,0,0,0,0,0,230,3.6,0,0,32.0,77777,9,999999999,390,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101300,0,0,367,0,0,0,0,0,0,0,230,3.1,0,0,32.0,77777,9,999999999,390,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101300,0,0,360,0,0,0,0,0,0,0,230,2.6,0,0,32.0,77777,9,999999999,400,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101300,0,0,377,0,0,0,0,0,0,0,220,2.6,3,3,32.0,77777,9,999999999,409,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101300,0,0,375,0,0,0,0,0,0,0,240,2.6,2,2,24.0,77777,9,999999999,409,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101400,96,1209,377,26,12,25,2900,700,2800,610,240,2.6,3,1,19.2,77777,9,999999999,419,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101400,345,1331,382,149,206,96,15800,17500,11300,1870,220,2.6,1,1,16.0,77777,9,999999999,419,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101400,590,1331,382,335,435,142,35500,42700,16500,2850,260,3.1,0,0,19.2,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.1,69,101400,810,1331,389,525,541,195,56200,55600,22300,4640,190,2.6,2,0,20.8,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.1,67,101400,990,1331,400,670,544,265,71600,56600,29400,8210,180,3.6,8,1,20.8,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.7,67,101400,1117,1331,409,747,560,276,80900,58600,31700,11370,200,5.2,6,2,20.8,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,21.7,65,101400,1183,1331,416,788,458,381,83400,47800,40900,19660,190,4.6,8,3,20.8,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.1,61,101300,1182,1331,414,831,557,336,89100,58200,37300,17200,180,5.2,7,2,19.2,77777,9,999999999,430,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,20.0,55,101300,1116,1331,420,734,480,331,78100,50100,36000,13750,170,5.2,9,3,19.2,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.1,65,101300,989,1331,408,641,485,281,68100,50400,30600,8720,180,6.2,10,2,19.2,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.6,65,101300,808,1331,415,405,266,243,43700,28300,26500,6060,180,5.7,10,5,20.8,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,20.6,67,101300,588,1331,402,319,339,169,34100,34300,19000,3620,180,6.7,7,2,20.8,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101300,342,1331,400,139,144,102,15100,12400,11900,2240,170,5.7,10,3,20.8,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101400,93,1187,397,25,4,24,2700,0,2700,820,180,4.1,7,4,24.0,77777,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101400,0,0,414,0,0,0,0,0,0,0,180,3.6,8,8,24.0,3962,9,999999999,440,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101500,0,0,423,0,0,0,0,0,0,0,180,3.6,10,9,24.0,1676,9,999999999,450,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,101500,0,0,411,0,0,0,0,0,0,0,170,4.1,9,8,24.0,3962,9,999999999,450,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101500,0,0,420,0,0,0,0,0,0,0,180,2.1,9,9,24.0,1981,9,999999999,450,0.1970,0,88,0.140,0.0,1.0 +1995,8,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101500,0,0,412,0,0,0,0,0,0,0,170,3.6,8,8,24.0,1981,9,999999999,450,0.1970,0,88,0.140,0.0,1.0 +1995,8,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101500,0,0,411,0,0,0,0,0,0,0,180,2.6,8,8,24.0,4267,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101500,0,0,433,0,0,0,0,0,0,0,170,2.1,10,10,24.0,1219,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101500,0,0,432,0,0,0,0,0,0,0,170,2.1,10,10,24.0,1341,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101500,0,0,433,0,0,0,0,0,0,0,180,2.1,10,10,24.0,2896,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101600,0,0,433,0,0,0,0,0,0,0,140,1.5,10,10,20.8,1219,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101600,93,1188,434,14,0,14,1600,0,1600,530,140,2.6,10,10,20.8,1128,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101600,342,1332,413,116,78,96,12600,6700,10900,2110,170,2.6,9,8,20.8,1097,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101600,587,1332,410,302,246,194,32000,24800,21100,4280,170,3.6,7,5,24.0,7620,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101600,807,1332,424,426,307,239,46000,32700,26200,5940,160,3.6,8,8,24.0,1158,9,999999999,459,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101700,987,1332,412,501,256,310,54400,27700,33900,9550,160,3.6,7,4,24.0,7620,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,17.8,53,101700,1114,1332,430,508,270,281,56500,29400,31900,10700,180,4.6,8,8,24.0,1219,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.3,53,101600,1180,1332,415,793,675,194,85400,69400,23800,9730,170,4.6,4,4,24.0,77777,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,17.8,50,101600,1180,1332,414,821,718,184,85800,72100,21800,8350,150,4.6,3,3,32.0,77777,9,999999999,450,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,18.9,55,101600,1113,1332,396,830,854,117,85800,85500,14200,3840,160,3.1,0,0,32.0,77777,9,999999999,440,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,17.8,53,101500,985,1332,391,719,826,107,74400,82400,13300,2720,150,5.2,0,0,32.0,77777,9,999999999,440,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,18.9,58,101500,804,1332,390,562,776,93,59900,77800,12800,2260,150,3.6,0,0,32.0,77777,9,999999999,440,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,18.3,56,101400,583,1332,389,374,686,73,39200,66200,10200,1540,140,4.1,0,0,32.0,77777,9,999999999,440,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.2,56,101500,337,1332,382,180,513,50,18800,43300,7900,950,140,4.1,0,0,32.0,77777,9,999999999,430,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.9,69,101400,89,1165,375,30,151,18,3100,7800,2500,330,100,1.5,0,0,32.0,77777,9,999999999,430,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.9,71,101400,0,0,372,0,0,0,0,0,0,0,120,2.6,0,0,32.0,77777,9,999999999,430,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101500,0,0,373,0,0,0,0,0,0,0,120,2.1,0,0,24.0,77777,9,999999999,430,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.1,87,101500,0,0,370,0,0,0,0,0,0,0,100,2.1,0,0,24.0,77777,9,999999999,419,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101500,0,0,373,0,0,0,0,0,0,0,110,2.6,0,0,24.0,77777,9,999999999,419,0.1960,0,88,0.140,0.0,1.0 +1995,8,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,367,0,0,0,0,0,0,0,50,2.1,0,0,20.8,77777,9,999999999,419,0.1960,0,88,0.140,0.0,1.0 +1995,8,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101500,0,0,367,0,0,0,0,0,0,0,50,2.6,0,0,20.8,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101400,0,0,374,0,0,0,0,0,0,0,100,2.1,1,1,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.2,94,101400,0,0,428,0,0,0,0,0,0,0,110,2.6,10,10,11.2,122,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,22.8,97,101400,0,0,429,0,0,0,0,0,0,0,30,2.6,10,10,1.6,91,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101400,0,0,393,0,0,0,0,0,0,0,360,3.6,6,6,9.6,122,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101500,90,1166,413,21,0,21,2400,0,2400,740,60,2.5,10,9,2.4,90,9,999999999,400,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,22.2,90,101500,338,1332,431,45,0,45,5300,0,5300,1860,50,3.1,10,10,3.2,122,9,999999999,400,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,22.8,88,101500,584,1332,439,74,0,74,8900,0,8900,3400,60,3.1,10,10,9.6,122,9,999999999,400,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.3,79,101500,805,1332,424,387,246,238,41800,26200,26000,5900,10,3.1,7,7,12.8,244,9,999999999,400,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,23.3,72,101500,985,1332,425,659,518,276,70100,53800,30200,8490,80,2.6,5,5,14.4,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,22.8,63,101400,1112,1332,434,652,364,348,71500,39500,38400,13480,80,3.1,5,5,17.6,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,23.9,68,101400,1177,1332,429,855,641,288,89500,64500,32400,13850,120,3.6,3,3,19.2,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,22.8,58,101300,1177,1332,440,873,604,338,93400,63100,37500,16900,90,4.1,4,4,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,22.8,58,101300,1110,1332,440,673,454,294,72400,47400,32800,11890,130,4.1,4,4,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,22.8,58,101300,981,1332,432,643,539,246,69200,56100,27800,7460,130,4.1,2,2,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,23.3,63,101200,800,1332,434,467,397,229,49100,40600,24700,5480,140,5.7,4,4,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,22.8,65,101200,579,1332,420,318,352,165,34100,35500,18600,3510,140,4.1,2,2,19.2,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.8,68,101200,332,1332,411,131,169,89,13900,14100,10400,1720,120,2.6,3,1,19.2,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.3,74,101200,84,1121,405,22,9,21,2400,500,2300,520,120,2.6,2,1,19.2,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,23.9,85,101200,0,0,398,0,0,0,0,0,0,0,100,3.1,4,1,17.6,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,24.4,87,101200,0,0,398,0,0,0,0,0,0,0,80,2.6,2,1,14.4,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,25.0,94,101200,0,0,427,0,0,0,0,0,0,0,110,3.1,8,8,12.8,244,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,25.0,94,101200,0,0,415,0,0,0,0,0,0,0,100,3.1,6,6,11.2,183,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,25.0,96,101200,0,0,402,0,0,0,0,0,0,0,70,2.6,3,3,9.6,77777,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,25.0,94,101200,0,0,427,0,0,0,0,0,0,0,60,2.6,8,8,9.6,213,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,24.4,93,101100,0,0,416,0,0,0,0,0,0,0,40,3.1,7,7,11.2,274,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.9,90,101100,0,0,422,0,0,0,0,0,0,0,40,3.1,8,8,11.2,244,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,101100,0,0,428,0,0,0,0,0,0,0,30,3.6,9,9,8.0,152,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,23.9,94,101100,0,0,428,0,0,0,0,0,0,0,60,4.1,9,9,8.0,183,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,23.9,90,101100,86,1144,431,20,0,20,2300,0,2300,710,60,3.6,9,9,9.6,213,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,24.4,87,101200,335,1333,429,120,53,106,13100,4600,11900,2650,40,4.6,8,8,9.6,274,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,23.9,82,101200,581,1333,425,222,41,204,24300,4000,22600,5680,40,5.7,7,7,11.2,335,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,23.3,74,101200,802,1333,437,261,57,226,28700,5700,25200,7530,60,5.7,8,8,12.8,518,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.8,70,101100,982,1333,433,323,125,231,36300,13400,26400,7380,40,7.2,7,7,12.8,610,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,22.8,68,101100,1109,1333,443,598,247,392,64900,26800,42600,15320,40,6.2,8,8,12.8,640,9,999999999,430,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,22.2,59,101100,1174,1333,445,473,188,307,52700,20500,34600,13770,60,6.7,7,7,16.0,884,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,21.7,57,101000,1174,1333,451,611,202,433,67100,21500,48100,19260,60,6.2,8,8,19.2,7620,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,22.8,61,101000,1106,1333,440,745,455,366,78200,47300,38800,14860,30,5.2,7,6,19.2,7620,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,21.7,57,101000,978,1333,451,484,184,349,52900,19500,38600,11100,60,5.2,9,8,19.2,7620,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,22.2,59,100900,796,1333,445,324,135,243,35600,14200,27100,6550,50,6.7,10,7,19.2,7620,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,21.7,57,100900,574,1333,451,201,45,181,22000,4400,20100,5150,40,7.7,10,8,19.2,7620,9,999999999,419,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,21.7,61,100900,327,1333,438,98,29,91,10700,2500,10100,2330,50,7.7,10,7,19.2,7620,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.7,63,101000,80,1100,463,14,0,14,1600,0,1600,520,50,4.6,10,10,17.6,1829,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,19.4,57,101000,0,0,445,0,0,0,0,0,0,0,50,4.6,9,9,19.2,2134,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,18.3,55,101100,0,0,440,0,0,0,0,0,0,0,40,5.2,9,9,20.8,2134,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,101000,0,0,414,0,0,0,0,0,0,0,40,5.7,7,7,20.8,7620,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.3,60,101000,0,0,400,0,0,0,0,0,0,0,30,5.7,4,3,20.8,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,16.7,54,101000,0,0,394,0,0,0,0,0,0,0,20,5.7,4,2,24.0,77777,9,999999999,409,0.1950,0,88,0.140,0.0,1.0 +1995,8,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,100900,0,0,388,0,0,0,0,0,0,0,30,5.7,6,2,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,15.6,54,100900,0,0,382,0,0,0,0,0,0,0,30,4.6,4,1,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,14.4,50,100900,0,0,380,0,0,0,0,0,0,0,30,6.2,2,1,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.1,58,100900,0,0,379,0,0,0,0,0,0,0,20,5.7,3,1,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,15.6,56,101000,0,0,379,0,0,0,0,0,0,0,20,6.2,2,1,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.1,58,101000,83,1122,379,24,68,18,2600,2800,2300,300,20,5.2,1,1,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,16.7,56,101100,331,1333,378,167,435,59,17300,36200,8300,1090,20,6.7,0,0,24.0,77777,9,999999999,400,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,15.6,47,101100,578,1333,386,361,627,89,38100,60800,11700,1830,40,9.3,0,0,24.0,77777,9,999999999,390,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,14.4,40,101200,799,1333,393,544,712,117,58200,72100,14800,2840,30,7.2,1,0,24.0,77777,9,999999999,390,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,13.9,36,101200,979,1333,415,609,491,248,65400,51100,27800,7480,40,7.7,8,3,24.0,77777,9,999999999,379,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,13.9,34,101200,1106,1333,412,804,796,143,85600,80500,18600,5370,60,6.7,2,1,32.0,77777,9,999999999,379,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,13.3,31,101200,1172,1333,409,881,833,148,94200,84500,19800,6790,60,6.2,0,0,32.0,77777,9,999999999,370,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,13.3,30,101100,1170,1333,412,880,833,148,94100,84400,19800,6760,80,6.2,0,0,32.0,77777,9,999999999,370,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,13.9,31,101100,1103,1333,420,784,754,160,82400,75900,19500,5790,30,6.7,1,1,32.0,77777,9,999999999,359,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,14.4,33,101100,974,1333,424,665,699,155,71300,71500,19000,4690,60,6.7,2,2,24.0,77777,9,999999999,359,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,14.4,33,101200,791,1333,428,505,625,133,53400,62900,15900,3150,50,5.2,3,3,24.0,77777,9,999999999,359,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,13.9,34,101200,569,1333,412,326,555,89,34300,53600,11400,1820,60,5.7,2,1,24.0,77777,9,999999999,350,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,14.4,39,101300,321,1333,413,113,234,56,12100,19100,7500,990,60,6.2,3,3,24.0,77777,9,999999999,350,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.2,60,101300,75,1056,384,21,60,17,2300,2300,2200,290,100,3.1,2,1,24.0,77777,9,999999999,340,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,15.0,50,101400,0,0,393,0,0,0,0,0,0,0,80,6.2,4,3,24.0,77777,9,999999999,340,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,101500,0,0,376,0,0,0,0,0,0,0,70,6.7,2,1,24.0,77777,9,999999999,329,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.9,54,101500,0,0,364,0,0,0,0,0,0,0,60,4.1,0,0,24.0,77777,9,999999999,329,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,13.9,55,101600,0,0,361,0,0,0,0,0,0,0,70,3.6,0,0,24.0,77777,9,999999999,320,0.1940,0,88,0.140,0.0,1.0 +1995,8,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,12.8,53,101600,0,0,358,0,0,0,0,0,0,0,60,4.6,0,0,24.0,77777,9,999999999,320,0.1940,0,88,0.140,0.0,1.0 +1995,8,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,101600,0,0,353,0,0,0,0,0,0,0,40,3.6,0,0,24.0,77777,9,999999999,309,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.2,55,101600,0,0,352,0,0,0,0,0,0,0,50,3.1,0,0,24.0,77777,9,999999999,309,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.8,61,101700,0,0,347,0,0,0,0,0,0,0,40,4.1,0,0,24.0,77777,9,999999999,309,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101700,0,0,345,0,0,0,0,0,0,0,50,4.6,0,0,24.0,77777,9,999999999,300,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,101700,0,0,343,0,0,0,0,0,0,0,40,4.6,0,0,24.0,77777,9,999999999,300,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101900,80,1100,345,20,12,19,2200,700,2100,480,40,4.6,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,101900,328,1334,351,139,227,83,14800,18900,10100,1580,50,5.2,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.3,57,101900,575,1334,355,325,434,138,34400,42300,16100,2740,50,6.2,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,12.8,53,101900,796,1334,358,518,560,183,55600,57400,21300,4260,30,7.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,10.6,42,101900,976,1334,363,681,635,216,71200,63900,24300,6310,50,6.2,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,10.0,36,101900,1104,1334,370,798,678,237,84100,68700,27200,9160,40,5.2,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,8.9,32,101900,1169,1334,374,858,697,246,90700,70800,28600,11580,70,5.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,7.8,29,101800,1167,1334,373,856,697,246,90600,70800,28600,11520,60,5.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,6.7,26,101800,1099,1334,377,794,677,236,83700,68600,27100,9020,50,5.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,7.8,27,101700,970,1334,382,675,633,215,70600,63700,24200,6210,60,5.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,12.8,41,101700,787,1334,379,510,556,182,54800,57000,21100,4210,120,4.6,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,101700,564,1334,370,316,426,136,33400,41400,15900,2690,110,5.7,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.0,60,101800,316,1334,363,132,215,81,14000,17600,9900,1540,110,5.2,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.0,64,101800,71,1034,357,17,9,17,1900,500,1900,430,120,4.6,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.0,64,101900,0,0,357,0,0,0,0,0,0,0,90,4.1,0,0,32.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.6,71,101900,0,0,353,0,0,0,0,0,0,0,80,3.6,0,0,24.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101900,0,0,345,0,0,0,0,0,0,0,80,4.1,0,0,24.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,101900,0,0,341,0,0,0,0,0,0,0,70,4.1,0,0,24.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.8,70,102000,0,0,336,0,0,0,0,0,0,0,70,3.1,0,0,24.0,77777,9,999999999,290,0.1930,0,88,0.140,0.0,1.0 +1995,8,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.7,70,101900,0,0,330,0,0,0,0,0,0,0,60,2.6,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.7,75,101900,0,0,325,0,0,0,0,0,0,0,50,3.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,101900,0,0,322,0,0,0,0,0,0,0,30,3.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,101800,0,0,326,0,0,0,0,0,0,0,30,3.6,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.2,80,101800,0,0,323,0,0,0,0,0,0,0,70,2.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.3,83,101900,77,1079,327,19,8,19,2200,500,2100,470,30,5.2,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.3,75,101900,324,1334,335,133,192,86,14100,15900,10200,1650,20,4.1,1,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,9.4,52,101900,571,1334,338,317,404,144,33400,39300,16500,2870,40,4.1,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.0,47,101900,793,1334,349,509,533,193,54500,54600,22000,4510,20,4.6,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,9.4,40,101900,974,1334,359,673,610,228,70100,61200,25400,6570,10,5.2,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,9.4,35,101800,1101,1334,370,790,654,250,82900,66000,28300,9520,360,4.1,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,7.2,29,101700,1166,1334,370,850,675,261,89700,68300,29900,12080,20,3.6,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,7.2,27,101700,1164,1334,375,849,674,260,89400,68200,29800,11960,40,3.6,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,3.9,20,101600,1096,1334,377,786,653,249,82400,65900,28200,9360,20,3.6,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,7.8,28,101500,966,1334,376,666,607,226,69300,60900,25100,6420,200,2.1,0,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.1,40,101500,782,1334,369,438,418,192,46600,42800,21500,4440,200,4.1,1,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.9,50,101500,559,1334,370,306,388,143,32100,37600,16300,2840,170,4.1,1,0,32.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.1,64,101500,310,1334,364,124,176,83,13100,14200,9800,1590,160,3.6,1,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101400,66,990,360,16,5,16,1800,300,1800,400,170,3.1,1,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101400,0,0,358,0,0,0,0,0,0,0,170,2.6,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101400,0,0,355,0,0,0,0,0,0,0,230,2.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101400,0,0,354,0,0,0,0,0,0,0,240,2.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101300,0,0,358,0,0,0,0,0,0,0,260,3.1,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101300,0,0,355,0,0,0,0,0,0,0,270,3.6,0,0,24.0,77777,9,999999999,290,0.1920,0,88,0.140,0.0,1.0 +1995,8,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.6,71,101300,0,0,353,0,0,0,0,0,0,0,280,5.2,0,0,24.0,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,101300,0,0,349,0,0,0,0,0,0,0,240,2.6,0,0,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,101200,0,0,349,0,0,0,0,0,0,0,230,2.6,0,0,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,101200,0,0,351,0,0,0,0,0,0,0,230,3.6,0,0,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101200,0,0,351,0,0,0,0,0,0,0,260,3.6,0,0,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101300,74,1057,350,22,88,16,2500,3800,2200,270,270,3.1,0,0,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,101300,321,1335,365,149,379,58,15400,31100,7900,1070,250,3.6,3,1,24.0,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,14.4,57,101300,568,1335,369,286,471,85,30200,45600,10800,1750,250,3.1,1,1,19.2,77777,9,999999999,279,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,15.0,52,101200,790,1335,374,550,747,108,57600,74200,13600,2440,240,3.1,0,0,16.0,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,16.7,51,101200,971,1335,387,710,804,125,75300,81000,16200,3550,240,3.6,0,0,14.4,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,17.8,50,101200,1098,1335,397,823,835,136,88000,84600,18200,5030,240,4.1,0,0,14.4,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,17.2,43,101100,1163,1335,405,881,849,141,90400,85000,16200,4900,240,4.6,0,0,14.4,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,17.2,41,101100,1161,1335,411,879,849,141,90300,84900,16200,4870,220,6.2,0,0,14.4,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.7,18.9,47,101000,1092,1335,418,717,717,131,77000,72700,17300,4810,200,4.6,1,1,14.4,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,21.1,57,100900,961,1335,407,701,801,124,74300,80700,16000,3470,200,5.7,0,0,16.0,77777,9,999999999,290,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,21.7,63,100900,778,1335,402,539,742,107,56400,73600,13400,2390,190,6.2,0,0,16.0,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,22.2,67,100900,554,1335,400,346,635,82,36500,61100,11100,1670,190,5.7,0,0,14.4,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,22.8,72,100900,305,1335,397,152,429,54,15700,34600,7800,990,190,3.6,0,0,14.4,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,19.4,51,101000,62,968,405,18,71,13,2000,2900,1800,220,240,4.1,0,0,16.0,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.1,65,101000,0,0,395,0,0,0,0,0,0,0,230,3.6,0,0,14.4,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,21.1,65,101100,0,0,395,0,0,0,0,0,0,0,240,5.7,0,0,14.4,77777,9,999999999,300,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.7,69,101100,0,0,406,0,0,0,0,0,0,0,240,4.6,2,2,14.4,77777,9,999999999,309,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101100,0,0,410,0,0,0,0,0,0,0,240,4.6,4,4,14.4,77777,9,999999999,309,0.1910,0,88,0.140,0.0,1.0 +1995,8,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,21.7,72,101100,0,0,403,0,0,0,0,0,0,0,250,4.6,2,2,12.8,77777,9,999999999,309,0.1910,0,88,0.140,0.0,1.0 +1995,8,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101100,0,0,387,0,0,0,0,0,0,0,260,4.1,0,0,11.2,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,19.4,64,101100,0,0,385,0,0,0,0,0,0,0,310,3.6,0,0,12.8,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,13.3,42,101100,0,0,380,0,0,0,0,0,0,0,320,4.6,0,0,24.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.8,44,101100,0,0,374,0,0,0,0,0,0,0,310,3.1,0,0,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,101200,0,0,370,0,0,0,0,0,0,0,290,3.1,0,0,32.0,77777,9,999999999,320,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,101300,71,1035,369,22,102,15,2500,4400,2100,260,290,3.6,0,0,32.0,77777,9,999999999,320,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,14.4,48,101300,317,1336,376,164,473,51,17000,38900,7700,960,320,6.2,0,0,32.0,77777,9,999999999,320,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,13.9,45,101400,565,1336,378,359,666,77,38200,64600,10800,1600,330,6.2,0,0,32.0,77777,9,999999999,320,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,13.3,41,101400,787,1336,383,550,764,99,58000,76200,13000,2300,340,6.2,0,0,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,12.8,38,101400,968,1336,392,705,819,111,75600,82900,15400,3250,330,5.7,1,1,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,12.8,36,101400,1095,1336,403,755,729,157,79400,73400,19100,5550,350,5.2,2,2,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,12.2,33,101400,1159,1336,413,812,625,269,85300,63100,30400,12110,330,6.7,4,4,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,11.7,31,101300,1157,1336,416,815,705,204,87400,72200,24700,9330,330,5.7,4,4,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,11.1,29,101300,1088,1336,414,729,677,177,78300,69500,21600,6720,320,7.7,3,3,32.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,9.4,28,101300,957,1336,402,653,715,140,70300,73300,17600,4150,340,6.7,2,2,24.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,8.9,28,101400,773,1336,402,508,608,155,52900,60600,17800,3510,320,6.7,3,3,24.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,8.3,27,101400,548,1336,382,346,658,76,36800,63400,10700,1560,320,6.7,0,0,24.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,8.3,29,101500,299,1336,377,151,454,50,15700,36500,7500,930,320,5.7,0,0,20.8,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,8.3,31,101600,58,946,371,17,81,12,1900,3300,1700,200,310,5.7,0,0,20.8,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,8.3,32,101700,0,0,368,0,0,0,0,0,0,0,350,5.2,0,0,24.0,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,8.3,33,101800,0,0,366,0,0,0,0,0,0,0,330,5.2,0,0,32.0,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,8.3,36,101800,0,0,360,0,0,0,0,0,0,0,330,5.2,0,0,32.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,8.9,40,101900,0,0,355,0,0,0,0,0,0,0,350,4.6,0,0,32.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,8.9,43,101900,0,0,350,0,0,0,0,0,0,0,10,4.1,0,0,32.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.0,47,101900,0,0,349,0,0,0,0,0,0,0,10,4.6,0,0,32.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.6,55,101900,0,0,342,0,0,0,0,0,0,0,20,3.6,0,0,32.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.6,55,101900,0,0,342,0,0,0,0,0,0,0,10,3.6,0,0,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.1,63,101900,0,0,334,0,0,0,0,0,0,0,30,2.6,0,0,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.1,61,101900,0,0,337,0,0,0,0,0,0,0,350,2.6,3,0,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.7,63,102000,68,1013,349,19,5,18,2100,0,2100,630,30,2.6,7,2,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,11.1,54,102100,313,1336,363,112,83,92,12100,6900,10500,2000,20,3.1,8,4,32.0,77777,9,999999999,259,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,11.1,49,102100,562,1336,371,251,220,158,26800,22000,17600,3330,10,4.1,7,4,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.1,48,102100,784,1336,374,470,374,250,50500,39600,27100,6170,20,4.6,8,4,32.0,7620,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.6,43,102100,965,1336,372,631,517,257,67300,53700,28400,7570,360,3.6,6,2,32.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,10.0,36,102100,1092,1336,386,714,436,357,75000,45400,37900,13860,50,1.5,5,3,24.0,77777,9,999999999,270,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,9.4,35,102000,1156,1336,382,825,635,275,86500,64000,31000,12200,170,2.6,2,2,24.0,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,102000,1154,1336,377,757,551,281,82300,57700,32400,12760,210,4.6,1,1,20.8,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.2,43,101900,1084,1336,383,754,514,336,79600,53500,36100,12750,200,5.2,4,2,19.2,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,101800,953,1336,386,623,478,281,65700,49500,30300,8190,190,5.2,4,3,19.2,77777,9,999999999,279,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.8,45,101700,768,1336,384,429,395,201,45300,40300,22100,4610,180,4.6,5,2,19.2,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.9,50,101700,543,1336,377,289,371,138,30300,35700,15800,2720,190,5.7,4,1,19.2,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.9,54,101700,293,1336,364,119,186,78,12600,14600,9400,1490,190,6.2,2,0,19.2,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.1,66,101700,54,902,361,12,5,12,1400,300,1300,310,210,6.7,0,0,19.2,77777,9,999999999,290,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.7,68,101700,0,0,362,0,0,0,0,0,0,0,210,7.2,0,0,24.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101700,0,0,363,0,0,0,0,0,0,0,200,6.7,0,0,24.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.7,71,101700,0,0,359,0,0,0,0,0,0,0,210,6.2,0,0,32.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.2,73,101600,0,0,360,0,0,0,0,0,0,0,220,5.7,0,0,32.0,77777,9,999999999,300,0.1900,0,88,0.140,0.0,1.0 +1995,8,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.2,73,101600,0,0,360,0,0,0,0,0,0,0,220,4.6,0,0,32.0,77777,9,999999999,309,0.1900,0,88,0.140,0.0,1.0 +1995,8,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101500,0,0,357,0,0,0,0,0,0,0,230,4.6,0,0,32.0,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.7,73,101500,0,0,357,0,0,0,0,0,0,0,240,5.7,0,0,32.0,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101400,0,0,353,0,0,0,0,0,0,0,250,6.7,0,0,32.0,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101300,0,0,353,0,0,0,0,0,0,0,240,5.7,0,0,24.0,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101400,0,0,354,0,0,0,0,0,0,0,250,6.7,0,0,24.0,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.1,73,101400,66,991,353,16,6,15,1700,300,1700,380,250,5.7,0,0,20.8,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101400,310,1337,358,125,190,81,13300,15400,9700,1550,250,5.7,0,0,20.8,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.1,62,101400,558,1337,367,307,400,139,32200,38700,16000,2750,250,5.7,0,0,19.2,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,15.6,54,101300,781,1337,382,452,426,203,47900,43500,22400,4710,250,5.7,1,1,17.6,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,16.1,51,101300,962,1337,383,662,610,223,69000,61200,24800,6290,260,6.2,0,0,16.0,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,16.1,45,101200,1089,1337,395,778,655,245,81700,66100,27700,9010,270,5.2,0,0,16.0,77777,9,999999999,320,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,16.7,43,101100,1153,1337,402,838,675,255,88300,68300,29200,11260,270,5.7,0,0,17.6,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.2,16.1,38,101000,1150,1337,423,684,387,351,72700,40400,37900,15930,290,7.2,2,2,19.2,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,32.8,16.7,38,101000,1080,1337,431,730,421,390,79100,45600,42200,14300,280,7.2,3,3,19.2,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.9,12.8,28,100900,948,1337,428,622,534,243,66600,55400,27200,6940,300,8.8,4,2,20.8,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.9,11.7,26,100900,763,1337,431,426,330,237,45800,34900,25800,5720,300,6.7,4,3,20.8,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,33.3,8.3,21,101000,537,1337,426,258,223,168,27300,22000,18400,3580,330,9.8,5,4,20.8,77777,9,999999999,309,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,11.1,29,101000,287,1337,414,100,75,84,10900,6000,9600,1820,340,6.7,8,3,24.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,7.2,25,101100,50,880,396,13,1,13,1500,0,1500,470,340,7.2,7,2,24.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,8.3,30,101200,0,0,374,0,0,0,0,0,0,0,350,7.7,3,0,24.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,8.3,33,101300,0,0,373,0,0,0,0,0,0,0,360,8.2,2,1,24.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,6.1,31,101400,0,0,373,0,0,0,0,0,0,0,360,7.7,8,3,32.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,5.6,33,101400,0,0,367,0,0,0,0,0,0,0,350,7.7,7,4,32.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.2,38,101500,0,0,366,0,0,0,0,0,0,0,350,5.2,9,4,32.0,77777,9,999999999,300,0.1890,0,88,0.140,0.0,1.0 +1995,8,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,7.8,42,101500,0,0,359,0,0,0,0,0,0,0,350,6.2,8,3,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.3,45,101500,0,0,353,0,0,0,0,0,0,0,360,5.7,7,2,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.3,47,101500,0,0,362,0,0,0,0,0,0,0,360,5.2,8,6,32.0,3962,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.9,51,101600,0,0,357,0,0,0,0,0,0,0,350,4.1,7,5,32.0,7620,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,9.4,54,101700,0,0,350,0,0,0,0,0,0,0,360,4.6,3,3,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.0,60,101800,63,970,331,15,15,14,1700,700,1700,290,30,4.1,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,101900,306,1337,331,132,259,73,13800,20600,9100,1330,10,4.6,0,0,32.0,77777,9,999999999,279,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,7.8,47,101900,555,1337,336,319,480,120,34100,46500,14800,2340,20,4.1,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,6.7,40,101900,778,1337,340,512,606,159,53300,60300,18200,3600,10,5.2,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,6.7,38,101900,959,1337,345,675,680,188,71200,68800,21800,5400,10,5.7,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,6.7,34,101900,1086,1337,353,790,720,205,84000,73400,24200,7610,360,5.2,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,6.7,32,101900,1150,1337,358,849,738,214,90600,75400,25600,9480,20,4.6,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,7.2,32,101800,1146,1337,361,846,738,213,90300,75400,25500,9340,20,3.6,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,6.7,28,101800,1076,1337,369,782,717,204,83000,73000,24100,7400,10,5.2,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,7.2,29,101700,944,1337,370,661,674,185,69600,68200,21400,5180,360,4.6,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,7.2,29,101700,758,1337,370,494,597,156,51500,59300,17800,3470,40,5.2,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,6.1,27,101700,532,1337,368,300,463,116,32000,44400,14300,2240,40,4.6,0,0,32.0,77777,9,999999999,290,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,5.6,28,101800,281,1337,362,117,231,68,12400,17800,8700,1270,30,5.7,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,6.7,33,101900,46,836,356,10,8,10,1200,400,1100,260,10,4.1,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,7.2,35,101900,0,0,353,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,8.9,41,102000,0,0,353,0,0,0,0,0,0,0,70,2.6,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.0,49,102000,0,0,346,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.0,53,102000,0,0,341,0,0,0,0,0,0,0,80,2.6,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.2,68,102000,0,0,336,0,0,0,0,0,0,0,70,2.6,0,0,32.0,77777,9,999999999,300,0.1880,0,88,0.140,0.0,1.0 +1995,8,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.6,61,102100,0,0,334,0,0,0,0,0,0,0,40,3.6,0,0,32.0,77777,9,999999999,300,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,102000,0,0,332,0,0,0,0,0,0,0,50,2.1,0,0,32.0,77777,9,999999999,300,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,102000,0,0,327,0,0,0,0,0,0,0,60,2.1,0,0,32.0,77777,9,999999999,300,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.1,72,102000,0,0,324,0,0,0,0,0,0,0,50,3.1,1,0,32.0,77777,9,999999999,309,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.1,72,102000,0,0,331,0,0,0,0,0,0,0,50,2.1,2,1,32.0,77777,9,999999999,309,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,102100,60,948,339,15,16,14,1700,700,1700,290,50,1.5,3,1,32.0,77777,9,999999999,309,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.2,63,102100,303,1338,352,129,206,82,13600,16400,9900,1580,30,2.6,2,2,32.0,77777,9,999999999,309,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,102100,552,1338,368,298,406,130,31500,39200,15300,2550,60,2.1,3,3,32.0,77777,9,999999999,320,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.8,52,102100,775,1338,372,488,550,169,52600,56300,20000,3830,200,3.6,2,2,32.0,77777,9,999999999,320,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.9,54,102000,956,1338,380,594,557,196,62400,56300,22100,5560,220,3.6,3,3,32.0,77777,9,999999999,329,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,13.9,52,101900,1082,1338,392,502,315,246,54600,32900,27900,9080,240,3.6,6,6,24.0,4267,9,999999999,340,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,14.4,52,101900,1146,1338,389,819,681,235,86700,69200,27300,10200,190,4.6,4,4,24.0,77777,9,999999999,340,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,14.4,50,101800,1143,1338,392,570,441,193,61200,45200,22500,8420,200,5.7,4,4,24.0,77777,9,999999999,350,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,15.6,54,101800,1072,1338,394,611,509,203,64900,51800,23200,7290,190,6.7,4,4,24.0,77777,9,999999999,359,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,101700,939,1338,398,484,452,166,53700,47100,20600,4550,180,7.7,5,5,24.0,77777,9,999999999,359,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.1,58,101700,753,1338,398,337,284,177,37000,30000,20000,4040,190,8.8,6,6,24.0,4267,9,999999999,370,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,16.1,60,101600,526,1338,395,244,218,157,25800,21400,17400,3300,180,8.2,6,6,24.0,4267,9,999999999,379,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.1,62,101600,275,1338,386,115,117,91,12400,9200,10500,1960,190,8.2,4,4,24.0,77777,9,999999999,379,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.1,64,101600,43,792,376,9,14,9,1100,600,1100,190,190,7.7,2,2,24.0,77777,9,999999999,390,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.7,66,101700,0,0,380,0,0,0,0,0,0,0,200,7.2,3,3,32.0,77777,9,999999999,400,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.6,64,101700,0,0,379,0,0,0,0,0,0,0,220,7.2,4,4,32.0,77777,9,999999999,409,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,101700,0,0,393,0,0,0,0,0,0,0,180,4.6,8,8,32.0,4267,9,999999999,409,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101700,0,0,402,0,0,0,0,0,0,0,220,4.6,9,9,32.0,3353,9,999999999,419,0.1870,0,88,0.140,0.0,1.0 +1995,8,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.7,71,101600,0,0,414,0,0,0,0,0,0,0,240,5.2,10,10,32.0,3353,9,999999999,430,0.1870,0,88,0.140,0.0,1.0 +1995,8,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101600,0,0,416,0,0,0,0,0,0,0,230,4.6,10,10,32.0,3048,9,999999999,430,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.9,82,101600,0,0,417,0,0,0,0,0,0,0,230,4.1,10,10,32.0,3962,9,999999999,440,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,375,0,0,0,0,0,0,0,240,4.1,3,3,32.0,77777,9,999999999,450,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,415,0,0,0,0,0,0,0,240,4.1,10,10,32.0,3962,9,999999999,450,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101500,0,0,404,0,0,0,0,0,0,0,250,4.1,9,9,32.0,3048,9,999999999,459,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101500,57,926,390,12,6,12,1400,300,1300,310,240,4.1,7,7,32.0,2743,9,999999999,469,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101500,299,1338,408,59,22,54,6500,1800,6100,1470,240,5.7,9,9,24.0,305,9,999999999,469,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101500,548,1338,396,158,111,112,17600,11100,13100,2640,240,5.7,9,7,20.8,244,9,999999999,469,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101500,771,1338,397,451,446,194,48000,45500,21700,4440,230,5.2,6,5,19.2,7620,9,999999999,459,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101500,952,1338,390,635,696,139,68300,71300,17400,4070,240,5.2,2,1,20.8,77777,9,999999999,459,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,19.4,62,101400,1079,1338,395,704,675,160,76200,69500,20000,5960,240,5.7,3,1,20.8,77777,9,999999999,450,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,20.0,61,101400,1143,1338,407,798,752,156,84600,75900,19600,6330,200,4.6,2,2,24.0,77777,9,999999999,440,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,20.6,65,101400,1139,1338,409,766,621,237,81000,63000,27200,10030,180,5.2,4,3,24.0,77777,9,999999999,440,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101400,1068,1338,419,487,290,255,54300,31500,29100,8630,190,5.7,7,7,24.0,1829,9,999999999,430,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,22.2,82,101400,934,1338,441,193,0,193,23000,0,23000,9200,180,5.2,10,10,24.0,1829,9,999999999,419,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101400,748,1338,413,380,222,256,41400,23000,28500,6670,180,4.1,7,7,20.8,4267,9,999999999,419,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101400,521,1338,419,257,112,214,28200,10900,23900,5470,120,3.1,8,8,24.0,4267,9,999999999,409,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101500,269,1338,428,74,17,71,8200,1400,7900,1790,140,3.6,10,9,24.0,3962,9,999999999,409,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101500,39,770,419,7,2,7,900,0,900,270,80,3.1,8,8,20.8,3962,9,999999999,400,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,101600,0,0,416,0,0,0,0,0,0,0,70,6.7,10,9,20.8,2743,9,999999999,390,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.7,68,101700,0,0,418,0,0,0,0,0,0,0,50,4.1,10,10,24.0,2134,9,999999999,390,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,101700,0,0,402,0,0,0,0,0,0,0,40,3.6,9,9,32.0,2286,9,999999999,379,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101700,0,0,414,0,0,0,0,0,0,0,50,3.6,10,10,32.0,1981,9,999999999,370,0.1860,0,88,0.140,0.0,1.0 +1995,8,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101800,0,0,414,0,0,0,0,0,0,0,40,3.1,10,10,32.0,2134,9,999999999,370,0.1860,0,88,0.140,0.0,1.0 +1995,8,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,101700,0,0,411,0,0,0,0,0,0,0,50,3.1,10,10,32.0,2134,9,999999999,359,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,101800,0,0,411,0,0,0,0,0,0,0,50,3.1,10,10,32.0,1981,9,999999999,350,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101800,0,0,379,0,0,0,0,0,0,0,50,3.1,7,7,32.0,1981,9,999999999,350,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101800,0,0,372,0,0,0,0,0,0,0,40,3.6,6,6,24.0,1829,9,999999999,340,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101800,0,0,373,0,0,0,0,0,0,0,50,3.1,7,7,24.0,1676,9,999999999,340,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101900,55,904,390,11,2,11,1300,0,1300,410,50,2.6,9,9,24.0,1981,9,999999999,329,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101900,295,1339,379,104,88,85,11300,7200,9800,1840,60,4.1,7,7,24.0,2134,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,14.4,59,102000,545,1339,375,311,478,117,33300,46100,14500,2270,60,5.2,3,3,24.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,102000,768,1339,381,487,537,178,52100,54800,20600,4030,90,4.6,2,2,24.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,11.1,42,101900,949,1339,382,587,547,199,61500,55200,22400,5560,100,4.6,3,3,32.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.8,45,101900,1076,1339,384,771,771,151,81200,77700,18700,5090,100,6.7,2,2,32.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.2,42,102000,1139,1339,395,806,676,230,85400,68700,26800,9760,120,6.7,5,5,32.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.7,41,102000,1135,1339,395,772,704,175,83400,72500,21900,7490,130,5.7,5,5,24.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,101900,1064,1339,386,714,669,182,76300,68400,21800,6460,110,5.7,3,3,24.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,11.7,42,101900,930,1339,377,670,806,111,71600,81300,15000,3030,110,5.2,1,1,24.0,77777,9,999999999,320,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,11.7,45,101900,742,1339,364,509,744,97,53500,73700,12600,2150,130,4.6,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,10.6,42,101900,515,1339,363,316,631,73,33400,59900,10300,1470,110,4.1,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,9.4,41,101800,263,1339,356,125,402,46,12900,30600,6900,840,100,6.7,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.1,51,101900,36,725,350,9,45,7,1100,1600,1000,120,100,3.6,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,101800,0,0,348,0,0,0,0,0,0,0,90,3.1,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.1,57,101800,0,0,342,0,0,0,0,0,0,0,60,2.6,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.1,59,101800,0,0,339,0,0,0,0,0,0,0,50,2.6,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.1,61,101800,0,0,337,0,0,0,0,0,0,0,50,2.6,0,0,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,101700,0,0,346,0,0,0,0,0,0,0,60,2.6,3,3,24.0,77777,9,999999999,309,0.1850,0,88,0.140,0.0,1.0 +1995,8,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.7,65,101700,0,0,341,0,0,0,0,0,0,0,50,3.1,1,1,24.0,77777,9,999999999,309,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,101700,0,0,344,0,0,0,0,0,0,0,40,3.1,2,2,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,101600,0,0,331,0,0,0,0,0,0,0,50,2.6,0,0,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.2,75,101600,0,0,328,0,0,0,0,0,0,0,40,2.6,0,0,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.8,78,101700,0,0,329,0,0,0,0,0,0,0,40,3.1,3,0,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.8,73,101700,52,882,340,13,10,12,1400,500,1400,310,40,3.1,4,1,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.0,73,101700,291,1340,362,128,273,69,13400,21300,8800,1260,50,3.1,3,3,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.0,68,101700,541,1340,359,301,492,102,31200,46600,12400,1990,50,4.1,1,1,24.0,77777,9,999999999,300,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.6,62,101600,765,1340,379,435,404,205,46000,41100,22500,4690,60,3.1,3,3,24.0,77777,9,999999999,290,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,15.0,50,101600,946,1340,389,612,531,236,65600,55100,26600,6680,340,3.1,4,2,24.0,77777,9,999999999,290,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,16.1,60,101600,1072,1340,385,717,654,193,76400,66800,22800,6950,190,4.6,3,3,24.0,77777,9,999999999,290,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.1,58,101500,1136,1340,391,777,549,311,83300,57300,34600,13330,200,4.1,4,4,24.0,77777,9,999999999,279,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.1,58,101500,1131,1340,388,819,652,268,85800,65700,30200,10910,190,4.6,3,3,24.0,77777,9,999999999,279,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.7,60,101400,1059,1340,373,776,761,174,83200,78000,21400,6130,190,3.1,0,0,20.8,77777,9,999999999,279,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,16.7,60,101400,925,1340,373,655,720,158,69700,73200,19000,4360,190,3.6,0,0,20.8,77777,9,999999999,270,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.8,67,101400,737,1340,371,488,644,133,51200,64100,15800,2960,200,3.6,0,0,19.2,77777,9,999999999,270,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,101300,509,1340,370,293,511,99,30300,47700,12200,1890,170,3.1,0,0,19.2,77777,9,999999999,270,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,15.6,62,101300,256,1340,363,108,262,58,11300,19300,7700,1050,160,3.1,0,0,19.2,77777,9,999999999,270,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.1,66,101300,32,703,361,7,10,6,800,400,700,120,180,2.6,0,0,19.2,77777,9,999999999,259,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101300,0,0,358,0,0,0,0,0,0,0,170,1.5,0,0,32.0,77777,9,999999999,259,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101400,0,0,360,0,0,0,0,0,0,0,170,1.5,0,0,32.0,77777,9,999999999,259,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101400,0,0,361,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,250,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101400,0,0,361,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,250,0.1840,0,88,0.140,0.0,1.0 +1995,8,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101400,0,0,360,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,250,0.1840,0,88,0.140,0.0,1.0 +1995,8,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,15.6,66,101400,0,0,370,0,0,0,0,0,0,0,290,2.6,2,2,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.9,57,101400,0,0,359,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,14.4,59,101400,0,0,359,0,0,0,0,0,0,0,340,2.6,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,101500,0,0,355,0,0,0,0,0,0,0,20,4.1,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.0,68,101500,0,0,352,0,0,0,0,0,0,0,20,5.7,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,101600,50,860,348,12,22,11,1400,1000,1400,230,20,5.2,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.2,55,101700,288,1340,352,129,308,63,13600,23900,8500,1140,20,6.7,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.0,46,101700,538,1340,351,319,540,102,33100,51100,12500,1990,360,5.7,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,9.4,42,101800,761,1340,354,512,664,135,53900,66400,16100,3080,30,5.7,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,8.3,37,101800,943,1340,358,675,734,158,71900,74800,19100,4490,10,5.2,0,0,32.0,77777,9,999999999,229,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,5.6,30,101700,1069,1340,357,789,772,173,84700,79200,21400,6230,20,3.1,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,5.0,25,101700,1132,1340,367,846,789,180,88200,79100,21200,6770,360,4.1,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,7.2,28,101700,1127,1340,372,842,787,180,87600,78800,21200,6660,360,2.6,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,5.0,22,101600,1055,1340,378,776,767,172,83200,78600,21200,6000,10,3.1,0,0,32.0,77777,9,999999999,240,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,29.4,3.3,19,101600,920,1340,378,653,725,156,69500,73700,18800,4280,330,3.1,0,0,32.0,77777,9,999999999,250,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,3.3,20,101500,731,1340,373,485,649,131,51000,64600,15700,2900,30,4.6,0,0,32.0,77777,9,999999999,250,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,2.2,19,101500,503,1340,371,289,513,97,30000,47800,12000,1850,40,4.1,0,0,32.0,77777,9,999999999,250,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,3.3,21,101500,250,1340,370,105,259,56,10900,18800,7400,1010,60,2.6,0,0,32.0,77777,9,999999999,250,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,4.4,25,101500,29,659,361,6,9,5,600,300,600,100,120,1.5,0,0,32.0,77777,9,999999999,259,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.3,51,101600,0,0,363,0,0,0,0,0,0,0,190,2.6,0,0,32.0,77777,9,999999999,259,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.6,64,101600,0,0,361,0,0,0,0,0,0,0,190,1.5,0,0,32.0,77777,9,999999999,259,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,101600,0,0,355,0,0,0,0,0,0,0,240,2.6,0,0,32.0,77777,9,999999999,259,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,101600,0,0,355,0,0,0,0,0,0,0,250,2.1,0,0,32.0,77777,9,999999999,270,0.1830,0,88,0.140,0.0,1.0 +1995,8,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.0,68,101700,0,0,352,0,0,0,0,0,0,0,260,2.1,0,0,32.0,77777,9,999999999,270,0.1830,0,88,0.140,0.0,1.0 +1995,8,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,101600,0,0,355,0,0,0,0,0,0,0,280,1.5,0,0,32.0,77777,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.0,73,101600,0,0,347,0,0,0,0,0,0,0,260,2.6,0,0,32.0,77777,9,999999999,270,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,14.4,70,101600,0,0,346,0,0,0,0,0,0,0,260,1.5,0,0,32.0,77777,9,999999999,279,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101600,0,0,344,0,0,0,0,0,0,0,250,2.1,0,0,32.0,77777,9,999999999,279,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101600,0,0,345,0,0,0,0,0,0,0,240,2.6,0,0,32.0,77777,9,999999999,279,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.7,81,101600,47,838,349,13,62,10,1500,2400,1400,170,0,0.0,0,0,24.0,77777,9,999999999,279,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101600,284,1341,382,111,194,70,11800,15000,8700,1310,260,1.5,5,5,24.0,77777,9,999999999,290,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.9,79,101500,534,1341,383,281,371,132,29500,35600,15300,2580,250,4.6,4,4,16.0,77777,9,999999999,290,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.9,74,101500,758,1341,427,153,0,153,18100,0,18100,6950,240,4.1,10,10,16.0,457,9,999999999,290,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,19.4,69,101400,939,1341,392,635,696,147,67900,71100,18000,4180,210,3.6,2,2,16.0,77777,9,999999999,300,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101400,1066,1341,382,795,843,125,82000,84200,14900,3390,200,3.6,0,0,16.0,77777,9,999999999,300,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,20.6,69,101300,1128,1341,394,767,762,125,83000,77600,17500,5050,200,4.6,1,1,16.0,77777,9,999999999,309,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101200,1123,1341,387,846,855,129,87000,85500,15200,4050,200,6.2,0,0,19.2,77777,9,999999999,309,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101100,1050,1341,387,780,838,124,83700,85000,17000,4120,200,7.7,0,0,19.2,77777,9,999999999,309,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101000,915,1341,390,631,765,109,67300,77100,14500,2910,200,8.2,1,1,19.2,77777,9,999999999,320,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.1,74,100900,726,1341,384,495,738,95,51900,72900,12300,2080,200,8.8,0,0,16.0,77777,9,999999999,320,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,100900,497,1341,381,301,620,71,31800,58400,10100,1420,200,9.3,0,0,16.0,77777,9,999999999,329,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,100900,243,1341,385,110,365,44,11300,26900,6500,800,210,7.7,1,1,19.2,77777,9,999999999,329,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,100800,26,637,384,6,24,5,700,800,700,80,210,7.2,3,1,19.2,77777,9,999999999,329,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.0,76,100900,0,0,374,0,0,0,0,0,0,0,210,7.2,2,0,19.2,77777,9,999999999,340,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,100900,0,0,389,0,0,0,0,0,0,0,220,5.7,3,3,19.2,77777,9,999999999,340,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.1,19.5,71,100800,0,0,429,0,0,0,0,0,0,0,220,5.2,10,10,19.2,2896,9,999999999,350,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.8,19.6,69,100900,0,0,427,0,0,0,0,0,0,0,340,4.7,10,10,17.6,1829,9,999999999,350,0.1820,0,88,0.140,0.0,1.0 +1995,8,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.5,19.7,71,100800,0,0,399,0,0,0,0,0,0,0,200,4.2,7,7,19.2,3048,9,999999999,359,0.1820,0,88,0.140,0.0,1.0 +1995,9,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.1,19.7,76,100700,0,0,397,0,0,0,0,0,0,0,200,3.6,7,7,16.0,3048,9,999999999,359,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.8,81,100600,0,0,402,0,0,0,0,0,0,0,240,3.1,9,8,14.4,3658,9,999999999,359,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.5,19.9,87,100600,0,0,409,0,0,0,0,0,0,0,250,2.6,10,9,12.8,3962,9,999999999,370,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,100600,0,0,407,0,0,0,0,0,0,0,290,2.1,10,9,12.8,3962,9,999999999,370,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,100600,0,0,385,0,0,0,0,0,0,0,310,4.6,7,2,11.2,77777,9,999999999,379,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,100600,45,816,384,12,50,10,1500,1900,1300,170,340,5.7,4,1,11.2,77777,9,999999999,379,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.9,69,100700,280,1342,388,129,368,53,13300,28600,7300,960,330,5.2,2,2,17.6,77777,9,999999999,379,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,16.7,56,100700,531,1342,386,293,546,77,31000,52100,10300,1560,320,6.2,3,1,19.2,77777,9,999999999,379,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,14.4,47,100800,755,1342,386,465,630,111,49700,63400,13900,2570,330,6.2,2,1,24.0,77777,9,999999999,370,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,13.9,42,100800,936,1342,403,554,547,172,58600,55500,19800,4780,330,3.6,5,4,24.0,77777,9,999999999,359,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,13.9,40,100800,1062,1342,402,699,700,144,73800,70600,17800,4730,310,4.6,4,2,32.0,77777,9,999999999,359,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,11.7,32,100700,1124,1342,400,770,752,139,82300,76200,18300,5430,310,4.1,3,1,32.0,77777,9,999999999,350,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,11.1,30,100700,1119,1342,408,808,782,155,85300,78900,19400,5810,320,5.7,2,2,32.0,77777,9,999999999,340,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,31.1,8.3,24,100700,1045,1342,410,718,676,191,76400,68900,22500,6450,340,4.6,6,3,32.0,77777,9,999999999,329,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,8.9,26,100700,910,1342,405,613,648,173,64600,65500,20000,4610,320,5.7,7,2,32.0,77777,9,999999999,329,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,11.1,34,100700,720,1342,420,266,172,173,29500,17900,19900,4430,350,5.7,8,8,32.0,7620,9,999999999,320,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,11.1,35,100700,491,1342,411,229,208,153,24900,20000,17600,3520,340,5.2,9,7,32.0,7620,9,999999999,309,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,11.1,35,100700,237,1342,418,65,36,59,7200,2800,6700,1480,330,5.2,9,8,32.0,7620,9,999999999,309,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,12.2,39,100800,23,593,409,4,3,4,0,0,0,0,330,3.1,10,7,32.0,7620,9,999999999,300,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,12.8,42,100900,0,0,435,0,0,0,0,0,0,0,320,3.6,10,10,32.0,4267,9,999999999,290,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,13.3,44,100900,0,0,435,0,0,0,0,0,0,0,320,1.5,10,10,32.0,4267,9,999999999,279,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.2,42,100900,0,0,419,0,0,0,0,0,0,0,340,3.1,9,9,32.0,4267,9,999999999,279,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.1,39,100900,0,0,429,0,0,0,0,0,0,0,320,2.6,10,10,32.0,4267,9,999999999,270,0.1810,0,88,0.150,0.0,1.0 +1995,9,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,12.2,45,100900,0,0,424,0,0,0,0,0,0,0,350,4.1,10,10,32.0,4267,9,999999999,259,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,12.2,46,100800,0,0,421,0,0,0,0,0,0,0,10,3.1,10,10,32.0,4267,9,999999999,259,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,12.8,50,100900,0,0,407,0,0,0,0,0,0,0,40,1.5,9,9,32.0,3658,9,999999999,250,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.2,50,100900,0,0,403,0,0,0,0,0,0,0,20,3.6,9,9,32.0,4267,9,999999999,240,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,12.8,53,101000,0,0,413,0,0,0,0,0,0,0,10,3.6,10,10,32.0,2591,9,999999999,229,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.8,55,101000,0,0,409,0,0,0,0,0,0,0,360,5.2,10,10,32.0,2591,9,999999999,229,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.8,57,101000,43,794,395,12,4,12,1300,200,1300,300,360,5.2,9,9,32.0,4267,9,999999999,220,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.8,57,101100,276,1342,395,114,72,99,12400,6000,11200,2310,10,5.2,9,9,32.0,4267,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,101200,527,1342,382,207,222,119,22400,21900,13800,2370,10,5.7,7,7,32.0,7620,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.3,55,101200,751,1342,379,340,192,232,37200,20000,26000,6050,20,4.1,8,5,32.0,7620,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,13.3,51,101300,932,1342,385,487,359,237,52100,37200,26100,6560,40,4.1,7,5,32.0,7620,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,13.3,48,101300,1058,1342,405,317,63,267,35000,6400,30000,10970,10,3.1,8,8,32.0,7620,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,13.3,50,101200,1120,1342,411,147,54,102,17500,5900,12600,3970,50,4.1,9,9,32.0,1341,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,12.2,45,101200,1114,1342,404,511,323,242,56000,33800,27800,9600,90,3.1,9,8,32.0,1433,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.7,41,101200,1041,1342,403,467,206,306,51100,22300,33700,10060,10,3.1,7,7,32.0,1524,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.1,62,101300,904,1342,403,418,294,219,46100,31700,24700,5780,170,4.6,8,8,32.0,1676,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.1,62,101300,714,1342,397,441,563,141,45900,55600,16300,3030,160,3.1,7,7,32.0,2743,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.7,66,101300,484,1342,390,227,270,129,24200,26000,14900,2600,140,3.1,6,6,32.0,2743,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.7,71,101400,230,1342,380,100,193,67,10500,13300,8200,1290,150,2.6,5,5,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.7,73,101400,20,548,372,4,23,3,0,0,0,0,0,0.0,3,3,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101500,0,0,365,0,0,0,0,0,0,0,0,0.0,2,2,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101500,0,0,367,0,0,0,0,0,0,0,0,0.0,3,3,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101500,0,0,350,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,101600,0,0,348,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101700,0,0,343,0,0,0,0,0,0,0,50,1.5,0,0,32.0,77777,9,999999999,209,0.1810,0,88,0.150,0.0,1.0 +1995,9,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.7,59,101600,0,0,343,0,0,0,0,0,0,0,10,2.6,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.7,61,101600,0,0,340,0,0,0,0,0,0,0,10,4.1,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.0,56,101600,0,0,336,0,0,0,0,0,0,0,10,4.1,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,9.4,60,101700,0,0,328,0,0,0,0,0,0,0,30,3.6,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,9.4,60,101700,0,0,328,0,0,0,0,0,0,0,20,3.1,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101800,40,772,328,9,10,8,1000,400,1000,160,40,3.1,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.1,61,101900,273,1343,337,115,249,65,12100,18800,8200,1180,60,3.6,0,0,32.0,77777,9,999999999,209,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.1,53,101900,524,1343,347,301,490,110,32200,46800,13900,2110,70,3.1,0,0,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,9.4,42,101900,748,1343,354,495,624,147,51600,62000,17100,3250,60,2.6,0,0,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,8.9,37,102000,929,1343,361,658,699,174,69500,70800,20400,4770,50,1.5,0,0,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,8.9,35,101900,1055,1343,374,742,705,188,79100,72000,22400,6470,240,2.6,1,1,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,10.0,40,101900,1116,1343,378,799,695,221,84700,70700,25800,8730,190,3.6,3,3,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,9.4,40,101900,1110,1343,377,749,580,268,81200,60600,30900,10550,200,4.1,4,4,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,10.0,39,101800,1036,1343,381,650,512,255,70200,53400,28900,8450,200,4.6,3,3,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,11.7,43,101700,899,1343,379,610,594,213,65700,61500,24500,5590,180,4.6,2,2,32.0,77777,9,999999999,220,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,11.1,42,101700,709,1343,382,395,375,197,42700,39200,21900,4480,200,3.6,3,3,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,11.1,43,101700,478,1343,370,253,423,102,26900,39500,12800,1920,190,3.6,2,1,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.2,50,101800,224,1343,359,86,187,55,9100,12700,7000,1020,170,3.1,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.3,55,101900,18,526,358,3,2,3,0,0,0,0,190,2.6,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.8,55,102000,0,0,355,0,0,0,0,0,0,0,190,3.1,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.9,61,102000,0,0,353,0,0,0,0,0,0,0,210,3.1,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,102000,0,0,351,0,0,0,0,0,0,0,230,3.1,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.6,71,102100,0,0,353,0,0,0,0,0,0,0,260,3.1,0,0,32.0,77777,9,999999999,229,0.1800,0,88,0.150,0.0,1.0 +1995,9,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,102100,0,0,349,0,0,0,0,0,0,0,260,2.6,0,0,32.0,77777,9,999999999,240,0.1800,0,88,0.150,0.0,1.0 +1995,9,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.0,73,102100,0,0,347,0,0,0,0,0,0,0,250,3.1,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,102100,0,0,350,0,0,0,0,0,0,0,280,3.1,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,102100,0,0,348,0,0,0,0,0,0,0,270,2.1,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,102100,0,0,344,0,0,0,0,0,0,0,260,2.6,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,102100,0,0,344,0,0,0,0,0,0,0,0,0.0,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,102200,38,750,347,9,22,8,1000,700,1000,130,0,0.0,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,102200,269,1344,351,121,322,56,12700,24200,7900,1000,240,1.5,0,0,32.0,77777,9,999999999,240,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.7,68,102200,520,1344,362,310,563,92,32300,53000,11700,1800,0,0.0,0,0,32.0,77777,9,999999999,250,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.6,60,102300,744,1344,366,503,687,122,53200,68800,15000,2760,260,2.6,0,0,32.0,77777,9,999999999,250,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,13.9,48,102300,925,1344,373,665,755,144,71100,77100,17900,4010,200,2.1,0,0,32.0,77777,9,999999999,250,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,12.8,45,102200,1051,1344,371,778,792,158,81200,79400,18900,4890,200,3.6,0,0,32.0,77777,9,999999999,250,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,12.8,44,102200,1112,1344,381,796,768,160,83700,77300,19600,5810,190,3.6,1,1,32.0,77777,9,999999999,250,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,13.9,47,102200,1106,1344,382,772,732,169,80600,73400,20000,5920,190,4.1,1,1,32.0,77777,9,999999999,259,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,14.4,48,102200,1031,1344,383,714,724,158,76800,74300,19600,5250,180,5.2,2,1,32.0,77777,9,999999999,259,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,15.0,54,102100,894,1344,378,609,690,150,64700,70100,18000,3960,170,6.2,1,1,32.0,77777,9,999999999,259,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,16.1,56,102100,703,1344,388,339,320,171,36900,33500,19400,3780,190,5.7,2,2,32.0,77777,9,999999999,259,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,15.6,58,102200,472,1344,385,242,383,107,25600,35600,13000,2020,190,6.2,3,3,32.0,77777,9,999999999,270,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.7,64,102200,217,1344,386,84,193,53,8900,12800,6900,980,200,6.7,4,4,32.0,77777,9,999999999,270,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.1,64,102200,15,481,380,2,4,2,0,0,0,0,210,5.2,3,3,32.0,77777,9,999999999,270,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.1,64,102200,0,0,383,0,0,0,0,0,0,0,200,4.1,4,4,32.0,77777,9,999999999,270,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.6,64,102300,0,0,361,0,0,0,0,0,0,0,190,4.6,0,0,32.0,77777,9,999999999,279,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.7,71,102300,0,0,359,0,0,0,0,0,0,0,230,3.1,0,0,32.0,77777,9,999999999,279,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,102300,0,0,355,0,0,0,0,0,0,0,230,3.1,0,0,32.0,77777,9,999999999,279,0.1790,0,88,0.150,0.0,1.0 +1995,9,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.6,71,102200,0,0,353,0,0,0,0,0,0,0,230,2.6,0,0,32.0,77777,9,999999999,279,0.1790,0,88,0.150,0.0,1.0 +1995,9,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.0,68,102200,0,0,352,0,0,0,0,0,0,0,230,2.1,0,0,32.0,77777,9,999999999,279,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,102200,0,0,351,0,0,0,0,0,0,0,220,2.6,0,0,24.0,77777,9,999999999,290,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9*9*9,20.5,16.3,77,102200,0,0,350,0,0,0,0,0,0,0,230,2.6,0,0,24.0,77777,9,999999999,290,0.1780,0,88,0.150,999.0,99.0 +1995,9,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9*9*9,20.5,16.5,78,102300,0,0,351,0,0,0,0,0,0,0,240,2.5,0,0,24.1,77777,9,999999999,290,0.1780,0,88,0.150,999.0,99.0 +1995,9,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,102300,0,0,358,0,0,0,0,0,0,0,230,2.6,1,1,24.0,77777,9,999999999,290,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,102300,36,728,358,8,16,7,900,700,900,140,240,2.6,1,1,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,102300,265,1344,364,108,242,61,11400,18000,7800,1100,240,4.1,1,1,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.7,68,102300,516,1344,369,289,505,95,30000,47400,11800,1840,240,4.6,1,1,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,102300,741,1344,368,496,673,124,52300,67300,15100,2790,240,4.1,0,0,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,102300,922,1344,370,656,743,147,70100,75700,18100,4060,240,4.1,0,0,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.8,62,102200,1047,1344,377,769,780,160,80000,78200,19000,4880,200,3.6,0,0,32.0,77777,9,999999999,300,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,102200,1108,1344,383,824,796,167,86200,79900,20100,5910,200,3.6,0,0,32.0,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,18.3,60,102100,1101,1344,383,817,794,166,85400,79700,20000,5770,190,4.1,0,0,24.0,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,18.9,65,102100,1026,1344,381,749,774,158,78000,77500,18700,4600,190,5.7,0,0,24.0,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,19.4,67,102000,888,1344,394,532,503,200,57600,52100,23100,5150,190,6.2,2,2,24.0,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,20.0,71,102000,697,1344,399,351,333,178,38100,34800,20000,3950,190,6.7,4,4,20.8,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101900,465,1344,395,164,57,144,17900,5400,16100,3860,190,6.7,5,5,20.8,77777,9,999999999,309,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101900,210,1344,390,78,141,56,8200,9200,6800,1050,200,7.2,4,4,19.2,77777,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101900,13,459,401,1,0,1,0,0,0,0,210,5.7,7,7,20.8,2896,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,19.4,76,101900,0,0,396,0,0,0,0,0,0,0,190,1.5,6,6,20.8,2743,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.9,74,102000,0,0,392,0,0,0,0,0,0,0,230,2.1,5,5,20.8,77777,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.8,69,102000,0,0,405,0,0,0,0,0,0,0,250,2.6,8,8,20.8,2286,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101900,0,0,378,0,0,0,0,0,0,0,250,3.6,2,2,19.2,77777,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,101900,0,0,364,0,0,0,0,0,0,0,280,3.1,0,0,19.2,77777,9,999999999,320,0.1780,0,88,0.150,0.0,1.0 +1995,9,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.9,82,101900,0,0,362,0,0,0,0,0,0,0,260,4.1,0,0,19.2,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,101900,0,0,361,0,0,0,0,0,0,0,260,3.1,0,0,19.2,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101900,0,0,358,0,0,0,0,0,0,0,260,2.1,0,0,19.2,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101900,0,0,355,0,0,0,0,0,0,0,280,2.1,0,0,19.2,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,102000,0,0,357,0,0,0,0,0,0,0,350,2.1,0,0,16.0,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,102000,34,706,353,9,59,6,1000,2600,900,120,30,2.6,0,0,12.8,77777,9,999999999,329,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,102100,261,1345,365,128,442,42,13300,33700,6700,780,20,3.6,0,0,14.4,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.6,60,102100,513,1345,366,320,664,66,33300,62500,9400,1350,20,4.6,0,0,19.2,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,15.6,54,102100,737,1345,375,509,770,87,54000,76500,12000,1990,20,4.1,0,0,20.8,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,16.1,52,102100,918,1345,381,667,827,102,71600,83600,14400,2780,30,2.6,0,0,20.8,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.3,15.6,46,102100,1043,1345,388,777,858,111,80400,85800,13700,3060,20,2.1,0,0,20.8,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.8,58,102100,1104,1345,390,743,733,141,79100,74200,18100,5150,210,5.2,1,1,20.8,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,17.2,56,102100,1097,1345,389,620,625,110,67700,63800,15500,4150,190,4.1,1,1,19.2,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,17.2,54,102000,1021,1345,397,604,506,220,66000,52800,25800,7000,170,3.6,2,2,19.2,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,17.2,58,102000,883,1345,386,629,811,96,67600,81900,13700,2530,150,4.6,1,1,19.2,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,17.8,62,102000,691,1345,384,444,702,83,46900,69200,11300,1840,160,5.7,1,1,19.2,77777,9,999999999,340,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,18.3,69,102000,459,1345,372,276,629,61,28600,57800,8800,1220,160,4.6,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.9,76,101900,203,1345,367,91,361,36,9300,24600,5600,650,160,4.6,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,102000,11,415,365,2,21,1,0,0,0,0,180,4.1,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,102000,0,0,366,0,0,0,0,0,0,0,180,3.1,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,102000,0,0,366,0,0,0,0,0,0,0,180,2.6,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101900,0,0,363,0,0,0,0,0,0,0,180,3.1,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101800,0,0,363,0,0,0,0,0,0,0,150,2.6,0,0,19.2,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101900,0,0,363,0,0,0,0,0,0,0,190,2.6,1,0,16.0,77777,9,999999999,350,0.1770,0,88,0.150,0.0,1.0 +1995,9,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101800,0,0,375,0,0,0,0,0,0,0,190,2.6,2,2,16.0,77777,9,999999999,350,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101800,0,0,382,0,0,0,0,0,0,0,180,2.6,4,4,16.0,77777,9,999999999,350,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101800,0,0,385,0,0,0,0,0,0,0,190,3.1,5,5,16.0,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101700,0,0,399,0,0,0,0,0,0,0,200,2.6,8,8,16.0,335,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101700,0,0,409,0,0,0,0,0,0,0,210,3.1,9,9,11.2,274,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101700,32,684,420,4,0,4,500,0,500,160,240,2.6,10,10,9.6,244,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,257,1346,392,124,51,114,13500,4200,12700,2430,240,3.6,7,7,9.6,274,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101700,509,1346,399,152,66,127,16700,6300,14300,3640,240,3.1,8,8,8.0,335,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.0,79,101700,733,1346,401,451,256,311,48300,26300,34000,8020,220,4.1,7,7,8.0,335,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.0,74,101600,914,1346,393,621,621,199,64800,62300,22400,5210,200,4.1,3,3,8.0,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.1,76,101500,1039,1346,394,473,431,140,51400,44500,16900,4760,190,4.1,2,2,9.6,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101500,1100,1346,383,815,809,154,86000,81500,19200,5430,180,4.6,0,0,11.2,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101400,1092,1346,387,808,807,153,85200,81300,19000,5290,180,6.7,0,0,11.2,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,22.2,74,101300,1016,1346,391,741,788,145,77700,79100,17700,4240,180,6.2,0,0,11.2,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.7,74,101300,877,1346,400,590,673,151,62500,68200,18000,3890,190,7.2,2,2,11.2,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101200,685,1346,383,445,655,111,46900,64900,13800,2400,180,7.2,1,0,11.2,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.0,69,101200,452,1346,390,234,444,84,24100,40300,10600,1590,190,7.7,2,1,12.8,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101200,196,1346,385,72,183,45,7500,11700,5800,810,190,8.8,3,1,12.8,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,20.6,79,101200,9,370,387,1,2,1,0,0,0,0,200,8.2,7,2,16.0,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101300,0,0,389,0,0,0,0,0,0,0,190,7.7,3,3,16.0,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,20.6,82,101300,0,0,384,0,0,0,0,0,0,0,210,5.7,6,2,16.0,77777,9,999999999,359,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101300,0,0,375,0,0,0,0,0,0,0,210,4.6,3,1,16.0,77777,9,999999999,350,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,101300,0,0,378,0,0,0,0,0,0,0,210,4.1,7,2,16.0,77777,9,999999999,350,0.1760,0,88,0.150,0.0,1.0 +1995,9,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101300,0,0,382,0,0,0,0,0,0,0,230,3.6,6,3,19.2,77777,9,999999999,350,0.1760,0,88,0.150,0.0,1.0 +1995,9,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101300,0,0,382,0,0,0,0,0,0,0,230,3.6,8,3,16.0,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.6,91,101300,0,0,376,0,0,0,0,0,0,0,250,3.1,7,2,12.8,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101200,0,0,380,0,0,0,0,0,0,0,230,3.1,4,3,11.2,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101200,0,0,362,0,0,0,0,0,0,0,250,2.6,2,0,11.2,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101200,0,0,369,0,0,0,0,0,0,0,210,2.6,3,1,8.0,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.1,96,101300,30,662,374,7,3,6,700,200,700,160,240,2.1,6,2,8.0,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.1,90,101300,253,1346,383,84,102,65,9200,7800,7700,1390,280,1.5,5,3,8.0,77777,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101400,505,1346,398,235,123,189,25300,11900,20800,4380,30,2.6,7,7,9.6,3962,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,19.4,74,101400,730,1346,410,402,363,205,43400,38100,22700,4730,30,3.6,8,8,11.2,610,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,18.9,67,101400,910,1346,409,475,263,297,51300,28200,32100,8250,70,4.1,7,7,12.8,732,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,18.3,66,101500,1035,1346,412,584,268,378,63000,28900,40600,12660,50,6.7,8,8,12.8,823,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,17.2,62,101500,1096,1346,404,665,316,408,71800,34200,43900,15280,50,6.2,9,7,12.8,701,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,17.2,64,101500,1087,1346,416,419,167,284,46900,17900,32400,10370,70,5.2,9,9,14.4,732,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101600,1011,1346,416,212,0,212,25400,0,25400,10210,60,4.6,10,10,14.4,518,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101600,871,1346,409,175,0,175,20800,0,20800,8230,60,4.6,10,10,14.4,488,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101600,678,1346,408,125,0,125,14800,0,14800,5600,70,5.7,10,10,14.4,488,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101600,445,1346,408,72,0,72,8500,0,8500,3010,80,3.6,10,10,14.4,488,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.7,78,101600,189,1346,405,36,0,36,4100,0,4100,1300,70,3.1,10,10,12.8,518,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101600,7,348,401,0,0,0,0,0,0,0,80,2.6,10,10,12.8,579,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101700,0,0,401,0,0,0,0,0,0,0,60,2.6,10,10,14.4,579,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,101700,0,0,401,0,0,0,0,0,0,0,60,2.6,10,10,14.4,518,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101700,0,0,398,0,0,0,0,0,0,0,60,2.6,10,10,14.4,518,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101700,0,0,398,0,0,0,0,0,0,0,60,2.1,10,10,14.4,518,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101600,0,0,398,0,0,0,0,0,0,0,70,2.1,10,10,14.4,488,9,999999999,350,0.1750,0,88,0.150,0.0,1.0 +1995,9,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101600,0,0,395,0,0,0,0,0,0,0,70,2.1,10,10,14.4,366,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,101500,0,0,392,0,0,0,0,0,0,0,60,2.1,10,10,14.4,884,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,101500,0,0,392,0,0,0,0,0,0,0,70,2.1,10,10,14.4,853,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101500,0,0,389,0,0,0,0,0,0,0,70,2.6,10,10,14.4,823,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101500,0,0,364,0,0,0,0,0,0,0,70,2.1,10,7,14.4,7620,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101500,28,640,389,4,0,4,500,0,500,160,60,2.6,10,10,14.4,884,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101500,249,1347,389,35,0,35,4100,0,4100,1370,70,2.1,10,10,14.4,884,9,999999999,350,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.1,87,101600,501,1347,392,88,0,88,10300,0,10300,3710,70,2.6,10,10,12.8,884,9,999999999,340,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101500,726,1347,403,145,0,145,17100,0,17100,6510,70,3.1,10,10,16.0,975,9,999999999,340,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.2,73,101500,907,1347,378,495,412,218,53200,42700,24400,5770,100,4.1,4,4,16.0,77777,9,999999999,329,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,101400,1031,1347,384,516,446,173,55000,45600,20000,5680,110,4.1,4,4,19.2,77777,9,999999999,329,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,101400,1091,1347,421,238,0,238,28600,0,28600,11480,180,4.1,10,10,20.8,1097,9,999999999,320,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.7,64,101400,1083,1347,397,491,276,269,54600,30000,30500,9300,160,3.6,7,7,20.8,1189,9,999999999,320,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,17.2,66,101300,1006,1347,425,216,0,216,25800,0,25800,10350,150,3.6,10,10,19.2,1250,9,999999999,309,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,18.3,74,101300,866,1347,396,423,292,235,46200,31300,26000,6030,160,4.1,7,7,19.2,1189,9,999999999,309,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,18.3,76,101300,672,1347,420,131,0,131,15400,0,15400,5800,150,4.6,10,10,19.2,518,9,999999999,300,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.9,82,101200,439,1347,417,74,0,74,8700,0,8700,3060,130,3.6,10,10,20.8,457,9,999999999,290,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101200,182,1347,378,63,89,51,6800,5800,6100,1070,130,3.6,4,4,20.8,77777,9,999999999,290,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101200,6,303,377,0,1,0,0,0,0,0,120,2.1,5,5,19.2,77777,9,999999999,279,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101300,0,0,372,0,0,0,0,0,0,0,70,2.1,3,3,17.6,77777,9,999999999,279,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.9,90,101300,0,0,397,0,0,0,0,0,0,0,70,2.1,9,9,17.6,3962,9,999999999,270,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,101200,0,0,411,0,0,0,0,0,0,0,60,2.1,10,10,17.6,2896,9,999999999,270,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,18.3,87,101200,0,0,408,0,0,0,0,0,0,0,0,0.0,10,10,17.6,2896,9,999999999,259,0.1740,0,88,0.150,0.0,1.0 +1995,9,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101300,0,0,414,0,0,0,0,0,0,0,340,3.1,10,10,17.6,488,9,999999999,250,0.1740,0,88,0.150,0.0,1.0 +1995,9,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101200,0,0,412,0,0,0,0,0,0,0,340,4.6,10,10,19.2,732,9,999999999,250,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,16.1,75,101300,0,0,405,0,0,0,0,0,0,0,340,5.7,10,10,19.2,1067,9,999999999,240,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101300,0,0,398,0,0,0,0,0,0,0,350,4.6,10,10,20.8,914,9,999999999,240,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,101400,0,0,394,0,0,0,0,0,0,0,10,8.2,10,10,24.0,640,9,999999999,229,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.2,50,101400,0,0,342,0,0,0,0,0,0,0,20,5.7,3,3,32.0,77777,9,999999999,229,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.9,58,101500,26,640,327,7,58,4,700,2500,600,80,360,4.6,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.0,60,101600,245,1348,331,122,459,38,12600,34200,6400,710,340,4.1,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.9,52,101600,497,1348,335,315,691,60,33100,64800,9100,1250,340,6.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.9,49,101700,722,1348,340,507,798,79,54100,79300,11500,1830,350,5.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,6.7,38,101700,903,1348,345,666,855,94,69400,85000,12300,2220,360,7.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,7.2,38,101700,1027,1348,348,777,885,102,80600,88500,13000,2840,360,6.7,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.1,34,101600,1087,1348,350,831,898,106,86100,89900,13400,3300,340,6.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,6.1,32,101600,1078,1348,362,774,840,102,80300,84100,12900,3170,10,6.7,1,1,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,6.1,31,101600,1000,1348,364,704,817,97,73100,81600,12400,2640,360,5.7,1,1,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,5.6,30,101600,860,1348,357,628,843,90,65400,83600,11900,2060,330,7.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,3.9,28,101700,666,1348,349,458,776,75,48800,76400,10900,1680,350,5.7,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,3.9,29,101700,432,1348,347,262,646,55,27300,58700,8400,1120,330,6.7,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,1.7,27,101900,175,1348,339,77,353,31,7900,22500,5000,560,340,6.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,2.8,31,101900,4,258,336,0,14,0,0,0,0,0,350,6.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,3.9,38,102100,0,0,326,0,0,0,0,0,0,0,20,7.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.3,38,102200,0,0,323,0,0,0,0,0,0,0,20,6.2,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,3.3,41,102300,0,0,319,0,0,0,0,0,0,0,20,4.1,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,102400,0,0,315,0,0,0,0,0,0,0,20,3.6,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,102400,0,0,315,0,0,0,0,0,0,0,20,3.6,0,0,32.0,77777,9,999999999,220,0.1720,0,88,0.150,0.0,1.0 +1995,9,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,4.4,49,102400,0,0,312,0,0,0,0,0,0,0,30,4.1,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,4.4,53,102500,0,0,308,0,0,0,0,0,0,0,10,5.2,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.6,62,102500,0,0,304,0,0,0,0,0,0,0,20,3.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102600,0,0,305,0,0,0,0,0,0,0,20,3.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.1,66,102600,0,0,302,0,0,0,0,0,0,0,20,4.1,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.1,68,102700,24,618,300,4,3,4,500,100,500,110,20,3.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.7,62,102800,241,1348,310,95,197,60,10100,13900,7600,1120,30,4.1,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.0,48,102800,494,1348,318,273,453,107,29000,42600,13400,2030,50,4.1,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,3.9,41,102800,718,1348,321,465,597,147,48300,58800,16900,3140,30,4.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,2.8,34,102800,899,1348,328,627,677,176,65900,68200,20300,4570,350,3.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,1.7,30,102800,1023,1348,332,741,721,193,78400,73300,22700,6140,320,3.1,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,1.1,25,102800,1082,1348,339,795,739,201,84500,75300,23900,7260,240,2.6,0,0,40.0,77777,9,999999999,220,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,4.4,34,102700,1073,1348,337,786,736,200,83500,75000,23700,7060,200,4.1,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.0,36,102700,995,1348,338,715,711,189,75500,72200,22100,5710,210,4.6,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,102600,854,1348,339,586,659,169,61500,66200,19500,4140,210,4.1,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,6.7,42,102600,659,1348,337,413,564,137,42800,54900,15800,2800,170,3.6,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,102600,425,1348,339,219,395,94,23100,35500,11900,1750,150,3.6,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.7,44,102600,168,1348,335,57,101,44,6000,5700,5300,810,170,4.1,1,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,7.2,47,102600,3,236,333,0,0,0,0,0,0,0,170,3.1,0,0,40.0,77777,9,999999999,229,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.9,52,102700,0,0,335,0,0,0,0,0,0,0,190,3.1,0,0,32.0,77777,9,999999999,240,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.9,52,102600,0,0,335,0,0,0,0,0,0,0,190,3.6,0,0,40.0,77777,9,999999999,240,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,9.4,58,102600,0,0,330,0,0,0,0,0,0,0,220,3.1,0,0,40.0,77777,9,999999999,240,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.6,61,102600,0,0,334,0,0,0,0,0,0,0,240,3.1,0,0,40.0,77777,9,999999999,240,0.1710,0,88,0.150,0.0,1.0 +1995,9,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,102600,0,0,332,0,0,0,0,0,0,0,260,3.6,0,0,40.0,77777,9,999999999,240,0.1710,0,88,0.150,0.0,1.0 +1995,9,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.6,63,102600,0,0,332,0,0,0,0,0,0,0,290,3.6,0,0,40.0,77777,9,999999999,240,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,102600,0,0,327,0,0,0,0,0,0,0,280,4.1,0,0,40.0,77777,9,999999999,240,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.6,67,102600,0,0,327,0,0,0,0,0,0,0,280,3.1,0,0,40.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.0,67,102600,0,0,323,0,0,0,0,0,0,0,290,3.1,0,0,40.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.0,67,102600,0,0,323,0,0,0,0,0,0,0,290,1.5,0,0,40.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,102700,23,596,318,4,1,4,0,0,0,0,0,0.0,0,0,40.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.1,63,102700,237,1349,334,89,146,63,9400,10200,7600,1190,300,2.6,1,0,24.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.1,57,102700,490,1349,354,230,314,116,24200,29400,13500,2220,260,3.1,2,2,24.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.0,53,102700,714,1349,356,354,363,162,37900,36700,18400,3480,260,3.6,3,3,24.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,102700,895,1349,359,567,436,277,59200,44900,29400,7370,230,3.6,4,2,24.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,102600,1019,1349,366,701,555,281,74600,57700,30900,8990,230,4.1,6,3,32.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,102600,1078,1349,364,637,343,363,69300,37100,39500,12890,190,4.6,6,2,32.0,77777,9,999999999,250,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,11.7,51,102500,1068,1349,369,736,493,345,77200,51200,36600,12360,170,6.2,8,3,32.0,77777,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.0,44,102400,989,1349,372,644,467,301,67800,48400,32200,9210,170,5.7,7,4,32.0,77777,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.0,46,102400,848,1349,372,505,348,285,54100,37100,30700,7470,170,5.7,8,5,24.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.7,50,102300,653,1349,377,298,303,151,32500,31300,17300,3210,180,6.2,7,5,24.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,14.4,61,102300,418,1349,378,136,105,104,15000,9700,12000,2330,180,6.2,8,5,24.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.7,73,102200,161,1349,381,44,16,42,4800,1100,4700,1010,190,6.2,7,6,24.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,102200,2,191,379,0,0,0,0,0,0,0,180,7.2,8,5,32.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,102200,0,0,388,0,0,0,0,0,0,0,190,7.7,10,7,32.0,7620,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,18.3,79,102200,0,0,396,0,0,0,0,0,0,0,190,7.2,10,8,32.0,3962,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,102100,0,0,402,0,0,0,0,0,0,0,200,6.2,10,9,24.0,3962,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,102100,0,0,375,0,0,0,0,0,0,0,210,4.6,10,3,24.0,77777,9,999999999,259,0.1700,0,88,0.150,0.0,1.0 +1995,9,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102100,0,0,411,0,0,0,0,0,0,0,220,5.2,10,10,24.0,3353,9,999999999,270,0.1700,0,88,0.150,0.0,1.0 +1995,9,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.9,87,102000,0,0,400,0,0,0,0,0,0,0,210,5.7,10,9,24.0,2896,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,102000,0,0,412,0,0,0,0,0,0,0,220,6.7,10,10,24.0,3962,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101900,0,0,413,0,0,0,0,0,0,0,230,4.6,10,10,20.8,3658,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,101900,0,0,410,0,0,0,0,0,0,0,220,4.1,10,10,20.8,1463,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101900,0,0,412,0,0,0,0,0,0,0,220,4.6,10,10,20.8,1433,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101900,21,574,413,2,0,2,0,0,0,0,210,4.1,10,10,20.8,2591,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.3,81,101900,233,1350,414,45,0,45,5100,0,5100,1650,220,4.1,10,10,19.2,3962,9,999999999,270,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,18.9,84,101900,486,1350,414,93,0,93,10800,0,10800,3830,210,4.1,10,10,17.6,1433,9,999999999,279,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,20.0,87,101900,710,1350,419,149,0,149,17500,0,17500,6580,220,4.1,10,10,14.4,2286,9,999999999,279,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.6,87,101800,891,1350,423,193,0,193,22800,0,22800,8980,210,4.6,10,10,14.4,2286,9,999999999,279,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101700,1014,1350,424,386,94,315,42600,9600,35300,11970,210,4.6,9,9,12.8,2286,9,999999999,290,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,20.6,77,101600,1073,1350,436,298,0,298,35100,0,35100,13550,190,3.1,10,10,12.8,3962,9,999999999,290,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,20.6,72,101500,1063,1350,442,295,0,295,34700,0,34700,13400,190,4.6,10,10,14.4,3962,9,999999999,300,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.7,21.1,71,101400,984,1350,425,477,229,310,51800,24700,33800,9350,190,6.2,9,8,14.4,3962,9,999999999,300,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101400,842,1350,428,387,102,323,42500,10400,36000,10260,190,5.7,9,9,14.4,3962,9,999999999,300,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.6,21.7,79,101400,647,1350,428,195,93,150,21600,9500,17100,3680,200,4.6,9,9,16.0,1341,9,999999999,309,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101400,411,1350,406,165,198,104,17600,18000,12100,2030,200,4.6,7,7,16.0,3962,9,999999999,309,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.7,85,101300,154,1350,413,30,39,26,3400,2300,3100,540,220,4.1,8,8,12.8,3962,9,999999999,320,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101400,1,146,431,0,0,0,0,0,0,0,200,4.1,10,10,16.0,3658,9,999999999,320,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101400,0,0,431,0,0,0,0,0,0,0,210,3.6,10,10,16.0,1524,9,999999999,320,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101300,0,0,431,0,0,0,0,0,0,0,200,3.6,10,10,16.0,1676,9,999999999,329,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,21.1,82,101300,0,0,433,0,0,0,0,0,0,0,200,3.6,10,10,16.0,1524,9,999999999,329,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101300,0,0,430,0,0,0,0,0,0,0,220,4.6,10,10,16.0,2896,9,999999999,340,0.1690,0,88,0.150,0.0,1.0 +1995,9,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.1,84,101200,0,0,430,0,0,0,0,0,0,0,230,4.6,10,10,12.8,3048,9,999999999,340,0.1690,0,88,0.150,0.0,1.0 +1995,9,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101300,0,0,420,0,0,0,0,0,0,0,230,7.2,10,10,8.0,2743,9,999999999,350,0.1680,0,88,0.150,2.0,1.0 +1995,9,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101200,0,0,421,0,0,0,0,0,0,0,210,4.1,10,10,11.2,3658,9,999999999,350,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101100,0,0,421,0,0,0,0,0,0,0,230,3.6,10,10,9.6,3048,9,999999999,350,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101100,0,0,421,0,0,0,0,0,0,0,220,3.1,10,10,8.0,1067,9,999999999,359,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101100,0,0,401,0,0,0,0,0,0,0,220,3.6,10,8,8.0,7620,9,999999999,359,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101100,19,552,409,3,3,3,0,0,0,0,220,3.1,10,9,6.4,3962,9,999999999,370,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101200,229,1351,425,41,0,41,4700,0,4700,1520,240,4.1,10,10,4.0,3962,9,999999999,370,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101200,482,1351,425,110,0,110,12600,0,12600,4340,240,5.7,10,10,4.0,3962,9,999999999,359,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,21.7,91,101200,706,1351,427,179,0,179,20700,0,20700,7540,240,4.1,10,10,4.0,3962,9,999999999,359,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,21.7,88,101200,887,1351,399,572,518,231,60800,53500,25600,5980,250,6.2,7,6,4.0,7620,9,999999999,350,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,21.7,77,101200,1010,1351,407,572,536,170,60900,54700,19900,5330,240,7.2,5,5,8.0,77777,9,999999999,340,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,21.1,67,101100,1068,1351,416,694,591,226,73000,59800,25600,7770,240,6.7,5,5,9.6,77777,9,999999999,329,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,28.9,20.0,59,101100,1058,1351,414,763,786,148,80400,79100,18300,4690,240,5.7,3,3,14.4,77777,9,999999999,329,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.6,17.8,46,101100,978,1351,424,619,585,195,65200,59200,22200,5670,260,6.7,4,4,17.6,77777,9,999999999,320,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,15.0,40,101100,836,1351,424,499,428,234,52600,43900,25300,5740,260,6.2,6,6,19.2,3962,9,999999999,309,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,30.0,15.0,40,101100,640,1351,424,329,352,162,35600,36200,18400,3470,280,5.2,6,6,20.8,3962,9,999999999,309,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,17.8,56,101200,404,1351,412,211,414,86,22300,36600,11300,1580,250,4.1,6,6,20.8,3962,9,999999999,300,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.8,13.3,41,101300,147,1351,409,40,86,31,4300,4400,3800,550,340,5.7,6,6,24.0,3962,9,999999999,290,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,27.2,10.0,34,101400,1,124,395,0,1,0,0,0,0,0,320,5.7,4,4,32.0,77777,9,999999999,279,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,26.1,11.7,41,101500,0,0,398,0,0,0,0,0,0,0,350,4.6,6,6,32.0,2591,9,999999999,279,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,13.3,50,101600,0,0,385,0,0,0,0,0,0,0,360,5.2,4,4,32.0,77777,9,999999999,270,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,12.2,51,101700,0,0,369,0,0,0,0,0,0,0,350,5.2,2,2,32.0,77777,9,999999999,259,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,9.4,45,101800,0,0,363,0,0,0,0,0,0,0,350,5.7,3,3,32.0,77777,9,999999999,259,0.1680,0,88,0.150,0.0,1.0 +1995,9,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,9.4,49,101900,0,0,350,0,0,0,0,0,0,0,360,4.1,1,1,32.0,77777,9,999999999,250,0.1680,0,88,0.150,0.0,1.0 +1995,9,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.9,51,102000,0,0,343,0,0,0,0,0,0,0,350,4.1,1,1,32.0,77777,9,999999999,240,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.6,63,102000,0,0,332,0,0,0,0,0,0,0,10,4.1,0,0,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,102100,0,0,328,0,0,0,0,0,0,0,10,5.2,0,0,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,102200,0,0,326,0,0,0,0,0,0,0,20,3.1,0,0,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.6,70,102200,0,0,324,0,0,0,0,0,0,0,20,3.6,0,0,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,102300,18,529,318,3,1,3,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,102400,225,1351,328,84,157,58,8900,10600,7100,1090,20,3.6,0,0,32.0,77777,9,999999999,200,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.3,52,102400,478,1351,331,256,416,109,27100,38700,13400,2070,20,4.1,0,0,32.0,77777,9,999999999,200,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.3,47,102500,702,1351,339,447,567,152,48000,57200,18200,3220,30,4.1,0,0,32.0,77777,9,999999999,200,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,102500,882,1351,347,609,652,183,63700,65400,20800,4600,350,4.6,0,0,32.0,77777,9,999999999,200,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.9,44,102500,1006,1351,359,690,593,248,74200,61700,28200,7660,10,2.1,2,2,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.9,44,102500,1064,1351,382,454,131,351,50000,13900,39000,12280,10,3.6,8,8,32.0,1524,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,102500,1052,1351,372,541,344,273,58100,35900,30100,9270,240,3.6,5,5,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,102500,972,1351,370,617,425,310,66800,45800,33800,9220,200,4.6,3,3,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,102500,830,1351,367,530,534,201,56600,54900,22800,4830,180,4.1,2,2,32.0,77777,9,999999999,209,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,102500,633,1351,367,365,382,186,39100,39100,20700,4090,180,3.6,3,3,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.7,53,102500,397,1351,363,185,279,103,19700,25000,12400,2010,170,3.6,2,2,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.2,59,102500,140,1351,361,41,34,37,4400,2200,4200,880,170,4.6,5,3,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.2,61,102600,0,79,355,0,0,0,0,0,0,0,100,2.6,6,2,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.8,70,102700,0,0,351,0,0,0,0,0,0,0,60,3.6,4,3,32.0,77777,9,999999999,220,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.7,65,102700,0,0,346,0,0,0,0,0,0,0,40,4.1,6,2,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.8,52,102800,0,0,343,0,0,0,0,0,0,0,50,3.6,4,3,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.8,56,102800,0,0,334,0,0,0,0,0,0,0,60,3.6,4,2,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.3,60,102800,0,0,335,0,0,0,0,0,0,0,50,3.1,6,3,32.0,77777,9,999999999,229,0.1670,0,88,0.150,0.0,1.0 +1995,9,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,102800,0,0,325,0,0,0,0,0,0,0,50,3.1,4,1,32.0,77777,9,999999999,229,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.9,67,102800,0,0,328,0,0,0,0,0,0,0,50,3.1,4,2,32.0,77777,9,999999999,240,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,102700,0,0,326,0,0,0,0,0,0,0,60,3.6,3,3,32.0,77777,9,999999999,240,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,102700,0,0,318,0,0,0,0,0,0,0,60,3.6,4,1,32.0,77777,9,999999999,240,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,102800,0,0,346,0,0,0,0,0,0,0,60,3.1,8,8,32.0,1494,9,999999999,240,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,102700,16,507,341,2,1,2,0,0,0,0,60,3.6,7,7,32.0,1524,9,999999999,240,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.6,72,102800,221,1352,353,51,28,46,5600,2100,5200,1180,60,3.1,9,8,24.0,1524,9,999999999,250,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.1,61,102800,474,1352,378,151,48,134,16500,4500,15000,3670,120,5.7,9,9,24.0,1433,9,999999999,250,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.6,57,102800,698,1352,372,298,161,214,32500,16600,23900,5390,140,5.2,8,8,24.0,1524,9,999999999,259,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.6,51,102800,878,1352,375,569,483,255,59800,49700,27400,6590,120,6.2,9,7,24.0,1676,9,999999999,259,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,10.6,49,102800,1001,1352,384,476,227,307,51800,24500,33600,9430,140,6.7,9,8,24.0,4267,9,999999999,270,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.0,49,102800,1059,1352,374,629,274,414,67400,29600,44200,14490,140,6.2,9,7,24.0,1250,9,999999999,270,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,10.0,51,102600,1047,1352,386,597,79,535,65400,8300,59000,18660,130,6.2,9,9,24.0,7010,9,999999999,279,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,10.0,53,102600,967,1352,383,509,123,420,55800,12700,46700,14210,140,5.2,9,9,24.0,7010,9,999999999,279,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,102600,823,1352,390,208,0,208,24200,0,24200,9140,140,5.2,10,10,24.0,6401,9,999999999,290,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.1,59,102600,627,1352,392,145,0,145,16800,0,16800,6060,130,4.1,10,10,24.0,6096,9,999999999,290,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,11.7,63,102400,390,1352,390,75,0,75,8600,0,8600,2950,120,4.6,10,10,24.0,6096,9,999999999,300,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.2,65,102400,133,1352,390,23,0,23,2600,0,2600,830,110,4.1,10,10,24.0,1006,9,999999999,300,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.8,68,102400,0,34,391,0,0,0,0,0,0,0,140,4.6,10,10,32.0,945,9,999999999,309,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,102300,0,0,393,0,0,0,0,0,0,0,120,4.6,10,10,32.0,945,9,999999999,309,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.3,65,102200,0,0,398,0,0,0,0,0,0,0,140,4.6,10,10,32.0,975,9,999999999,320,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,102100,0,0,399,0,0,0,0,0,0,0,160,4.6,10,10,32.0,3353,9,999999999,320,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,102100,0,0,401,0,0,0,0,0,0,0,150,5.2,10,10,24.0,945,9,999999999,329,0.1660,0,88,0.150,0.0,1.0 +1995,9,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,101900,0,0,400,0,0,0,0,0,0,0,160,4.6,10,10,16.0,853,9,999999999,329,0.1660,0,88,0.150,0.0,1.0 +1995,9,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,101800,0,0,400,0,0,0,0,0,0,0,160,5.2,10,10,11.2,853,9,999999999,340,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,101600,0,0,400,0,0,0,0,0,0,0,140,3.6,10,10,11.2,853,9,999999999,340,0.1650,0,88,0.150,1.0,1.0 +1995,9,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101600,0,0,404,0,0,0,0,0,0,0,140,4.1,10,10,11.2,518,9,999999999,350,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101500,0,0,399,0,0,0,0,0,0,0,160,5.7,10,10,12.8,1341,9,999999999,350,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,101400,0,0,390,0,0,0,0,0,0,0,130,3.6,10,10,9.6,1981,9,999999999,359,0.1650,0,88,0.150,2.0,1.0 +1995,9,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101300,15,485,383,1,0,1,0,0,0,0,90,4.6,10,10,8.0,488,9,999999999,359,0.1650,0,88,0.150,3.0,1.0 +1995,9,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101200,217,1353,383,34,0,34,3900,0,3900,1290,90,6.2,10,10,4.0,366,9,999999999,370,0.1650,0,88,0.150,7.0,1.0 +1995,9,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101000,470,1353,384,62,0,62,7400,0,7400,2700,70,5.2,10,10,4.8,366,9,999999999,359,0.1650,0,88,0.150,8.0,1.0 +1995,9,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,100900,694,1353,387,108,0,108,12900,0,12900,5000,50,7.7,10,10,3.2,305,9,999999999,359,0.1650,0,88,0.150,15.0,1.0 +1995,9,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,100700,874,1353,391,147,0,147,17700,0,17700,7120,30,8.8,10,10,3.2,244,9,999999999,350,0.1650,0,88,0.150,5.0,1.0 +1995,9,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.8,97,100500,997,1353,394,174,0,174,21100,0,21100,8620,30,8.2,10,10,4.0,274,9,999999999,350,0.1650,0,88,0.150,3.0,1.0 +1995,9,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,18.3,96,100500,1054,1353,398,187,0,187,22700,0,22700,9320,40,9.3,10,10,14.4,366,9,999999999,340,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,18.3,84,100300,1042,1353,399,345,69,291,38000,7000,32600,11500,30,5.7,9,9,24.0,427,9,999999999,340,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.7,81,100400,961,1353,402,198,0,198,23600,0,23600,9460,330,6.2,10,10,24.0,488,9,999999999,340,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,100500,817,1353,401,161,0,161,19100,0,19100,7460,330,7.2,10,10,24.0,518,9,999999999,329,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,100500,620,1353,391,157,85,118,17700,8700,13700,2860,340,6.7,8,8,24.0,640,9,999999999,329,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,16.1,70,100600,383,1353,385,91,39,80,10000,3500,9000,2210,340,6.2,7,7,24.0,975,9,999999999,320,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,15.6,71,100600,126,1353,387,31,5,30,3400,0,3400,990,350,5.7,8,8,24.0,914,9,999999999,320,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,100700,0,11,357,0,0,0,0,0,0,0,340,4.1,1,1,32.0,77777,9,999999999,309,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,100800,0,0,347,0,0,0,0,0,0,0,350,5.2,0,0,32.0,77777,9,999999999,309,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,100800,0,0,344,0,0,0,0,0,0,0,350,3.6,0,0,32.0,77777,9,999999999,300,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,100800,0,0,342,0,0,0,0,0,0,0,10,3.6,0,0,32.0,77777,9,999999999,300,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,100900,0,0,339,0,0,0,0,0,0,0,330,3.6,0,0,32.0,77777,9,999999999,290,0.1650,0,88,0.150,0.0,1.0 +1995,9,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,100900,0,0,339,0,0,0,0,0,0,0,10,1.5,0,0,32.0,77777,9,999999999,290,0.1650,0,88,0.150,0.0,1.0 +1995,9,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,100900,0,0,338,0,0,0,0,0,0,0,50,2.6,1,1,32.0,77777,9,999999999,279,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101000,0,0,356,0,0,0,0,0,0,0,80,1.5,7,7,32.0,1524,9,999999999,279,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101000,0,0,338,0,0,0,0,0,0,0,110,1.5,1,1,32.0,77777,9,999999999,270,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101000,0,0,338,0,0,0,0,0,0,0,0,0.0,1,1,32.0,77777,9,999999999,270,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101100,0,0,360,0,0,0,0,0,0,0,330,3.1,6,6,32.0,1524,9,999999999,259,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,101200,14,462,354,2,1,2,0,0,0,0,360,3.6,4,4,32.0,77777,9,999999999,259,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.6,84,101300,213,1354,357,60,77,48,6600,5400,5800,1020,360,3.6,4,4,32.0,77777,9,999999999,250,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,101400,465,1354,357,212,273,118,22700,25900,13800,2340,10,4.6,4,4,32.0,77777,9,999999999,250,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,11.7,57,101500,690,1354,380,172,85,128,19300,8800,14800,3210,360,5.7,8,8,32.0,1524,9,999999999,250,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,10.6,51,101500,869,1354,375,587,487,274,61200,50000,28900,7060,360,5.2,7,7,32.0,1524,9,999999999,240,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,10.6,48,101600,992,1354,387,501,242,324,54300,26100,35100,9910,30,4.6,8,8,32.0,1676,9,999999999,240,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,101600,1049,1354,367,738,686,206,78000,69600,23900,6820,10,5.2,2,2,32.0,77777,9,999999999,240,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,10.0,43,101600,1036,1354,378,693,571,256,74700,59500,29000,8360,360,4.1,5,5,32.0,77777,9,999999999,240,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.6,43,101500,955,1354,385,523,318,298,56700,34300,32500,8620,10,3.1,6,6,32.0,1524,9,999999999,229,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,10.0,41,101600,811,1354,381,465,391,230,50400,41600,25400,5640,10,3.1,5,5,32.0,77777,9,999999999,229,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,10.6,45,101600,613,1354,379,227,134,166,24900,13600,18800,4010,30,4.6,5,5,32.0,77777,9,999999999,229,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,101700,376,1354,376,150,218,89,16100,19100,10700,1700,10,4.6,5,5,32.0,77777,9,999999999,229,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,8.3,42,101800,119,1320,365,33,52,28,3600,2800,3400,580,40,3.6,4,4,32.0,77777,9,999999999,220,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,7.8,47,101900,0,0,350,0,0,0,0,0,0,0,70,2.6,3,3,32.0,77777,9,999999999,220,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.3,52,102000,0,0,331,0,0,0,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,220,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.1,46,102000,0,0,327,0,0,0,0,0,0,0,20,3.1,0,0,32.0,77777,9,999999999,209,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,6.7,50,102000,0,0,325,0,0,0,0,0,0,0,40,4.1,0,0,32.0,77777,9,999999999,209,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.2,53,102000,0,0,323,0,0,0,0,0,0,0,30,4.6,0,0,32.0,77777,9,999999999,209,0.1640,0,88,0.150,0.0,1.0 +1995,9,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.8,58,102100,0,0,321,0,0,0,0,0,0,0,30,3.1,0,0,32.0,77777,9,999999999,209,0.1640,0,88,0.150,0.0,1.0 +1995,9,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,102100,0,0,319,0,0,0,0,0,0,0,20,2.6,0,0,32.0,77777,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,102100,0,0,316,0,0,0,0,0,0,0,30,2.6,0,0,32.0,77777,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,102100,0,0,313,0,0,0,0,0,0,0,30,3.6,0,0,32.0,77777,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,102200,0,0,312,0,0,0,0,0,0,0,20,3.1,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,102300,0,0,309,0,0,0,0,0,0,0,20,2.6,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102300,12,440,305,1,2,1,0,0,0,0,40,3.6,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.7,62,102400,208,1354,310,80,192,50,8300,12600,6300,900,20,3.6,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.3,60,102400,461,1354,321,255,472,94,27200,43500,12400,1750,40,3.1,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.6,61,102400,686,1354,334,445,622,130,46400,61100,15400,2740,50,4.1,0,0,32.0,77777,9,999999999,189,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.2,61,102400,865,1354,385,307,79,256,33800,8000,28600,8720,80,4.6,9,9,32.0,1067,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.3,65,102400,987,1354,387,533,45,500,59400,5100,55600,17240,110,4.6,9,9,32.0,823,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.9,63,102400,1044,1354,393,491,178,353,53800,18900,39200,11970,90,5.7,9,9,32.0,823,9,999999999,200,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,102300,1031,1354,374,549,371,266,58800,38600,29300,8610,120,5.2,5,5,32.0,77777,9,999999999,209,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.3,59,102300,949,1354,374,391,264,206,43600,28500,23600,5610,100,4.6,5,5,32.0,77777,9,999999999,209,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.7,53,102300,804,1354,369,546,540,225,57400,55200,24500,5330,100,3.6,4,4,32.0,77777,9,999999999,220,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.2,59,102200,606,1354,361,346,376,178,37000,38200,19900,3860,110,3.6,3,3,32.0,77777,9,999999999,220,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,11.1,57,102200,369,1354,354,171,308,87,17900,26300,10700,1610,90,3.1,2,2,32.0,77777,9,999999999,220,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.6,59,102200,112,1275,351,30,34,27,3300,1800,3200,560,90,3.1,3,3,32.0,77777,9,999999999,229,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.1,63,102300,0,0,345,0,0,0,0,0,0,0,110,2.6,2,2,32.0,77777,9,999999999,229,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,11.1,67,102300,0,0,336,0,0,0,0,0,0,0,90,2.6,1,1,32.0,77777,9,999999999,229,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,102300,0,0,333,0,0,0,0,0,0,0,40,2.6,2,2,32.0,77777,9,999999999,240,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.1,77,102300,0,0,320,0,0,0,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,240,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,102200,0,0,317,0,0,0,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,250,0.1630,0,88,0.150,0.0,1.0 +1995,9,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,102200,0,0,317,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,250,0.1630,0,88,0.150,0.0,1.0 +1995,9,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,102200,0,0,315,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,250,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,102100,0,0,312,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,259,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.6,86,102100,0,0,309,0,0,0,0,0,0,0,30,2.6,0,0,32.0,77777,9,999999999,259,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,102100,0,0,306,0,0,0,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,259,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,102100,0,0,306,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,270,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,102100,11,418,306,2,30,1,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,270,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,102100,204,1355,315,95,403,34,9800,27600,5600,620,60,3.1,0,0,32.0,77777,9,999999999,279,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.7,72,102100,457,1355,339,172,343,56,18300,31800,7600,1120,70,4.1,2,2,32.0,77777,9,999999999,279,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.6,61,102100,681,1355,357,309,212,202,33800,21800,22800,5040,50,4.1,6,6,32.0,1676,9,999999999,279,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,10.0,51,102000,861,1355,344,623,841,89,65000,83400,11800,2050,80,2.6,0,0,32.0,77777,9,999999999,290,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,10.6,46,102000,983,1355,370,685,733,154,73500,75000,19000,4610,0,0.0,3,3,32.0,77777,9,999999999,290,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,11.1,49,102000,1039,1355,364,723,730,164,77700,74800,20200,5420,180,4.1,2,2,32.0,77777,9,999999999,290,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,11.7,51,101900,1025,1355,388,471,144,361,51500,15300,39900,11940,250,4.6,8,8,32.0,4267,9,999999999,300,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,11.7,53,101900,943,1355,380,565,382,299,61200,41100,32500,8540,200,3.6,7,7,32.0,4267,9,999999999,300,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.1,53,101800,798,1355,382,406,273,245,43700,29000,26600,6030,160,3.6,8,8,24.0,4267,9,999999999,300,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.3,61,101800,600,1355,378,309,297,177,32900,30100,19600,3830,160,3.6,7,7,24.0,4267,9,999999999,309,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101800,362,1355,399,79,0,79,9000,0,9000,2980,150,3.6,10,10,24.0,4267,9,999999999,309,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101800,105,1231,385,20,8,19,2200,500,2100,490,170,3.1,9,9,24.0,4267,9,999999999,320,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101800,0,0,396,0,0,0,0,0,0,0,160,3.1,10,10,24.0,4267,9,999999999,320,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101900,0,0,396,0,0,0,0,0,0,0,190,2.6,10,10,24.0,3962,9,999999999,320,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.0,76,101900,0,0,397,0,0,0,0,0,0,0,180,3.1,10,10,24.0,3962,9,999999999,329,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,102000,0,0,372,0,0,0,0,0,0,0,200,2.6,7,7,24.0,3962,9,999999999,329,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101900,0,0,362,0,0,0,0,0,0,0,190,2.6,4,4,24.0,77777,9,999999999,329,0.1610,0,88,0.150,0.0,1.0 +1995,9,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101900,0,0,370,0,0,0,0,0,0,0,220,2.1,7,7,20.8,3962,9,999999999,340,0.1610,0,88,0.150,0.0,1.0 +1995,9,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101900,0,0,398,0,0,0,0,0,0,0,250,2.6,10,10,19.2,3962,9,999999999,340,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101900,0,0,398,0,0,0,0,0,0,0,240,3.1,10,10,19.2,2591,9,999999999,340,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101900,0,0,395,0,0,0,0,0,0,0,230,3.1,10,10,19.2,2896,9,999999999,350,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101900,0,0,398,0,0,0,0,0,0,0,230,2.6,10,10,19.2,2896,9,999999999,350,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101900,0,0,395,0,0,0,0,0,0,0,220,2.6,10,10,19.2,3658,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,102000,10,395,399,1,0,1,0,0,0,0,220,2.6,10,10,19.2,2134,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.7,81,102000,200,1356,402,30,0,30,3500,0,3500,1140,220,2.6,10,10,16.0,1128,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,102000,453,1356,406,77,0,77,9000,0,9000,3190,220,3.1,10,10,19.2,1128,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,102000,677,1356,409,133,0,133,15600,0,15600,5870,230,4.6,10,10,17.6,1067,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,102000,856,1356,416,178,0,178,21100,0,21100,8250,220,3.1,10,10,16.0,1097,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.8,73,102000,978,1356,419,209,0,209,24900,0,24900,9940,220,3.6,10,10,16.0,1128,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.8,71,101900,1034,1356,422,223,0,223,26700,0,26700,10700,200,3.6,10,10,16.0,1829,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,18.3,71,101900,1020,1356,426,220,0,220,26300,0,26300,10530,200,3.6,10,10,17.6,1372,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.8,71,101800,937,1356,422,199,0,199,23700,0,23700,9390,210,4.1,10,10,17.6,1219,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,19.4,81,101800,791,1356,421,162,0,162,19100,0,19100,7380,200,3.6,10,10,17.6,1341,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,20.0,82,101800,593,1356,390,349,369,188,37100,37200,20800,4120,190,5.2,5,5,17.6,77777,9,999999999,359,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,20.0,84,101700,355,1356,373,160,362,65,17200,30600,9200,1170,180,5.2,2,1,17.6,77777,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101700,99,1209,376,28,64,22,3000,2800,2700,380,190,4.1,5,3,16.0,77777,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101700,0,0,372,0,0,0,0,0,0,0,170,5.2,6,2,14.4,77777,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101800,0,0,378,0,0,0,0,0,0,0,190,5.7,8,4,14.4,77777,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101800,0,0,385,0,0,0,0,0,0,0,190,4.6,7,6,14.4,7620,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101800,0,0,376,0,0,0,0,0,0,0,200,3.6,5,4,12.8,77777,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101800,0,0,401,0,0,0,0,0,0,0,220,3.1,9,9,12.8,1189,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101700,0,0,401,0,0,0,0,0,0,0,210,4.6,10,9,11.2,3962,9,999999999,370,0.1600,0,88,0.150,0.0,1.0 +1995,9,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,20.0,93,101700,0,0,412,0,0,0,0,0,0,0,210,2.6,10,10,11.2,1372,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101700,0,0,416,0,0,0,0,0,0,0,200,2.6,10,10,11.2,1494,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,0,0,416,0,0,0,0,0,0,0,210,2.1,10,10,11.2,2438,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,0,0,416,0,0,0,0,0,0,0,210,3.1,10,10,11.2,1311,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,0,0,416,0,0,0,0,0,0,0,190,2.1,10,10,11.2,2134,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,9,373,416,0,0,0,0,0,0,0,200,3.6,10,10,11.2,1097,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,196,1357,416,35,0,35,4000,0,4000,1280,200,3.6,10,10,11.2,914,9,999999999,370,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,20.0,90,101600,449,1357,416,71,0,71,8300,0,8300,2980,190,5.2,10,10,11.2,945,9,999999999,359,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,19.4,87,101600,673,1357,415,125,0,125,14700,0,14700,5570,200,5.7,10,10,11.2,945,9,999999999,359,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.1,93,101600,852,1357,420,171,0,171,20300,0,20300,7970,190,4.1,10,10,9.6,1219,9,999999999,350,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,101500,973,1357,410,170,0,170,20600,0,20600,8380,200,9.3,10,10,3.2,274,9,999999999,350,0.1590,0,88,0.150,1.0,1.0 +1995,9,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,20.0,96,101500,1028,1357,410,182,0,182,22100,0,22100,9040,200,5.2,10,10,3.2,244,9,999999999,340,0.1590,0,88,0.150,1.0,1.0 +1995,9,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,21.1,100,101400,1014,1357,414,179,0,179,21700,0,21700,8870,180,3.6,10,10,6.4,366,9,999999999,329,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,21.7,94,101300,931,1357,424,192,0,192,22900,0,22900,9100,190,6.7,10,10,8.0,762,9,999999999,329,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,21.7,100,101200,785,1357,418,129,0,129,15500,0,15500,6100,180,7.2,10,10,2.4,396,9,999999999,320,0.1590,0,88,0.150,2.0,1.0 +1995,9,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,21.7,97,101100,586,1357,421,103,0,103,12100,0,12100,4480,180,9.8,10,10,9.6,427,9,999999999,320,0.1590,0,88,0.150,1.0,1.0 +1995,9,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,22.2,96,101100,347,1357,425,44,0,44,5200,0,5200,1830,190,6.7,10,10,6.4,396,9,999999999,309,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,22.2,100,101100,93,1165,422,14,0,14,1600,0,1600,530,210,6.2,10,10,3.2,244,9,999999999,300,0.1590,0,88,0.150,4.0,1.0 +1995,9,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.9,93,101300,0,0,405,0,0,0,0,0,0,0,290,4.1,10,10,14.4,1676,9,999999999,300,0.1590,0,88,0.150,5.0,1.0 +1995,9,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,19.4,96,101300,0,0,406,0,0,0,0,0,0,0,310,4.1,10,10,17.6,488,9,999999999,290,0.1590,0,88,0.150,2.0,1.0 +1995,9,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101500,0,0,395,0,0,0,0,0,0,0,320,4.6,10,10,19.2,2591,9,999999999,290,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.0,81,101500,0,0,391,0,0,0,0,0,0,0,320,3.1,10,10,24.0,2896,9,999999999,279,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,101700,0,0,384,0,0,0,0,0,0,0,330,4.1,10,10,24.0,3353,9,999999999,270,0.1590,0,88,0.150,0.0,1.0 +1995,9,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,101700,0,0,376,0,0,0,0,0,0,0,340,3.1,10,10,24.0,3962,9,999999999,270,0.1590,0,88,0.150,0.0,1.0 +1995,9,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.6,72,101700,0,0,371,0,0,0,0,0,0,0,340,4.1,10,10,24.0,3962,9,999999999,259,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,7.8,62,101800,0,0,365,0,0,0,0,0,0,0,340,6.2,10,10,32.0,3962,9,999999999,259,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.2,62,101800,0,0,361,0,0,0,0,0,0,0,340,5.2,10,10,32.0,3962,9,999999999,250,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,101900,0,0,360,0,0,0,0,0,0,0,340,6.2,10,10,32.0,3962,9,999999999,240,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,2.8,47,102000,0,0,353,0,0,0,0,0,0,0,340,4.1,10,10,32.0,3962,9,999999999,240,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.0,40,102100,8,351,337,1,1,1,0,0,0,0,350,4.6,9,9,32.0,3962,9,999999999,229,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.7,47,102200,191,1357,346,36,0,36,4100,0,4100,1300,340,4.6,10,10,32.0,3962,9,999999999,229,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,1.7,45,102300,444,1357,349,106,0,106,12100,0,12100,4050,360,3.6,10,10,32.0,3962,9,999999999,229,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,1.7,45,102300,668,1357,349,174,0,174,20000,0,20000,7150,350,5.2,10,10,32.0,3962,9,999999999,229,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,1.7,42,102400,847,1357,354,230,0,230,26600,0,26600,9960,350,3.6,10,10,32.0,3962,9,999999999,229,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,1.7,41,102300,968,1357,357,267,0,267,31200,0,31200,11920,10,3.6,10,10,32.0,3962,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,2.2,40,102300,1023,1357,361,284,0,284,33300,0,33300,12800,360,3.6,10,10,32.0,3962,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,2.8,41,102300,1008,1357,364,279,0,279,32700,0,32700,12550,350,4.6,10,10,32.0,3962,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,2.2,39,102300,925,1357,363,254,0,254,29600,0,29600,11230,10,2.6,10,10,32.0,3962,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,3.9,42,102300,778,1357,368,209,0,209,24100,0,24100,8870,360,4.1,10,10,32.0,3962,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,4.4,46,102400,579,1357,366,147,0,147,16800,0,16800,5860,10,3.6,10,10,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,5.0,48,102400,340,1357,367,75,0,75,8500,0,8500,2790,40,3.6,10,10,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,5.0,49,102400,86,1120,354,16,2,15,1800,0,1800,560,30,2.6,9,9,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,102400,0,0,341,0,0,0,0,0,0,0,30,2.6,7,7,40.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.0,53,102500,0,0,341,0,0,0,0,0,0,0,40,2.6,8,8,40.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,102500,0,0,334,0,0,0,0,0,0,0,60,2.6,7,7,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,6.1,62,102500,0,0,337,0,0,0,0,0,0,0,30,4.1,8,8,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,5.6,60,102500,0,0,344,0,0,0,0,0,0,0,20,2.6,9,9,32.0,4267,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102600,0,0,335,0,0,0,0,0,0,0,20,2.1,8,8,32.0,7620,9,999999999,220,0.1580,0,88,0.150,0.0,1.0 +1995,9,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102600,0,0,335,0,0,0,0,0,0,0,10,2.1,8,8,32.0,7620,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102600,0,0,330,0,0,0,0,0,0,0,20,2.1,7,7,32.0,4267,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.1,68,102500,0,0,316,0,0,0,0,0,0,0,20,2.6,8,4,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.7,74,102500,0,0,308,0,0,0,0,0,0,0,30,2.6,7,2,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,102500,0,0,309,0,0,0,0,0,0,0,40,2.6,4,3,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,102600,7,328,300,0,8,0,0,0,0,0,40,2.6,1,1,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,7.2,71,102600,187,1358,303,80,309,37,8100,20100,5300,660,40,3.1,0,0,32.0,77777,9,999999999,209,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,102600,440,1358,321,266,493,106,27900,44700,13400,2000,30,3.6,2,2,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.7,58,102600,664,1358,328,383,525,126,39900,51300,14700,2610,50,2.6,3,3,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,7.8,56,102600,842,1358,334,554,717,109,58300,71600,13800,2580,60,3.6,4,2,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,6.7,50,102500,963,1358,341,610,575,202,63900,57900,22700,5640,50,3.1,5,4,32.0,77777,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.1,46,102500,1018,1358,349,630,421,314,66200,43700,33400,10010,70,2.6,7,6,32.0,4267,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,5.6,43,102400,1003,1358,361,292,172,165,33300,18700,19500,4690,150,2.1,8,8,32.0,4267,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,6.7,45,102300,919,1358,359,658,633,229,70400,65500,25900,6120,120,5.7,7,7,32.0,1524,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.3,54,102300,772,1358,369,226,78,181,24900,7800,20400,6030,110,5.2,9,9,32.0,1524,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,102300,572,1358,377,108,0,108,12600,0,12600,4610,120,4.6,10,10,32.0,1524,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.3,58,102300,333,1358,374,52,0,52,6100,0,6100,2080,100,4.1,10,10,32.0,1524,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.2,56,102300,81,1098,370,16,0,16,1900,0,1900,580,100,3.6,10,10,32.0,3353,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.9,64,102300,0,0,369,0,0,0,0,0,0,0,60,3.1,10,10,32.0,3658,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.9,64,102300,0,0,369,0,0,0,0,0,0,0,50,3.1,10,10,32.0,3658,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,102300,0,0,370,0,0,0,0,0,0,0,70,3.6,10,10,32.0,1128,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,102300,0,0,366,0,0,0,0,0,0,0,60,2.6,10,10,24.0,1311,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,102300,0,0,364,0,0,0,0,0,0,0,70,3.1,10,10,24.0,1250,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,102200,0,0,364,0,0,0,0,0,0,0,60,3.1,10,10,24.0,1311,9,999999999,220,0.1570,0,88,0.150,0.0,1.0 +1995,9,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.7,84,102200,0,0,366,0,0,0,0,0,0,0,70,2.6,10,10,24.0,1433,9,999999999,220,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,102200,0,0,363,0,0,0,0,0,0,0,50,3.1,10,10,24.0,1433,9,999999999,220,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.0,77,102100,0,0,362,0,0,0,0,0,0,0,60,3.1,10,10,24.0,1676,9,999999999,220,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,102100,0,0,363,0,0,0,0,0,0,0,60,3.6,10,10,24.0,1829,9,999999999,220,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,102100,0,0,364,0,0,0,0,0,0,0,60,3.1,10,10,24.0,1981,9,999999999,220,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,102100,6,306,364,0,0,0,0,0,0,0,70,3.6,10,10,20.8,1829,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,102200,183,1359,356,38,33,34,4300,2200,4000,720,70,5.2,9,9,20.8,1676,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,102100,436,1359,370,80,0,80,9300,0,9300,3240,70,4.1,10,10,20.8,1676,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,102100,659,1359,370,135,0,135,15800,0,15800,5860,70,3.6,10,10,20.8,1676,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.6,65,102100,838,1359,379,180,0,180,21200,0,21200,8230,70,4.1,10,10,24.0,1676,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.2,65,102000,958,1359,366,656,638,207,68700,64200,23300,5710,110,6.2,7,7,24.0,2896,9,999999999,229,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,102000,1012,1359,375,486,222,321,53600,23600,36000,10410,100,5.2,8,8,24.0,1676,9,999999999,240,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,12.8,63,101900,997,1359,372,358,237,184,40500,25700,21600,5240,130,4.6,9,7,24.0,823,9,999999999,240,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,101900,913,1359,381,392,100,324,43000,10200,36100,10970,110,4.1,9,9,20.8,853,9,999999999,240,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.9,76,101900,765,1359,389,162,0,162,19000,0,19000,7260,120,3.6,10,10,16.0,1189,9,999999999,240,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101900,565,1359,382,112,0,112,13000,0,13000,4720,70,2.6,10,10,11.2,457,9,999999999,250,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101800,326,1359,379,55,0,55,6400,0,6400,2160,70,3.6,10,10,16.0,2896,9,999999999,250,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101600,75,1053,379,11,0,11,1300,0,1300,420,80,3.6,10,10,17.6,2134,9,999999999,250,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,101600,0,0,382,0,0,0,0,0,0,0,90,3.1,10,10,19.2,2438,9,999999999,250,0.1550,0,88,0.150,0.0,1.0 +1995,9,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101700,0,0,382,0,0,0,0,0,0,0,90,3.1,10,10,9.6,1981,9,999999999,250,0.1550,0,88,0.150,1.0,1.0 +1995,9,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101600,0,0,377,0,0,0,0,0,0,0,40,3.1,10,10,9.6,457,9,999999999,259,0.1550,0,88,0.150,1.0,1.0 +1995,9,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101600,0,0,377,0,0,0,0,0,0,0,40,2.6,10,10,11.2,1524,9,999999999,259,0.1550,0,88,0.150,1.0,1.0 +1995,9,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101500,0,0,377,0,0,0,0,0,0,0,50,3.1,10,10,9.6,1494,9,999999999,259,0.1550,0,88,0.150,1.0,1.0 +1995,9,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,101500,0,0,373,0,0,0,0,0,0,0,30,2.6,10,10,6.4,1341,9,999999999,259,0.1550,0,88,0.150,3.0,1.0 +1995,9,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,101400,0,0,373,0,0,0,0,0,0,0,80,4.1,10,10,14.4,1128,9,999999999,270,0.1540,0,88,0.150,1.0,1.0 +1995,9,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101400,0,0,376,0,0,0,0,0,0,0,50,3.1,10,10,9.6,1067,9,999999999,270,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101300,0,0,377,0,0,0,0,0,0,0,50,3.1,10,10,14.4,1250,9,999999999,270,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101400,0,0,376,0,0,0,0,0,0,0,360,4.6,10,10,11.2,244,9,999999999,270,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101400,0,0,377,0,0,0,0,0,0,0,50,3.6,10,10,6.4,1097,9,999999999,270,0.1540,0,88,0.150,2.0,1.0 +1995,9,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101400,5,283,377,0,0,0,0,0,0,0,60,2.6,10,10,6.4,914,9,999999999,279,0.1540,0,88,0.150,1.0,1.0 +1995,9,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101300,179,1360,377,29,0,29,3300,0,3300,1070,80,2.6,10,10,12.8,1676,9,999999999,279,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101400,431,1360,379,70,0,70,8200,0,8200,2900,350,2.6,10,10,19.2,1524,9,999999999,279,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,101500,655,1360,382,104,0,104,12400,0,12400,4720,50,3.1,10,10,19.2,244,9,999999999,270,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,101400,833,1360,386,170,0,170,20100,0,20100,7840,80,3.1,10,10,20.8,2134,9,999999999,270,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,14.4,78,101400,953,1360,390,201,0,201,23900,0,23900,9520,110,4.6,10,10,24.0,2896,9,999999999,259,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,101400,1007,1360,393,269,0,269,31600,0,31600,12200,60,4.1,10,10,24.0,3353,9,999999999,259,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,12.8,68,101300,991,1360,391,211,0,211,25200,0,25200,10060,60,2.6,10,10,19.2,2743,9,999999999,259,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,14.4,78,101300,906,1360,390,189,0,189,22400,0,22400,8870,70,3.1,10,10,19.2,2743,9,999999999,250,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,101200,758,1360,392,151,0,151,17800,0,17800,6830,90,3.6,10,10,20.8,2286,9,999999999,250,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.9,78,101200,558,1360,387,100,0,100,11700,0,11700,4280,110,3.6,10,10,20.8,732,9,999999999,240,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,101200,318,1360,384,47,0,47,5500,0,5500,1880,110,2.6,10,10,20.8,884,9,999999999,240,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101200,70,1009,382,11,0,11,1300,0,1300,420,100,3.6,10,10,16.0,884,9,999999999,229,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101200,0,0,382,0,0,0,0,0,0,0,60,2.6,10,10,17.6,1067,9,999999999,229,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,101300,0,0,382,0,0,0,0,0,0,0,50,2.6,10,10,16.0,1250,9,999999999,229,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101300,0,0,379,0,0,0,0,0,0,0,360,2.6,10,10,14.4,1676,9,999999999,220,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101300,0,0,379,0,0,0,0,0,0,0,20,2.6,10,10,12.8,1433,9,999999999,220,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101300,0,0,380,0,0,0,0,0,0,0,50,2.1,10,10,11.2,1219,9,999999999,209,0.1540,0,88,0.150,0.0,1.0 +1995,9,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101300,0,0,380,0,0,0,0,0,0,0,50,2.1,10,10,12.8,1829,9,999999999,209,0.1540,0,88,0.150,0.0,1.0 +1995,9,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101300,0,0,351,0,0,0,0,0,0,0,0,0.0,6,6,16.0,2286,9,999999999,209,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101300,0,0,379,0,0,0,0,0,0,0,360,2.6,10,10,11.2,518,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101300,0,0,379,0,0,0,0,0,0,0,300,3.1,10,10,11.2,518,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101300,0,0,348,0,0,0,0,0,0,0,290,2.6,6,6,11.2,518,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,101400,0,0,329,0,0,0,0,0,0,0,0,0.0,1,1,9.6,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,101400,4,261,336,0,4,0,0,0,0,0,260,3.1,3,3,9.6,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101500,174,1361,375,22,0,22,2600,0,2600,850,280,4.6,10,10,9.6,244,9,999999999,179,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101500,427,1361,375,60,0,60,7100,0,7100,2540,260,4.1,10,10,8.0,274,9,999999999,179,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,101500,650,1361,378,105,0,105,12500,0,12500,4750,260,3.6,10,10,8.0,274,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,101600,828,1361,373,299,71,255,32800,7200,28400,8380,270,4.6,9,9,9.6,335,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,101500,948,1361,340,699,831,120,74000,83600,15600,3220,250,4.6,0,0,11.2,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,14.4,75,101500,1001,1361,341,747,845,125,79400,85300,16400,3640,240,4.6,0,0,11.2,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.9,68,101400,985,1361,345,732,840,124,77700,84700,16200,3510,240,5.7,0,0,14.4,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,12.2,57,101400,900,1361,349,656,816,116,69200,81800,14900,2910,230,4.6,0,0,16.0,77777,9,999999999,189,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,12.8,55,101300,752,1361,355,524,763,102,54700,75300,12900,2210,230,4.6,0,0,19.2,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,14.4,63,101300,551,1361,354,349,664,80,36900,63600,11100,1620,220,4.1,0,0,20.8,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.8,57,101400,311,1361,352,159,461,54,16500,37300,7900,990,220,5.2,0,0,24.0,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,101400,64,986,348,19,84,14,2200,3500,1900,240,230,6.2,0,0,24.0,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.1,53,101400,0,0,347,0,0,0,0,0,0,0,230,4.6,0,0,24.0,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,12.2,59,101500,0,0,346,0,0,0,0,0,0,0,240,7.7,0,0,24.0,77777,9,999999999,200,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,13.3,65,101500,0,0,345,0,0,0,0,0,0,0,240,6.7,0,0,20.8,77777,9,999999999,209,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,101500,0,0,343,0,0,0,0,0,0,0,240,5.2,0,0,20.8,77777,9,999999999,209,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.3,68,101600,0,0,342,0,0,0,0,0,0,0,250,5.7,0,0,19.2,77777,9,999999999,209,0.1530,0,88,0.150,0.0,1.0 +1995,9,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,101500,0,0,340,0,0,0,0,0,0,0,260,4.1,0,0,19.2,77777,9,999999999,209,0.1530,0,88,0.150,0.0,1.0 +1995,9,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.3,73,101600,0,0,337,0,0,0,0,0,0,0,260,2.6,0,0,17.6,77777,9,999999999,209,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.8,73,101600,0,0,334,0,0,0,0,0,0,0,280,3.1,0,0,17.6,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,101600,0,0,329,0,0,0,0,0,0,0,260,3.1,0,0,17.6,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,101700,0,0,329,0,0,0,0,0,0,0,270,3.1,0,0,16.0,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.3,83,101700,0,0,327,0,0,0,0,0,0,0,280,2.6,0,0,16.0,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,101800,3,238,327,0,4,0,0,0,0,0,300,2.6,0,0,17.6,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,9.4,56,101900,170,1361,339,62,196,38,6500,11500,5100,680,320,3.1,3,1,19.2,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.3,49,102000,422,1361,343,233,487,82,24000,43200,10600,1520,340,5.2,2,1,19.2,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,102100,646,1361,349,406,627,109,42700,61400,13500,2270,360,4.6,3,1,20.8,77777,9,999999999,220,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,8.9,46,102100,823,1361,352,558,738,112,58400,73400,13900,2550,20,4.1,2,1,24.0,77777,9,999999999,209,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,9.4,44,102100,943,1361,357,625,715,130,65600,71600,15800,3360,20,3.6,3,1,24.0,77777,9,999999999,209,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,8.3,38,102100,996,1361,355,739,836,128,78300,84200,16500,3660,360,5.2,0,0,32.0,77777,9,999999999,200,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,6.1,34,102100,979,1361,350,725,832,126,76700,83800,16300,3510,30,4.6,0,0,32.0,77777,9,999999999,200,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,5.0,29,102100,894,1361,354,648,807,118,68200,80800,15000,2920,360,3.6,0,0,32.0,77777,9,999999999,200,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,4.4,29,102100,745,1361,350,516,754,103,53700,74300,12900,2200,360,4.6,0,0,32.0,77777,9,999999999,189,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,0.6,23,102200,544,1361,343,342,652,81,36000,62300,11100,1630,20,4.1,0,0,32.0,77777,9,999999999,189,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,-1.7,20,102200,304,1361,335,153,444,54,15800,35500,7900,990,50,4.6,0,0,32.0,77777,9,999999999,179,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,0.0,26,102300,59,942,330,17,72,13,2000,2900,1800,220,40,5.7,0,0,32.0,77777,9,999999999,179,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,1.7,31,102300,0,0,329,0,0,0,0,0,0,0,20,4.1,0,0,32.0,77777,9,999999999,179,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,3.9,41,102400,0,0,321,0,0,0,0,0,0,0,30,4.1,0,0,32.0,77777,9,999999999,170,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,6.1,50,102500,0,0,322,0,0,0,0,0,0,0,40,4.1,0,0,32.0,77777,9,999999999,170,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.7,58,102500,0,0,315,0,0,0,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,160,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,102500,0,0,312,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,160,0.1520,0,88,0.150,0.0,1.0 +1995,9,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,6.1,59,102600,0,0,309,0,0,0,0,0,0,0,50,4.6,0,0,32.0,77777,9,999999999,160,0.1520,0,88,0.150,0.0,1.0 +1995,9,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.9,51,102600,0,0,307,0,0,0,0,0,0,0,50,3.6,0,0,32.0,77777,9,999999999,150,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,3.3,54,102600,0,0,299,0,0,0,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,150,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,4.4,61,102600,0,0,298,0,0,0,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.6,64,102600,0,0,302,0,0,0,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.7,71,102700,0,0,301,0,0,0,0,0,0,0,40,3.6,0,0,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.7,69,102700,3,216,309,0,2,0,0,0,0,0,50,3.6,1,1,32.0,77777,9,999999999,129,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,6.7,64,102800,165,1362,313,62,186,39,6400,10700,5100,700,50,4.1,1,1,32.0,77777,9,999999999,129,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.7,58,102900,418,1362,315,239,554,69,24900,49400,9700,1310,70,3.6,0,0,32.0,77777,9,999999999,129,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,102900,641,1362,326,428,705,96,45300,69300,12600,2030,70,3.6,0,0,32.0,77777,9,999999999,129,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,7.8,50,102900,818,1362,331,585,782,115,61000,77600,14200,2570,60,4.1,0,0,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,7.2,45,102900,937,1362,335,693,822,127,72800,82400,15900,3270,120,3.1,0,0,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.3,47,102900,990,1362,354,622,557,217,67700,58000,25400,6390,150,4.1,3,3,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,102800,973,1362,354,681,624,235,73300,64800,26800,6770,150,6.2,2,2,32.0,77777,9,999999999,139,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,9.4,50,102700,887,1362,355,570,613,170,59900,61700,19500,4310,110,4.6,3,3,32.0,77777,9,999999999,150,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.9,51,102700,738,1362,348,441,592,119,46500,59100,14400,2660,140,5.2,2,2,32.0,77777,9,999999999,150,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.3,50,102800,537,1362,348,312,484,121,33100,46300,14800,2340,120,5.2,3,3,32.0,77777,9,999999999,150,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,102800,296,1362,333,143,380,60,15200,29700,8700,1080,120,4.6,1,1,32.0,77777,9,999999999,160,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.3,60,102800,55,897,321,15,59,12,1700,2300,1600,200,90,4.1,0,0,32.0,77777,9,999999999,160,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.3,64,102800,0,0,317,0,0,0,0,0,0,0,80,3.6,0,0,32.0,77777,9,999999999,160,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,102800,0,0,310,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,160,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,102800,0,0,310,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,170,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,102700,0,0,310,0,0,0,0,0,0,0,60,2.6,0,0,32.0,77777,9,999999999,170,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.9,80,102700,0,0,305,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,170,0.1500,0,88,0.150,0.0,1.0 +1995,9,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.3,83,102700,0,0,300,0,0,0,0,0,0,0,50,2.6,0,0,32.0,77777,9,999999999,179,0.1500,0,88,0.150,0.0,1.0 +1995,9,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102700,0,0,298,0,0,0,0,0,0,0,40,2.6,0,0,32.0,77777,9,999999999,179,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.9,86,102700,0,0,300,0,0,0,0,0,0,0,40,3.6,0,0,32.0,77777,9,999999999,179,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,8.9,86,102700,0,0,300,0,0,0,0,0,0,0,40,3.1,0,0,32.0,77777,9,999999999,179,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,102700,0,0,298,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,189,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102700,0,0,313,0,0,0,0,0,0,0,30,2.6,4,4,32.0,77777,9,999999999,189,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,9.4,89,102700,2,193,316,0,7,0,0,0,0,0,40,2.1,4,4,32.0,77777,9,999999999,189,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.0,89,102700,161,1363,317,69,144,52,7200,7800,6200,1010,40,3.6,3,3,24.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,9.4,74,102700,413,1363,323,237,562,67,24800,50000,9600,1280,40,4.1,2,2,24.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.9,64,102700,636,1363,326,407,699,81,42700,67900,10800,1700,40,3.1,1,1,24.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,8.3,58,102700,813,1363,330,559,803,80,58500,79400,11000,1860,30,2.1,1,1,24.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,6.7,48,102700,932,1363,334,657,828,90,68400,82500,11800,2260,60,2.6,1,1,32.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,5.6,39,102600,985,1363,336,741,894,95,77100,89200,12400,2500,30,1.5,0,0,32.0,77777,9,999999999,200,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,5.6,37,102600,967,1363,339,725,889,93,75400,88700,12300,2410,150,2.6,0,0,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,102500,881,1363,338,648,867,87,67500,86100,11700,2080,190,4.1,0,0,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,102400,731,1363,338,517,820,76,54000,80400,10800,1670,190,3.6,0,0,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,10.0,58,102400,529,1363,333,343,730,60,36300,69300,9300,1280,190,3.6,0,0,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.3,52,102400,289,1363,331,154,536,40,15800,43400,6600,780,150,2.6,0,0,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,11.1,70,102400,50,875,333,15,104,9,1600,4900,1300,180,150,3.1,1,1,24.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,102400,0,0,340,0,0,0,0,0,0,0,110,3.1,3,3,32.0,77777,9,999999999,209,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.2,80,102400,0,0,323,0,0,0,0,0,0,0,120,1.5,0,0,32.0,77777,9,999999999,220,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,11.7,81,102400,0,0,320,0,0,0,0,0,0,0,50,2.1,0,0,32.0,77777,9,999999999,220,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.2,11.0,87,102400,0,0,316,0,0,0,0,0,0,0,50,3.1,0,0,32.0,77777,9,999999999,220,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.4,10.3,90,102400,0,0,312,0,0,0,0,0,0,0,50,4.2,0,0,32.0,77777,9,999999999,220,0.1490,0,88,0.150,0.0,1.0 +1995,9,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.6,9.6,93,102300,0,0,307,0,0,0,0,0,0,0,50,5.2,0,0,32.0,77777,9,999999999,220,0.1490,0,88,0.150,0.0,1.0 +2001,10,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.8,8.8,89,101300,0,0,350,0,0,0,0,0,0,0,10,6.2,10,10,11.2,2438,9,999999999,279,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,8.1,86,101200,0,0,345,0,0,0,0,0,0,0,360,7.2,10,10,16.0,2438,9,999999999,270,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.2,7.4,83,101200,0,0,341,0,0,0,0,0,0,0,360,8.3,10,10,16.0,1524,9,999999999,270,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,6.7,83,101100,0,0,336,0,0,0,0,0,0,0,350,9.3,10,10,16.0,3048,9,999999999,259,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.2,89,101100,0,0,334,0,0,0,0,0,0,0,340,6.2,10,10,16.0,2743,9,999999999,259,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.2,86,101100,1,148,336,0,0,0,0,0,0,0,340,5.2,10,10,16.0,2743,9,999999999,250,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.1,77,101100,154,1364,338,45,0,45,4900,0,4900,1400,340,6.2,10,10,16.0,2438,9,999999999,250,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.6,69,101100,406,1364,343,46,0,46,5500,0,5500,1980,360,6.2,10,10,16.0,2438,9,999999999,240,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,101100,629,1364,346,94,0,94,11200,0,11200,4260,10,5.7,10,10,16.0,2134,9,999999999,240,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,101100,805,1364,346,128,0,128,15400,0,15400,6110,350,7.2,10,10,16.0,2743,9,999999999,229,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.6,64,101100,924,1364,348,105,0,105,13100,0,13100,5400,10,4.6,10,10,16.0,2743,9,999999999,229,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,5.0,61,101100,975,1364,347,115,0,115,14300,0,14300,5960,10,5.2,10,10,16.0,2743,9,999999999,229,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.7,69,101100,957,1364,349,148,0,148,18000,0,18000,7390,340,4.1,10,10,16.0,2743,9,999999999,220,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,101000,870,1364,350,167,0,167,19900,0,19900,7880,350,4.1,10,10,16.0,2134,9,999999999,220,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,101000,721,1364,346,150,0,150,17600,0,17600,6630,340,5.2,9,9,16.0,2591,9,999999999,209,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,100900,518,1364,349,152,17,145,17100,1200,16600,5450,330,4.6,9,9,16.0,2896,9,999999999,209,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.8,67,101000,278,1364,349,79,38,72,8700,3100,8100,1810,320,2.1,9,9,16.0,3353,9,999999999,200,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.7,60,101000,43,807,350,2,0,2,300,0,300,80,0,0.0,9,9,16.0,3048,9,999999999,200,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.3,69,101000,0,0,337,0,0,0,0,0,0,0,270,2.6,7,7,16.0,3048,9,999999999,189,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101000,0,0,349,0,0,0,0,0,0,0,260,2.6,9,9,16.0,3048,9,999999999,189,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101000,0,0,349,0,0,0,0,0,0,0,250,3.6,9,9,16.0,7620,9,999999999,189,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.6,86,101000,0,0,347,0,0,0,0,0,0,0,250,2.6,9,9,16.0,7620,9,999999999,179,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,101000,0,0,323,0,0,0,0,0,0,0,250,3.1,5,5,16.0,77777,9,999999999,179,0.1480,0,88,0.140,0.0,1.0 +2001,10,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,101000,0,0,323,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,170,0.1480,0,88,0.140,0.0,1.0 +2001,10,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,101000,0,0,323,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,170,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101000,0,0,317,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,170,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101000,0,0,299,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,9.4,100,101000,0,0,303,0,0,0,0,0,0,0,0,0.0,2,2,16.0,77777,9,999999999,179,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,101100,0,0,312,0,0,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,179,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,101200,1,125,317,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,179,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101200,150,1365,315,47,0,47,5100,0,5100,1410,0,0.0,3,3,16.0,77777,9,999999999,189,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.6,75,101300,401,1365,330,244,453,111,25200,39700,13500,2110,290,1.5,2,2,16.0,77777,9,999999999,189,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,10.6,63,101300,624,1365,332,431,642,137,44300,61600,16100,2690,0,0.0,0,0,16.0,77777,9,999999999,189,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,11.7,61,101400,800,1365,360,543,645,164,56500,64200,18800,3730,290,3.6,5,5,16.0,77777,9,999999999,200,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.1,53,101300,918,1365,347,613,586,218,65800,60700,24900,5770,250,4.1,0,0,16.0,77777,9,999999999,200,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,12.2,55,101300,970,1365,352,653,607,221,68000,60900,24600,6110,230,4.6,0,0,16.0,77777,9,999999999,200,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,13.9,61,101200,951,1365,369,668,682,191,70000,68800,21900,5230,230,6.2,3,3,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.3,57,101200,864,1365,376,600,673,172,62600,67500,19800,4200,250,5.2,5,5,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,13.3,55,101200,714,1365,374,451,572,151,46600,56100,17200,3170,220,6.2,3,3,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,12.2,50,101200,511,1365,371,303,469,127,31800,44300,15100,2460,290,4.6,2,2,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,11.1,48,101200,270,1365,362,136,378,61,14300,28300,8600,1100,290,5.7,1,1,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,11.7,55,101300,39,762,348,2,0,2,300,0,300,80,270,1.5,0,0,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,12.8,66,101400,0,0,341,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,14.4,84,101500,0,0,333,0,0,0,0,0,0,0,220,2.6,0,0,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,101500,0,0,334,0,0,0,0,0,0,0,210,3.6,0,0,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101600,0,0,331,0,0,0,0,0,0,0,250,3.1,0,0,16.0,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101600,0,0,326,0,0,0,0,0,0,0,0,0.0,0,0,14.4,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101600,0,0,326,0,0,0,0,0,0,0,220,3.6,0,0,14.4,77777,9,999999999,209,0.1460,0,88,0.140,0.0,1.0 +2001,10,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,101600,0,0,322,0,0,0,0,0,0,0,240,3.6,0,0,14.4,77777,9,999999999,209,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101600,0,0,325,0,0,0,0,0,0,0,250,2.6,0,0,14.4,77777,9,999999999,209,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101700,0,0,320,0,0,0,0,0,0,0,0,0.0,0,0,12.8,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,101700,0,0,320,0,0,0,0,0,0,0,240,2.6,0,0,8.0,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101700,0,0,320,0,0,0,0,0,0,0,0,0.0,0,0,9.6,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101700,1,102,334,0,0,0,0,0,0,0,0,0.0,3,3,8.0,77777,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101700,145,1365,340,81,178,62,8200,8800,7300,1290,0,0.0,2,2,6.4,77777,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,101800,397,1365,349,222,356,118,22700,31000,13600,2260,220,3.6,3,3,6.4,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101800,619,1365,353,425,636,135,43600,61000,15800,2640,230,5.2,2,2,8.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101800,795,1365,363,576,742,142,60400,74300,17000,3280,190,3.6,3,3,8.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,101700,913,1365,367,645,688,183,67400,69200,21000,4750,180,3.6,2,2,11.2,77777,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,16.1,68,101700,964,1365,358,683,715,177,72100,72500,20800,5000,190,5.2,0,0,14.4,77777,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101600,945,1365,375,668,706,178,70300,71400,20800,4870,180,4.6,2,2,16.0,77777,9,999999999,259,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,101600,857,1365,365,571,601,192,59100,59800,21400,4560,190,5.7,0,0,16.0,77777,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.2,69,101500,707,1365,365,467,631,139,48500,62100,16300,2940,180,6.2,0,0,16.0,77777,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101500,504,1365,363,308,555,102,31600,51300,12600,1920,180,6.2,0,0,16.0,77777,9,999999999,250,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101500,263,1365,354,126,338,60,13100,24900,8300,1090,190,5.7,0,0,16.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101500,36,740,349,0,0,0,0,0,0,0,180,5.7,0,0,16.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,101500,0,0,349,0,0,0,0,0,0,0,190,4.6,0,0,16.0,77777,9,999999999,240,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101600,0,0,348,0,0,0,0,0,0,0,210,4.6,0,0,16.0,77777,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,101600,0,0,346,0,0,0,0,0,0,0,210,4.6,0,0,16.0,77777,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101600,0,0,343,0,0,0,0,0,0,0,210,4.1,0,0,16.0,77777,9,999999999,229,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,101600,0,0,338,0,0,0,0,0,0,0,200,2.6,0,0,14.4,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2001,10,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,101600,0,0,338,0,0,0,0,0,0,0,210,3.1,0,0,14.4,77777,9,999999999,220,0.1450,0,88,0.140,0.0,1.0 +2001,10,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,101600,0,0,334,0,0,0,0,0,0,0,220,3.1,0,0,14.4,77777,9,999999999,220,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,101500,0,0,331,0,0,0,0,0,0,0,0,0.0,0,0,12.8,77777,9,999999999,220,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101500,0,0,329,0,0,0,0,0,0,0,0,0.0,0,0,11.2,77777,9,999999999,220,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101500,0,0,329,0,0,0,0,0,0,0,220,3.1,0,0,9.6,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101500,0,0,326,0,0,0,0,0,0,0,220,1.5,0,0,8.0,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,101600,0,80,329,0,0,0,0,0,0,0,230,4.1,0,0,4.8,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101600,141,1366,352,67,91,58,7100,5000,6600,1210,230,4.6,5,5,6.4,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,101600,392,1366,340,223,389,111,22900,33800,13200,2110,240,4.6,0,0,6.4,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101700,614,1366,343,398,575,139,42300,56600,16800,2790,230,4.1,0,0,8.0,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,16.7,76,101700,790,1366,354,544,669,156,56700,66600,18100,3530,230,5.7,0,0,8.0,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.0,61,101600,907,1366,360,669,779,151,71000,79100,18400,3980,230,6.7,0,0,16.0,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,15.6,58,101600,958,1366,369,714,787,160,75800,80100,19500,4520,200,4.1,0,0,16.0,77777,9,999999999,209,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,15.0,54,101500,939,1366,371,656,682,186,68800,68800,21400,5000,200,5.2,0,0,16.0,77777,9,999999999,200,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,16.1,60,101500,851,1366,369,599,708,157,62900,71200,18500,3820,180,4.1,0,0,16.0,77777,9,999999999,200,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,16.7,64,101400,700,1366,383,489,731,113,51500,72500,14200,2450,190,5.2,3,3,16.0,77777,9,999999999,200,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101400,497,1366,375,322,601,103,33100,55300,12900,1920,180,4.6,2,2,16.0,77777,9,999999999,189,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,101400,256,1366,373,120,310,62,12500,22500,8300,1130,180,3.6,3,3,16.0,77777,9,999999999,189,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101500,32,694,355,0,0,0,0,0,0,0,190,3.1,2,2,16.0,77777,9,999999999,189,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,101500,0,0,360,0,0,0,0,0,0,0,190,4.6,3,3,16.0,77777,9,999999999,179,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,14.4,75,101600,0,0,352,0,0,0,0,0,0,0,210,3.6,2,2,16.0,77777,9,999999999,179,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,101600,0,0,334,0,0,0,0,0,0,0,210,3.1,0,0,16.0,77777,9,999999999,179,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,101600,0,0,331,0,0,0,0,0,0,0,210,1.5,0,0,16.0,77777,9,999999999,170,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,101600,0,0,336,0,0,0,0,0,0,0,220,3.6,0,0,16.0,77777,9,999999999,170,0.1440,0,88,0.140,0.0,1.0 +2001,10,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,101600,0,0,334,0,0,0,0,0,0,0,220,3.1,0,0,16.0,77777,9,999999999,170,0.1440,0,88,0.140,0.0,1.0 +2001,10,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101600,0,0,331,0,0,0,0,0,0,0,180,2.6,0,0,16.0,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101600,0,0,331,0,0,0,0,0,0,0,200,3.6,0,0,16.0,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,101600,0,0,327,0,0,0,0,0,0,0,210,2.6,0,0,16.0,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.3,86,101600,0,0,325,0,0,0,0,0,0,0,210,2.1,0,0,14.4,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101600,0,0,325,0,0,0,0,0,0,0,220,3.1,0,0,11.2,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101600,0,57,326,0,0,0,0,0,0,0,230,3.6,0,0,12.8,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.0,93,101600,136,1367,329,35,0,35,3900,0,3900,1130,210,2.6,0,0,11.2,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101600,387,1367,337,231,468,98,24000,40500,12500,1830,220,4.1,0,0,11.2,77777,9,999999999,160,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101600,609,1367,342,405,637,121,41900,61200,14600,2400,220,4.6,0,0,11.2,77777,9,999999999,170,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,101600,785,1367,348,544,688,148,56900,68600,17400,3360,230,4.6,0,0,11.2,77777,9,999999999,170,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,101500,902,1367,355,614,628,198,63800,62800,22200,4980,230,6.2,0,0,16.0,77777,9,999999999,170,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,16.1,66,101500,952,1367,361,689,715,190,72300,72100,21900,5200,200,4.6,0,0,16.0,77777,9,999999999,170,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,17.2,71,101400,933,1367,363,638,592,233,68200,61300,26200,6300,170,4.1,0,0,16.0,77777,9,999999999,170,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,16.7,66,101300,844,1367,380,541,553,198,57900,56900,22600,4780,180,5.2,6,3,16.0,77777,9,999999999,179,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,101200,693,1367,372,433,519,169,45800,52100,19300,3590,170,6.2,6,2,16.0,77777,9,999999999,189,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,101200,490,1367,358,285,490,109,30200,45800,13700,2070,170,7.2,0,0,16.0,77777,9,999999999,200,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.2,78,101100,249,1367,354,123,373,55,12900,26800,8000,990,180,8.8,0,0,16.0,77777,9,999999999,209,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.8,87,101100,29,672,365,0,0,0,0,0,0,0,180,8.8,6,3,14.4,77777,9,999999999,229,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101100,0,0,347,0,0,0,0,0,0,0,180,7.7,0,0,12.8,77777,9,999999999,240,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101100,0,0,345,0,0,0,0,0,0,0,190,7.2,0,0,11.2,77777,9,999999999,250,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101100,0,0,344,0,0,0,0,0,0,0,200,4.6,0,0,12.8,77777,9,999999999,259,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.7,87,101100,0,0,343,0,0,0,0,0,0,0,180,6.2,0,0,14.4,77777,9,999999999,270,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,101000,0,0,359,0,0,0,0,0,0,0,180,9.3,6,2,16.0,77777,9,999999999,290,0.1430,0,88,0.140,0.0,1.0 +2001,10,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,100900,0,0,345,0,0,0,0,0,0,0,190,10.8,0,0,16.0,77777,9,999999999,300,0.1430,0,88,0.140,0.0,1.0 +2001,10,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,100800,0,0,345,0,0,0,0,0,0,0,180,9.3,0,0,16.0,77777,9,999999999,309,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,100700,0,0,356,0,0,0,0,0,0,0,180,10.3,2,2,16.0,77777,9,999999999,309,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,100600,0,0,367,0,0,0,0,0,0,0,180,11.3,5,5,16.0,77777,9,999999999,300,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,100500,0,0,389,0,0,0,0,0,0,0,180,11.3,9,9,16.0,3048,9,999999999,300,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,100500,0,0,389,0,0,0,0,0,0,0,190,9.8,9,9,16.0,3353,9,999999999,290,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,100400,0,34,389,0,0,0,0,0,0,0,190,8.8,9,9,16.0,7620,9,999999999,290,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,100400,132,1368,403,18,0,18,2100,0,2100,670,190,7.7,10,10,16.0,7620,9,999999999,290,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,17.2,84,100500,382,1368,403,39,0,39,4700,0,4700,1680,210,9.3,10,10,16.0,2743,9,999999999,279,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.8,90,100500,604,1368,400,68,0,68,8300,0,8300,3170,220,9.8,10,10,16.0,2743,9,999999999,279,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,100600,779,1368,382,90,0,90,11100,0,11100,4430,280,8.8,10,10,16.0,640,9,999999999,270,0.1420,0,88,0.140,1.0,1.0 +2001,10,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,100800,896,1368,366,105,0,105,13000,0,13000,5340,290,11.3,10,10,16.0,640,9,999999999,270,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,100900,946,1368,347,109,0,109,13600,0,13600,5620,310,10.3,9,9,16.0,2591,9,999999999,270,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,8.3,60,100800,926,1368,341,597,473,276,62600,48800,29500,7520,310,9.3,5,5,16.0,77777,9,999999999,259,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,5.6,48,100900,838,1368,340,593,690,169,61800,69000,19500,3990,300,9.8,5,5,16.0,77777,9,999999999,250,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,5.0,44,100900,686,1368,342,449,572,161,47700,57400,18800,3390,310,8.2,5,5,16.0,77777,9,999999999,229,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.3,42,101000,483,1368,335,259,329,142,27400,31400,16300,2930,320,10.8,5,5,16.0,77777,9,999999999,220,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,2.2,40,101100,242,1368,351,84,111,64,9100,8200,7700,1370,310,7.2,9,9,16.0,7620,9,999999999,209,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,2.8,44,101100,25,627,349,0,0,0,0,0,0,0,300,6.7,9,9,16.0,7620,9,999999999,189,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,3.3,47,101200,0,0,339,0,0,0,0,0,0,0,300,4.1,8,8,16.0,7620,9,999999999,179,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.3,51,101200,0,0,341,0,0,0,0,0,0,0,280,3.6,9,9,16.0,7620,9,999999999,170,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.9,53,101300,0,0,342,0,0,0,0,0,0,0,310,3.1,9,9,16.0,7620,9,999999999,150,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.3,51,101300,0,0,341,0,0,0,0,0,0,0,300,4.1,9,9,16.0,1981,9,999999999,139,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,101300,0,0,316,0,0,0,0,0,0,0,280,6.2,3,3,16.0,77777,9,999999999,120,0.1420,0,88,0.140,0.0,1.0 +2001,10,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.7,49,101300,0,0,307,0,0,0,0,0,0,0,300,8.2,2,2,16.0,77777,9,999999999,110,0.1420,0,88,0.140,0.0,1.0 +2001,10,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,2.2,56,101400,0,0,292,0,0,0,0,0,0,0,310,5.7,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.2,58,101400,0,0,289,0,0,0,0,0,0,0,310,5.7,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.2,61,101400,0,0,287,0,0,0,0,0,0,0,320,3.6,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.2,63,101400,0,0,285,0,0,0,0,0,0,0,290,4.6,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.0,54,101500,0,0,282,0,0,0,0,0,0,0,300,6.2,0,0,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,101600,0,11,293,0,0,0,0,0,0,0,280,5.7,3,3,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.1,58,101600,127,1369,293,19,0,19,2200,0,2200,700,270,5.7,2,2,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,1.1,54,101700,377,1369,300,218,391,109,22300,33400,13000,2070,280,7.2,3,3,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.1,52,101700,599,1369,300,393,576,140,41600,56400,16800,2800,300,7.2,2,2,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.0,44,101700,774,1369,306,557,749,133,58700,74900,16200,3030,300,8.2,3,3,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-0.6,39,101700,891,1369,308,651,737,170,68300,74200,19900,4300,300,8.2,2,2,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-1.7,33,101700,940,1369,319,611,529,246,64900,54800,27200,6740,290,9.8,5,5,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,101700,920,1369,318,597,550,226,63800,56900,25400,5990,280,10.3,5,5,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-3.3,30,101700,831,1369,315,575,648,180,59600,64500,20300,4170,310,10.8,5,5,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-3.9,31,101700,680,1369,327,438,548,165,46300,54800,19000,3470,300,9.3,9,9,16.0,2286,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-3.9,30,101800,476,1369,312,258,345,138,27400,32800,16000,2830,300,9.3,5,5,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-3.9,32,101900,235,1369,307,67,42,59,7300,3300,6700,1460,310,9.3,5,5,16.0,77777,9,999999999,120,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-3.9,35,102000,22,582,298,0,0,0,0,0,0,0,290,9.3,3,3,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,102100,0,0,292,0,0,0,0,0,0,0,300,7.7,2,2,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.8,42,102200,0,0,280,0,0,0,0,0,0,0,320,6.2,0,0,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-6.1,33,102300,0,0,274,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-6.1,35,102300,0,0,272,0,0,0,0,0,0,0,310,4.6,0,0,16.0,77777,9,999999999,110,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-4.4,42,102400,0,0,271,0,0,0,0,0,0,0,280,3.1,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.9,43,102400,0,0,272,0,0,0,0,0,0,0,280,3.6,0,0,16.0,77777,9,999999999,100,0.1400,0,88,0.140,0.0,1.0 +2001,10,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,102400,0,0,273,0,0,0,0,0,0,0,290,8.2,0,0,16.0,77777,9,999999999,100,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,102400,0,0,269,0,0,0,0,0,0,0,300,9.3,0,0,16.0,77777,9,999999999,100,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,102500,0,0,268,0,0,0,0,0,0,0,300,8.2,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,102600,0,0,267,0,0,0,0,0,0,0,310,8.8,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,102700,0,0,265,0,0,0,0,0,0,0,320,7.7,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,102800,0,0,271,0,0,0,0,0,0,0,320,8.2,5,2,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,102900,123,1358,276,21,0,21,2400,0,2400,760,310,8.2,5,3,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,102900,373,1369,277,172,163,127,18400,14300,14500,2810,310,10.3,5,2,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,103000,594,1369,285,400,539,166,41600,52500,18700,3380,310,9.3,5,3,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-3.3,42,103000,769,1369,286,519,639,159,53800,63300,18200,3500,340,9.3,5,2,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.2,43,103000,885,1369,294,577,550,220,61500,56700,24700,5580,320,7.2,5,3,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,103000,934,1369,296,683,721,190,71500,72600,21800,5040,330,6.2,5,2,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.2,39,103000,914,1369,302,620,616,208,64300,61500,23100,5270,310,5.2,5,3,16.0,77777,9,999999999,60,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-2.8,34,103000,824,1369,303,546,619,173,56800,61600,19600,4000,350,5.7,5,2,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-2.2,36,103000,673,1369,306,437,607,138,45200,59100,16100,2820,340,4.1,5,3,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-2.8,34,103100,469,1369,303,278,512,102,29400,47200,13200,1920,330,6.2,5,2,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,103100,227,1369,299,111,373,49,11300,26200,6900,850,320,6.7,5,3,16.0,77777,9,999999999,69,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-2.8,39,103300,20,559,284,0,0,0,0,0,0,0,320,6.2,0,0,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.8,41,103300,0,0,282,0,0,0,0,0,0,0,310,4.6,0,0,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.2,46,103400,0,0,278,0,0,0,0,0,0,0,340,1.5,0,0,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,103400,0,0,276,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,80,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,103500,0,0,273,0,0,0,0,0,0,0,350,2.1,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,103500,0,0,275,0,0,0,0,0,0,0,330,2.1,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,103500,0,0,271,0,0,0,0,0,0,0,310,3.6,0,0,16.0,77777,9,999999999,89,0.1390,0,88,0.140,0.0,1.0 +2001,10,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,103500,0,0,266,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,103500,0,0,262,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.1,79,103600,0,0,266,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,103600,0,0,257,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,103700,0,0,261,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,103800,0,0,257,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,103800,118,1336,267,22,0,22,2500,0,2500,790,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.2,63,103800,368,1370,285,133,59,117,14500,5300,13100,2930,0,0.0,0,0,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.6,50,103800,589,1370,299,407,520,183,41800,50500,20000,3760,0,0.0,7,2,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.6,46,103800,763,1370,307,545,694,157,56500,68700,18200,3440,0,0.0,8,3,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,0.6,43,103700,879,1370,309,540,441,256,56600,45400,27400,6540,230,3.6,7,2,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,103700,928,1370,321,593,511,245,62900,52900,27000,6600,220,4.6,8,5,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.6,42,103500,907,1370,319,579,502,245,61200,51800,26800,6440,200,4.6,7,5,16.0,77777,9,999999999,89,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,1.7,44,103400,818,1370,342,563,648,175,58400,64400,19800,4000,190,4.1,10,9,16.0,7620,9,999999999,100,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,1.1,43,103400,666,1370,320,448,642,135,46400,62500,15900,2750,210,3.6,7,5,16.0,77777,9,999999999,100,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.9,51,103400,462,1370,345,246,339,132,26100,31900,15400,2690,180,2.6,10,9,16.0,7620,9,999999999,110,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.6,57,103300,220,1370,327,101,297,54,10600,20000,7300,980,190,5.2,7,5,16.0,77777,9,999999999,120,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.0,66,103300,17,514,314,0,0,0,0,0,0,0,220,3.1,8,5,16.0,77777,9,999999999,129,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,7.2,71,103300,0,0,321,0,0,0,0,0,0,0,220,4.1,7,5,16.0,77777,9,999999999,129,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.8,72,103400,0,0,344,0,0,0,0,0,0,0,220,4.6,10,9,16.0,3962,9,999999999,139,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.0,66,103400,0,0,306,0,0,0,0,0,0,0,230,4.6,7,2,16.0,77777,9,999999999,150,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,103400,0,0,313,0,0,0,0,0,0,0,230,7.2,8,3,16.0,77777,9,999999999,160,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.2,77,103300,0,0,299,0,0,0,0,0,0,0,220,5.2,0,0,16.0,77777,9,999999999,170,0.1380,0,88,0.140,0.0,1.0 +2001,10,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.2,74,103300,0,0,301,0,0,0,0,0,0,0,220,7.7,0,0,16.0,77777,9,999999999,170,0.1380,0,88,0.140,0.0,1.0 +2001,10,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.2,77,103200,0,0,299,0,0,0,0,0,0,0,220,5.7,0,0,16.0,77777,9,999999999,179,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,103200,0,0,300,0,0,0,0,0,0,0,230,6.7,0,0,16.0,77777,9,999999999,189,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.6,71,103200,0,0,295,0,0,0,0,0,0,0,240,5.2,0,0,16.0,77777,9,999999999,189,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,103200,0,0,295,0,0,0,0,0,0,0,250,6.7,0,0,16.0,77777,9,999999999,189,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,103200,0,0,292,0,0,0,0,0,0,0,270,4.1,0,0,16.0,77777,9,999999999,200,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,103200,0,0,295,0,0,0,0,0,0,0,230,3.6,2,2,16.0,77777,9,999999999,200,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,103200,114,1314,311,23,0,23,2600,0,2600,810,240,4.6,5,5,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.2,74,103300,363,1371,319,197,348,105,20200,29300,12400,1990,240,4.6,5,5,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,103300,584,1371,328,367,521,145,38600,50700,17000,2890,250,5.2,5,5,16.0,77777,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,103200,758,1371,334,494,554,187,52400,56300,21200,4170,230,6.7,5,5,16.0,77777,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.9,64,103100,873,1371,359,577,586,202,61900,60400,23200,5020,230,7.2,9,9,16.0,7620,9,999999999,229,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.9,56,103000,922,1371,370,617,601,211,66400,62300,24400,5570,230,8.8,9,9,16.0,7620,9,999999999,229,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.3,52,102900,901,1371,364,655,688,202,68000,68700,22700,5040,230,7.2,8,8,16.0,7620,9,999999999,240,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,8.9,52,102900,811,1371,376,494,422,243,53200,44800,26600,5990,240,5.7,9,9,16.0,7620,9,999999999,229,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,9.4,52,102800,659,1371,379,420,553,153,44600,55100,18000,3160,230,5.7,9,9,16.0,7620,9,999999999,229,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,10.0,56,102800,455,1371,377,276,540,97,28300,48500,12100,1770,190,4.1,9,9,16.0,7620,9,999999999,229,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,102800,213,1371,371,88,208,56,9300,13500,7200,1050,180,5.2,9,9,16.0,7620,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,102800,15,491,366,0,0,0,0,0,0,0,190,4.1,9,9,16.0,7620,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.3,93,102800,0,0,351,0,0,0,0,0,0,0,190,3.1,8,8,16.0,7620,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,102800,0,0,346,0,0,0,0,0,0,0,190,5.2,5,5,16.0,77777,9,999999999,220,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,102800,0,0,339,0,0,0,0,0,0,0,210,4.1,5,5,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102800,0,0,328,0,0,0,0,0,0,0,220,2.6,2,2,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102800,0,0,328,0,0,0,0,0,0,0,230,2.6,3,3,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,102700,0,0,322,0,0,0,0,0,0,0,0,0.0,2,2,16.0,77777,9,999999999,209,0.1370,0,88,0.140,0.0,1.0 +2001,10,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102700,0,0,314,0,0,0,0,0,0,0,240,4.1,0,0,16.0,77777,9,999999999,200,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,102700,0,0,325,0,0,0,0,0,0,0,220,3.1,3,3,16.0,77777,9,999999999,200,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102600,0,0,333,0,0,0,0,0,0,0,220,3.1,5,5,16.0,77777,9,999999999,200,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102600,0,0,333,0,0,0,0,0,0,0,230,4.6,5,5,16.0,77777,9,999999999,200,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,102600,0,0,322,0,0,0,0,0,0,0,220,3.6,2,2,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,102600,0,0,346,0,0,0,0,0,0,0,220,3.1,10,9,16.0,7620,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102700,109,1292,340,25,0,25,2800,0,2800,860,230,3.6,7,7,16.0,7620,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,102700,358,1372,342,182,243,118,18900,20700,13500,2410,240,4.6,5,5,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.9,84,102700,578,1372,350,367,515,150,38500,50000,17300,3000,250,6.2,5,5,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,14.4,80,102700,752,1372,356,526,694,144,54800,68800,17000,3160,240,5.2,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,102600,868,1372,363,614,707,166,64400,71000,19300,4080,230,5.2,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,13.9,65,102500,916,1372,369,623,613,212,67000,63500,24400,5550,200,4.1,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,102400,895,1372,370,602,610,203,62400,60800,22600,5010,160,4.6,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,102300,805,1372,371,557,684,155,58200,68300,18100,3560,160,6.2,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,16.1,78,102300,652,1372,369,414,577,139,42700,55800,16000,2780,170,6.2,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,102300,448,1372,366,260,499,97,27600,45400,12700,1810,180,6.7,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.1,87,102300,206,1372,360,99,335,48,10300,21800,7000,860,170,7.7,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,102300,13,446,358,0,0,0,0,0,0,0,180,8.8,5,5,16.0,77777,9,999999999,179,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.6,90,102300,0,0,354,0,0,0,0,0,0,0,190,6.7,5,5,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,15.0,87,102300,0,0,348,0,0,0,0,0,0,0,210,4.6,3,3,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,102200,0,0,338,0,0,0,0,0,0,0,230,3.6,2,2,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,13.9,87,102200,0,0,342,0,0,0,0,0,0,0,210,4.6,3,3,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,102200,0,0,322,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,13.9,97,102200,0,0,320,0,0,0,0,0,0,0,250,2.6,0,0,16.0,77777,9,999999999,189,0.1360,0,88,0.140,0.0,1.0 +2001,10,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102200,0,0,314,0,0,0,0,0,0,0,190,2.1,0,0,16.0,77777,9,999999999,189,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102100,0,0,314,0,0,0,0,0,0,0,170,2.6,0,0,16.0,77777,9,999999999,200,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102100,0,0,318,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,200,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102100,0,0,325,0,0,0,0,0,0,0,0,0.0,2,2,16.0,77777,9,999999999,200,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,102100,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,200,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,102200,0,0,327,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,102200,105,1270,333,28,0,28,3100,0,3100,930,0,0.0,5,5,16.0,77777,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,102200,353,1373,345,199,349,109,20200,29000,12700,2080,230,2.1,5,5,16.0,77777,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,13.9,81,102200,573,1373,352,395,633,130,40400,59700,15400,2460,0,0.0,5,5,16.0,77777,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,13.9,76,102200,747,1373,358,533,755,121,56300,75400,15100,2710,210,1.5,5,5,16.0,77777,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,102100,862,1373,363,633,731,172,66100,73200,19900,4170,0,0.0,5,5,16.0,77777,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,14.4,70,102100,910,1373,367,556,409,284,60000,43900,30900,7710,200,4.1,5,5,16.0,77777,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,14.4,70,101900,888,1373,380,631,652,208,65200,64900,23100,5060,190,2.6,8,8,16.0,7620,9,999999999,229,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101900,798,1373,393,505,523,200,53500,53400,22400,4620,190,4.1,10,9,16.0,7620,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,101900,645,1373,393,380,459,164,40000,45500,18500,3390,170,4.6,10,9,16.0,7620,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,15.6,79,101900,441,1373,387,254,475,101,26700,43000,12900,1890,180,4.6,10,9,16.0,7620,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.7,93,101900,199,1373,379,93,328,46,9800,20900,6700,830,180,3.6,10,9,16.0,7620,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101900,11,400,372,0,0,0,0,0,0,0,180,1.5,10,9,16.0,7620,9,999999999,220,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101900,0,0,365,0,0,0,0,0,0,0,0,0.0,8,8,16.0,7620,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,101900,0,0,344,0,0,0,0,0,0,0,190,2.1,4,2,16.0,7620,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,102000,0,0,336,0,0,0,0,0,0,0,210,2.6,1,1,16.0,7620,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,102000,0,0,338,0,0,0,0,0,0,0,0,0.0,4,2,16.0,7620,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101900,0,0,366,0,0,0,0,0,0,0,210,3.1,10,9,16.0,7620,9,999999999,209,0.1350,0,88,0.140,0.0,1.0 +2001,10,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101900,0,0,363,0,0,0,0,0,0,0,170,2.1,10,9,16.0,7620,9,999999999,200,0.1350,0,88,0.140,0.0,1.0 +2001,10,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101900,0,0,350,0,0,0,0,0,0,0,190,2.1,7,7,16.0,7620,9,999999999,200,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101900,0,0,346,0,0,0,0,0,0,0,0,0.0,9,6,16.0,4267,9,999999999,209,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101900,0,0,342,0,0,0,0,0,0,0,0,0.0,8,6,16.0,7620,9,999999999,220,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101900,0,0,346,0,0,0,0,0,0,0,0,0.0,7,5,14.4,4267,9,999999999,220,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,101900,0,0,340,0,0,0,0,0,0,0,140,1.5,4,4,16.0,4267,9,999999999,229,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102000,0,0,324,0,0,0,0,0,0,0,0,0.0,1,1,12.8,7620,9,999999999,240,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,102000,101,1248,341,31,0,31,3400,0,3400,990,0,0.0,3,3,12.8,3658,9,999999999,240,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.1,93,102100,348,1373,341,168,191,119,18000,16300,13800,2610,0,0.0,1,1,16.0,77777,9,999999999,250,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,15.6,76,102100,568,1373,347,389,565,154,40400,54500,17800,3080,0,0.0,0,0,16.0,77777,9,999999999,259,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.6,73,102100,741,1373,385,533,646,183,56400,65400,21000,4020,150,2.6,8,8,16.0,1463,9,999999999,259,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,102100,856,1373,374,416,187,299,45300,19600,33000,8280,120,3.6,4,4,16.0,77777,9,999999999,270,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.8,15.6,64,102100,904,1373,379,665,703,201,69000,70200,22700,5030,150,3.1,4,4,16.0,77777,9,999999999,279,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.6,68,102000,882,1373,371,637,712,179,66600,71400,20600,4420,160,4.1,3,3,16.0,77777,9,999999999,279,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,15.0,66,102000,791,1373,370,482,434,231,50300,44200,24700,5390,130,4.6,3,3,16.0,77777,9,999999999,279,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,14.4,66,102000,639,1373,366,424,576,155,44700,57000,18100,3170,130,5.7,3,3,16.0,77777,9,999999999,279,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,102000,434,1373,345,203,212,136,21400,19500,15200,2800,110,6.2,0,0,16.0,77777,9,999999999,270,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,102100,193,1373,350,88,204,60,9200,12400,7500,1170,120,5.2,3,3,12.8,77777,9,999999999,270,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,102100,9,378,362,0,0,0,0,0,0,0,100,4.1,8,8,11.2,213,9,999999999,270,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,102100,0,0,357,0,0,0,0,0,0,0,90,4.6,7,7,12.8,213,9,999999999,259,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,102200,0,0,362,0,0,0,0,0,0,0,100,5.2,8,8,12.8,244,9,999999999,259,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,102200,0,0,344,0,0,0,0,0,0,0,90,2.6,5,4,14.4,77777,9,999999999,259,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,102200,0,0,334,0,0,0,0,0,0,0,70,1.5,3,3,11.2,77777,9,999999999,250,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102100,0,0,331,0,0,0,0,0,0,0,70,2.1,3,3,9.6,77777,9,999999999,250,0.1340,0,88,0.140,0.0,1.0 +2001,10,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,102100,0,0,356,0,0,0,0,0,0,0,60,2.1,9,9,9.6,366,9,999999999,250,0.1340,0,88,0.140,0.0,1.0 +2001,10,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,102100,0,0,354,0,0,0,0,0,0,0,100,4.1,8,8,16.0,427,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.3,90,102100,0,0,371,0,0,0,0,0,0,0,90,4.1,10,10,16.0,427,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102000,0,0,368,0,0,0,0,0,0,0,90,3.1,10,10,12.8,457,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102000,0,0,368,0,0,0,0,0,0,0,70,2.6,10,10,12.8,518,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102000,0,0,368,0,0,0,0,0,0,0,60,2.6,10,10,12.8,457,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102000,0,0,368,0,0,0,0,0,0,0,0,0.0,10,10,14.4,518,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102000,97,1225,368,34,0,34,3700,0,3700,1040,0,0.0,10,10,14.4,396,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,13.9,93,102000,343,1374,372,48,0,48,5600,0,5600,1950,90,3.1,10,10,11.2,457,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101900,563,1374,375,184,25,174,20700,2000,19900,6410,70,4.1,10,10,12.8,701,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,14.4,90,101900,736,1374,378,276,61,244,30400,6100,27100,7400,110,3.1,10,10,16.0,335,9,999999999,229,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,14.4,86,101900,850,1374,382,422,187,306,45800,19600,33700,8430,110,5.7,10,10,16.0,335,9,999999999,229,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.0,81,101800,898,1374,372,453,192,327,49200,20200,36000,9360,100,6.7,8,8,16.0,914,9,999999999,229,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101600,876,1374,364,525,401,269,56700,42900,29300,7030,110,7.7,6,5,16.0,6706,9,999999999,229,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.0,81,101600,785,1374,372,447,333,256,47700,35200,27600,6280,100,7.2,8,8,16.0,1067,9,999999999,229,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,15.0,81,101500,632,1374,372,429,599,152,45200,59200,17900,3100,100,6.7,8,8,16.0,975,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.0,84,101500,427,1374,369,253,548,82,26000,48600,10800,1520,110,6.2,8,8,16.0,975,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101400,186,1374,365,79,293,40,8400,18000,5900,710,110,6.7,8,8,16.0,853,9,999999999,240,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101400,7,332,383,0,0,0,0,0,0,0,100,6.2,10,10,16.0,305,9,999999999,250,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101300,0,0,365,0,0,0,0,0,0,0,130,4.6,8,8,16.0,244,9,999999999,250,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101400,0,0,384,0,0,0,0,0,0,0,110,5.7,10,10,16.0,427,9,999999999,250,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,101300,0,0,387,0,0,0,0,0,0,0,110,6.2,10,10,16.0,427,9,999999999,250,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,101200,0,0,387,0,0,0,0,0,0,0,120,7.2,10,10,16.0,244,9,999999999,259,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,101200,0,0,388,0,0,0,0,0,0,0,120,7.2,10,10,16.0,640,9,999999999,259,0.1330,0,88,0.140,0.0,1.0 +2001,10,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,101000,0,0,388,0,0,0,0,0,0,0,110,7.2,10,10,11.2,762,9,999999999,259,0.1330,0,88,0.140,1.0,1.0 +2001,10,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,100900,0,0,392,0,0,0,0,0,0,0,140,7.7,10,10,6.4,549,9,999999999,270,0.1320,0,88,0.140,3.0,1.0 +2001,10,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,100700,0,0,392,0,0,0,0,0,0,0,150,8.2,10,10,8.0,244,9,999999999,250,0.1320,0,88,0.140,1.0,1.0 +2001,10,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,18.3,100,100700,0,0,395,0,0,0,0,0,0,0,180,10.8,10,10,14.4,183,9,999999999,240,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.0,90,100800,0,0,382,0,0,0,0,0,0,0,310,8.2,10,10,16.0,549,9,999999999,229,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.8,81,100900,0,0,376,0,0,0,0,0,0,0,300,4.1,10,10,16.0,1402,9,999999999,209,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.3,86,101000,0,0,344,0,0,0,0,0,0,0,270,6.2,5,5,16.0,77777,9,999999999,200,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,12.8,83,101200,93,1203,341,39,0,39,4200,0,4200,1120,270,5.7,4,4,16.0,77777,9,999999999,189,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,10.6,70,101400,338,1375,338,161,186,116,17400,15700,13500,2540,280,6.7,3,3,16.0,77777,9,999999999,179,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,8.3,56,101500,557,1375,326,383,559,156,39700,53700,17900,3120,290,7.7,0,0,16.0,77777,9,999999999,160,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,8.9,54,101600,730,1375,332,521,731,131,54500,72400,15900,2850,270,5.7,0,0,16.0,77777,9,999999999,150,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,8.9,51,101600,844,1375,352,577,610,201,61600,62700,23000,4830,300,7.7,3,3,16.0,77777,9,999999999,139,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.9,49,101600,892,1375,354,592,607,198,61500,60600,22100,4870,270,6.7,3,3,16.0,77777,9,999999999,120,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,6.7,40,101500,869,1375,355,578,586,206,61800,60400,23500,5090,270,9.3,3,3,16.0,77777,9,999999999,110,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,7.8,42,101600,778,1375,359,475,469,209,50000,47700,22900,4770,280,8.8,3,3,16.0,77777,9,999999999,120,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,6.7,40,101700,625,1375,355,412,611,133,42400,58700,15600,2620,290,9.3,3,3,16.0,77777,9,999999999,120,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,6.1,42,101800,420,1375,348,257,576,80,26400,50900,10800,1480,260,6.7,3,3,16.0,77777,9,999999999,120,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,6.1,45,101800,179,1375,343,78,306,38,7900,19300,5400,660,280,6.7,3,3,16.0,77777,9,999999999,129,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,7.2,50,101900,6,309,328,0,0,0,0,0,0,0,260,6.2,0,0,16.0,77777,9,999999999,129,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,6.7,50,102000,0,0,325,0,0,0,0,0,0,0,270,6.2,0,0,16.0,77777,9,999999999,129,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,102100,0,0,319,0,0,0,0,0,0,0,250,3.1,0,0,16.0,77777,9,999999999,129,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.9,70,102100,0,0,315,0,0,0,0,0,0,0,270,3.6,0,0,16.0,77777,9,999999999,139,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,6.7,55,102200,0,0,317,0,0,0,0,0,0,0,290,4.1,0,0,16.0,77777,9,999999999,139,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.2,64,102200,0,0,311,0,0,0,0,0,0,0,310,2.6,0,0,16.0,77777,9,999999999,139,0.1320,0,88,0.140,0.0,1.0 +2001,10,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,102200,0,0,305,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,150,0.1320,0,88,0.140,0.0,1.0 +2001,10,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.7,71,102200,0,0,301,0,0,0,0,0,0,0,10,2.1,0,0,16.0,77777,9,999999999,150,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,102200,0,0,294,0,0,0,0,0,0,0,60,3.6,0,0,16.0,77777,9,999999999,150,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.2,89,102200,0,0,290,0,0,0,0,0,0,0,60,2.6,0,0,16.0,77777,9,999999999,150,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,102200,0,0,287,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.8,93,102200,0,0,290,0,0,0,0,0,0,0,80,2.6,0,0,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,102200,0,0,291,0,0,0,0,0,0,0,70,3.6,0,0,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,102100,89,1181,298,45,0,45,4800,0,4800,1170,60,3.6,0,0,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,9.4,74,102100,333,1376,313,211,372,121,21800,30500,14400,2520,80,4.1,0,0,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,12.2,75,102000,552,1376,343,329,435,153,34000,41700,17200,3050,110,5.7,3,3,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,12.2,70,101900,725,1376,348,476,469,228,49100,47100,24200,5080,110,9.3,3,3,16.0,77777,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,13.9,78,101900,839,1376,368,298,66,257,32700,6700,28600,8440,110,7.7,8,8,16.0,1463,9,999999999,160,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,101700,886,1376,363,447,216,308,48700,22700,34100,8720,110,7.2,5,5,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.9,73,101500,863,1376,374,348,90,291,38200,9200,32500,9520,120,6.7,8,8,16.0,1676,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101400,772,1376,364,515,523,221,53800,53100,23900,5050,110,8.8,5,5,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,13.9,70,101300,618,1376,376,422,693,110,44000,67100,13800,2230,120,6.2,8,8,16.0,1524,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.0,78,101200,413,1376,359,251,558,83,25700,48900,11000,1510,110,5.7,4,4,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,15.6,87,101000,172,1376,357,69,239,39,7200,14100,5400,700,100,6.2,5,5,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.1,96,101000,4,264,347,0,0,0,0,0,0,0,110,5.2,3,3,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100900,0,0,347,0,0,0,0,0,0,0,120,2.6,3,3,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100900,0,0,350,0,0,0,0,0,0,0,140,3.6,4,4,16.0,77777,9,999999999,170,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100800,0,0,346,0,0,0,0,0,0,0,170,2.1,5,5,16.0,77777,9,999999999,179,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,100800,0,0,349,0,0,0,0,0,0,0,270,11.3,8,8,14.4,762,9,999999999,179,0.1310,0,88,0.140,0.0,1.0 +2001,10,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,100900,0,0,343,0,0,0,0,0,0,0,280,7.7,10,10,16.0,1158,9,999999999,179,0.1310,0,88,0.140,1.0,1.0 +2001,10,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,7.8,80,100800,0,0,345,0,0,0,0,0,0,0,290,7.2,10,10,16.0,1494,9,999999999,179,0.1310,0,88,0.140,0.0,1.0 +2001,10,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,100800,0,0,342,0,0,0,0,0,0,0,270,3.6,10,10,16.0,1829,9,999999999,179,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.7,77,100700,0,0,342,0,0,0,0,0,0,0,270,5.2,10,10,16.0,2591,9,999999999,170,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,100700,0,0,329,0,0,0,0,0,0,0,230,5.7,10,9,16.0,3048,9,999999999,170,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,100800,0,0,309,0,0,0,0,0,0,0,230,8.8,4,4,16.0,77777,9,999999999,160,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,100800,0,0,323,0,0,0,0,0,0,0,230,11.3,8,8,16.0,1524,9,999999999,150,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.7,77,100800,0,0,325,0,0,0,0,0,0,0,240,9.3,8,8,16.0,1524,9,999999999,150,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.6,71,100900,85,1136,324,0,0,0,0,0,0,0,240,10.8,8,8,16.0,1402,9,999999999,139,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.6,69,100900,328,1377,312,171,293,101,17900,23900,12200,2020,250,10.8,4,4,16.0,77777,9,999999999,129,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,100900,547,1377,315,343,504,142,35800,48200,16600,2800,250,12.4,4,4,16.0,77777,9,999999999,120,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,100900,719,1377,322,502,616,179,53000,62100,20500,3870,260,12.4,5,5,16.0,77777,9,999999999,120,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.9,51,101000,833,1377,323,522,471,236,54700,48200,25400,5700,260,13.4,4,4,16.0,77777,9,999999999,110,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.9,51,101000,879,1377,323,508,343,288,54500,36600,31000,7640,250,13.4,5,4,16.0,77777,9,999999999,100,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,2.8,46,101000,856,1377,324,578,598,204,61700,61500,23300,4960,270,12.4,4,4,16.0,77777,9,999999999,100,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,1.1,39,101000,765,1377,327,509,630,158,52800,62300,18100,3450,270,11.8,5,5,16.0,77777,9,999999999,100,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.6,40,101100,612,1377,334,400,599,133,41100,57200,15500,2580,270,10.3,8,8,16.0,1829,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-0.6,38,101200,407,1377,318,215,376,104,22400,33000,12600,1960,270,12.9,5,5,16.0,77777,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-0.6,41,101200,166,1377,313,72,222,45,7400,12700,5800,820,260,11.8,5,5,16.0,77777,9,999999999,89,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-0.6,44,101400,3,241,303,0,0,0,0,0,0,0,250,10.8,3,3,16.0,77777,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-0.6,44,101400,0,0,300,0,0,0,0,0,0,0,270,9.8,2,2,16.0,77777,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-0.6,46,101500,0,0,306,0,0,0,0,0,0,0,260,11.8,5,5,16.0,77777,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101600,0,0,314,0,0,0,0,0,0,0,270,10.3,8,8,16.0,2286,9,999999999,80,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.8,41,101700,0,0,301,0,0,0,0,0,0,0,280,11.8,6,6,16.0,77777,9,999999999,69,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-4.4,37,101800,0,0,305,0,0,0,0,0,0,0,290,9.8,8,8,16.0,1981,9,999999999,69,0.1290,0,88,0.140,0.0,1.0 +2001,10,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-4.4,39,101900,0,0,290,0,0,0,0,0,0,0,290,11.3,4,4,16.0,77777,9,999999999,69,0.1290,0,88,0.140,0.0,1.0 +2001,10,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-4.4,40,101900,0,0,285,0,0,0,0,0,0,0,290,9.8,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-3.9,42,102000,0,0,286,0,0,0,0,0,0,0,280,7.2,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.2,50,102100,0,0,273,0,0,0,0,0,0,0,280,6.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,102100,0,0,272,0,0,0,0,0,0,0,280,7.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,102200,0,0,270,0,0,0,0,0,0,0,270,7.2,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,102200,0,0,279,0,0,0,0,0,0,0,270,6.2,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,102300,81,1113,282,0,0,0,0,0,0,0,270,6.7,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,102400,323,1377,287,181,361,96,18400,28900,11600,1810,270,6.7,3,3,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,102400,541,1377,279,343,560,122,36300,53600,15200,2360,280,5.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,102400,713,1377,285,477,622,153,49200,60900,17500,3180,310,7.2,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-1.1,42,102400,827,1377,290,547,586,194,58400,60100,22200,4570,320,6.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-1.7,39,102300,873,1377,292,562,529,226,59600,54500,25000,5650,290,6.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-1.7,36,102300,850,1377,297,577,646,178,60100,64500,20200,4210,290,5.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-1.7,33,102300,758,1377,301,503,635,152,52300,62800,17500,3320,310,7.7,0,0,16.0,77777,9,999999999,69,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,102300,605,1377,301,388,604,122,40100,57900,14600,2400,300,6.7,0,0,16.0,77777,9,999999999,80,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,102200,400,1377,301,215,432,89,22600,37800,11600,1650,330,5.2,0,0,16.0,77777,9,999999999,80,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-2.8,33,102300,159,1377,295,67,215,42,6900,12000,5500,760,320,5.7,0,0,16.0,77777,9,999999999,80,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,102300,2,195,287,0,0,0,0,0,0,0,310,3.6,0,0,16.0,77777,9,999999999,80,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.8,37,102400,0,0,288,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,80,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.9,80,102400,0,0,279,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.8,63,102400,0,0,287,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,3.3,73,102400,0,0,281,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.9,80,102400,0,0,279,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,89,0.1280,0,88,0.140,0.0,1.0 +2001,10,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102400,0,0,271,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,100,0.1280,0,88,0.140,0.0,1.0 +2001,10,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,102400,0,0,268,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,100,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,102300,0,0,268,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,100,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102300,0,0,268,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,3.3,96,102300,0,0,266,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,102300,0,0,276,0,0,0,0,0,0,0,0,0.0,2,1,16.0,77777,9,999999999,110,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,102300,0,0,286,0,0,0,0,0,0,0,240,3.6,1,1,16.0,77777,9,999999999,120,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,102300,77,1091,289,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,7.2,79,102300,317,1378,297,182,362,98,18400,28800,11800,1860,240,3.6,0,0,16.0,77777,9,999999999,129,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,5.0,59,102300,536,1378,304,358,610,120,36600,56700,14400,2230,230,6.2,0,0,16.0,77777,9,999999999,129,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,6.1,62,102300,708,1378,313,496,708,132,51800,69700,15800,2800,230,6.2,2,1,16.0,77777,9,999999999,139,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,5.0,53,102200,821,1378,321,540,586,190,57800,60100,21900,4440,210,5.7,3,2,16.0,77777,9,999999999,139,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,5.0,51,102200,867,1378,313,568,571,208,60700,58800,23600,5120,210,4.6,0,0,16.0,77777,9,999999999,139,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,4.4,47,102000,844,1378,315,554,574,201,59100,59000,22900,4820,180,3.6,1,0,16.0,77777,9,999999999,150,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,6.1,53,102000,752,1378,323,532,695,151,55200,68700,17600,3270,170,5.2,1,1,16.0,77777,9,999999999,150,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.8,58,101900,598,1378,327,372,528,142,39300,51600,16800,2840,160,5.2,1,1,16.0,77777,9,999999999,150,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,8.3,62,101900,393,1378,319,239,573,75,24600,49600,10400,1380,170,7.2,0,0,16.0,77777,9,999999999,150,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,101800,153,1378,321,65,281,34,6600,16400,4800,590,180,7.2,1,1,16.0,7620,9,999999999,150,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.0,77,101900,2,172,314,0,0,0,0,0,0,0,180,8.2,0,0,16.0,77777,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,101800,0,0,340,0,0,0,0,0,0,0,190,8.8,7,7,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101900,0,0,324,0,0,0,0,0,0,0,210,7.7,5,3,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,101900,0,0,321,0,0,0,0,0,0,0,210,6.7,5,2,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,101900,0,0,322,0,0,0,0,0,0,0,200,6.7,4,2,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.7,90,101800,0,0,319,0,0,0,0,0,0,0,200,6.2,1,1,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,101800,0,0,313,0,0,0,0,0,0,0,230,6.2,1,1,16.0,7620,9,999999999,160,0.1270,0,88,0.140,0.0,1.0 +2001,10,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101700,0,0,312,0,0,0,0,0,0,0,220,4.6,4,2,16.0,77777,9,999999999,170,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101700,0,0,312,0,0,0,0,0,0,0,0,0.0,3,2,16.0,7620,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101700,0,0,318,0,0,0,0,0,0,0,0,0.0,6,5,16.0,7620,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,101700,0,0,321,0,0,0,0,0,0,0,0,0.0,7,5,16.0,7620,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,101700,0,0,324,0,0,0,0,0,0,0,0,0.0,6,5,16.0,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101700,0,0,306,0,0,0,0,0,0,0,0,0.0,1,1,16.0,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,101700,73,1069,321,0,0,0,0,0,0,0,0,0.0,5,5,9.6,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,101800,312,1379,339,83,0,83,9300,0,9300,2860,250,6.7,8,8,8.0,213,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101800,531,1379,325,338,411,179,35500,40100,20000,3880,210,4.1,3,3,8.0,7620,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,11.1,81,101800,702,1379,327,496,628,175,52300,63100,20100,3730,0,0.0,2,2,14.4,7620,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,11.7,75,101800,815,1379,325,485,381,259,52000,40400,28000,6460,220,2.1,0,0,14.4,77777,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.7,67,101700,861,1379,333,556,553,210,59300,56900,23700,5140,240,3.6,0,0,16.0,77777,9,999999999,129,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.6,57,101700,837,1379,354,601,669,193,62000,66300,21600,4410,230,4.6,3,3,16.0,77777,9,999999999,129,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,8.9,49,101600,745,1379,354,463,463,212,48300,46800,22900,4740,230,6.2,3,3,16.0,77777,9,999999999,129,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,8.9,47,101700,592,1379,357,398,645,121,41100,61500,14600,2350,230,6.7,3,3,16.0,77777,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,10.0,54,101700,387,1379,353,233,567,73,23900,48900,10200,1340,240,5.7,3,3,16.0,77777,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.6,65,101700,147,1379,343,61,273,31,6100,15600,4400,540,200,3.6,3,3,16.0,77777,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,12.2,78,101800,1,126,340,0,0,0,0,0,0,0,180,1.5,3,3,16.0,77777,9,999999999,139,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,101900,0,0,335,0,0,0,0,0,0,0,0,0.0,3,3,16.0,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,9.4,74,102000,0,0,313,0,0,0,0,0,0,0,230,3.1,0,0,16.0,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,102000,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,150,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.0,75,102100,0,0,316,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.6,86,102100,0,0,309,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,102100,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,160,0.1260,0,88,0.140,0.0,1.0 +2001,10,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,102100,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,160,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,102200,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,170,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,9.4,89,102200,0,0,301,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,102200,0,0,305,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,179,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,102300,0,0,300,0,0,0,0,0,0,0,0,0.0,0,0,14.4,77777,9,999999999,189,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.9,100,102300,0,0,291,0,0,0,0,0,0,0,0,0.0,1,0,11.2,77777,9,999999999,189,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,102300,70,1046,303,0,0,0,0,0,0,0,0,0.0,0,0,9.6,77777,9,999999999,200,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,12.8,90,102400,307,1380,319,176,344,99,17700,26900,11700,1890,0,0.0,0,0,9.6,77777,9,999999999,200,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.8,75,102400,525,1380,331,338,592,112,34600,54900,13600,2090,170,3.6,0,0,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,102400,696,1380,332,458,574,168,48600,57600,19400,3560,180,3.1,0,0,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,12.2,68,102300,809,1380,336,491,429,238,51100,43700,25400,5630,180,4.1,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,13.3,70,102300,855,1380,340,568,595,198,60800,61200,22800,4790,150,5.7,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,102100,831,1380,343,542,586,188,58100,60200,21800,4430,170,7.2,0,0,16.0,77777,9,999999999,229,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.7,84,102000,739,1380,346,480,594,161,51500,60200,19100,3480,170,7.7,0,0,16.0,77777,9,999999999,229,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,16.1,81,102000,585,1380,345,387,656,108,40200,62700,13500,2130,170,10.8,0,0,16.0,77777,9,999999999,229,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101900,380,1380,342,217,498,80,22200,42400,10500,1430,180,11.3,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,11.1,63,101900,140,1380,334,46,147,31,4800,7700,4000,550,180,12.9,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,12.2,72,101900,1,103,331,0,0,0,0,0,0,0,190,10.8,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.3,80,102000,0,0,340,0,0,0,0,0,0,0,190,8.2,2,2,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,13.9,84,102000,0,0,336,0,0,0,0,0,0,0,180,7.7,2,1,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,101900,0,0,331,0,0,0,0,0,0,0,190,6.2,1,1,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101900,0,0,326,0,0,0,0,0,0,0,210,5.2,1,0,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.0,96,101800,0,0,326,0,0,0,0,0,0,0,220,5.7,0,0,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,14.4,96,101800,0,0,329,0,0,0,0,0,0,0,210,4.6,1,1,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,14.4,93,101700,0,0,326,0,0,0,0,0,0,0,210,4.6,1,0,16.0,77777,9,999999999,200,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,101700,0,0,331,0,0,0,0,0,0,0,0,0.0,7,2,16.0,77777,9,999999999,209,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101600,0,0,320,0,0,0,0,0,0,0,200,2.6,1,1,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101600,0,0,314,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,220,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101600,0,0,312,0,0,0,0,0,0,0,0,0.0,0,0,14.4,77777,9,999999999,229,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,101600,0,0,312,0,0,0,0,0,0,0,200,2.6,0,0,9.6,77777,9,999999999,240,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,13.9,100,101700,66,1024,318,12,114,7,1600,6500,1200,170,0,0.0,0,0,4.8,77777,9,999999999,250,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,101800,302,1381,327,186,331,113,19100,25900,13400,2360,0,0.0,0,0,4.8,77777,9,999999999,250,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101700,520,1381,332,297,381,153,31500,37000,17500,3200,210,2.1,0,0,6.4,77777,9,999999999,259,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,14.4,73,101700,691,1381,343,445,568,160,47300,56900,18700,3360,340,2.6,0,0,8.0,77777,9,999999999,270,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,14.4,68,101700,803,1381,364,528,562,200,56000,57400,22500,4620,360,2.1,3,3,16.0,77777,9,999999999,270,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,13.3,61,101700,849,1381,365,508,385,270,54500,41000,29200,6920,10,3.6,3,3,16.0,77777,9,999999999,279,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.9,59,101500,825,1381,371,577,592,222,60700,60600,24400,5280,0,0.0,4,3,16.0,77777,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,13.9,59,101500,733,1381,377,240,36,221,26400,3600,24500,6810,0,0.0,5,5,16.0,77777,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,15.0,70,101500,579,1381,384,180,18,172,20200,1400,19600,6460,150,1.5,8,8,16.0,1372,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,15.6,81,101600,374,1381,395,143,113,112,15500,9900,12800,2470,0,0.0,10,10,14.4,1829,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,16.1,84,101600,134,1381,395,16,0,16,1900,0,1900,610,0,0.0,10,10,11.2,1311,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.1,90,101600,0,81,390,0,0,0,0,0,0,0,0,0.0,10,10,11.2,1494,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.1,93,101700,0,0,386,0,0,0,0,0,0,0,0,0.0,10,10,11.2,2134,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,11.1,65,101700,0,0,383,0,0,0,0,0,0,0,20,5.2,10,10,16.0,2134,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.6,67,101700,0,0,377,0,0,0,0,0,0,0,30,4.1,10,10,16.0,3048,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,10.0,69,101700,0,0,370,0,0,0,0,0,0,0,50,3.6,10,10,16.0,2896,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,101700,0,0,357,0,0,0,0,0,0,0,0,0.0,10,9,16.0,2743,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,10.0,75,101700,0,0,354,0,0,0,0,0,0,0,0,0.0,10,9,16.0,2743,9,999999999,290,0.1250,0,88,0.140,0.0,1.0 +2001,10,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,101700,0,0,364,0,0,0,0,0,0,0,40,2.1,10,10,16.0,1981,9,999999999,290,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,101700,0,0,364,0,0,0,0,0,0,0,30,2.6,10,10,16.0,1981,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,101600,0,0,364,0,0,0,0,0,0,0,0,0.0,10,10,16.0,3048,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101600,0,0,326,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,101600,0,0,328,0,0,0,0,0,0,0,70,3.1,5,5,16.0,77777,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,10.0,83,101700,0,0,346,0,0,0,0,0,0,0,60,2.6,10,9,16.0,2700,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101600,63,1002,339,4,0,4,500,0,500,160,80,3.6,7,7,16.0,7620,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,14.4,90,101600,297,1381,368,76,0,76,8500,0,8500,2630,110,5.7,10,9,12.8,518,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101600,514,1381,383,104,0,104,12000,0,12000,4240,120,5.2,10,10,12.8,396,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,15.6,93,101600,685,1381,383,129,0,129,15200,0,15200,5710,120,5.7,10,10,11.2,457,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.1,93,101500,797,1381,386,236,12,229,27100,1000,26500,9500,110,4.6,10,10,9.6,366,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,101400,843,1381,382,218,6,214,25300,500,25000,9340,110,6.7,10,9,9.6,366,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,16.7,90,101300,818,1381,368,283,30,265,32200,2700,30500,10630,120,5.7,7,7,12.8,366,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,101200,726,1381,397,222,12,216,25300,1000,24800,8620,120,6.2,10,10,12.8,335,9,999999999,270,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,101200,572,1381,398,174,18,167,19700,1400,19100,6290,130,7.2,10,10,9.6,244,9,999999999,279,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,18.3,100,101100,368,1381,395,98,17,94,11100,900,10800,3370,150,6.2,10,10,8.0,183,9,999999999,290,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101100,128,1381,392,50,130,38,5200,5900,4700,720,160,6.7,10,10,5.6,91,9,999999999,290,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,17.0,100,101000,0,35,386,0,0,0,0,0,0,0,150,6.7,10,10,0.2,15,9,999999999,300,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101000,0,0,392,0,0,0,0,0,0,0,160,6.2,10,10,0.2,61,9,999999999,309,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101000,0,0,392,0,0,0,0,0,0,0,160,3.1,10,10,1.8,61,9,999999999,309,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,101000,0,0,392,0,0,0,0,0,0,0,200,3.6,10,10,0.2,30,9,999999999,320,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,100900,0,0,392,0,0,0,0,0,0,0,180,3.6,10,10,0.2,30,9,999999999,329,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100900,0,0,388,0,0,0,0,0,0,0,200,3.6,10,10,0.2,30,9,999999999,329,0.1240,0,88,0.140,0.0,1.0 +2001,10,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100800,0,0,384,0,0,0,0,0,0,0,180,2.6,10,10,0.2,30,9,999999999,340,0.1240,0,88,0.140,0.0,1.0 +2001,10,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100800,0,0,388,0,0,0,0,0,0,0,190,3.6,10,10,0.2,61,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100800,0,0,384,0,0,0,0,0,0,0,180,3.1,10,10,2.0,61,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,100700,0,0,362,0,0,0,0,0,0,0,190,3.6,8,8,8.0,61,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100800,0,0,359,0,0,0,0,0,0,0,170,2.1,8,8,9.6,1981,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,100700,0,0,346,0,0,0,0,0,0,0,170,3.1,6,5,9.6,77777,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,100700,0,0,340,0,0,0,0,0,0,0,200,2.6,6,4,11.2,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,16.7,100,100700,59,979,344,9,120,5,1400,7200,900,180,190,3.6,4,2,12.8,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.8,100,100800,291,1382,381,171,381,91,17400,29100,11200,1720,220,2.1,10,9,9.6,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,18.3,93,100800,509,1382,354,333,587,116,33900,53800,14000,2120,210,4.1,3,1,11.2,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,18.3,90,100800,679,1382,362,465,641,149,47800,62200,17200,3000,190,3.6,4,2,14.4,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.6,17.2,81,100800,791,1382,359,479,393,253,51200,41500,27400,6200,160,4.6,1,1,14.4,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.2,76,100700,836,1382,364,586,667,181,60700,66300,20500,4180,180,4.6,2,1,16.0,7620,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.2,73,100600,812,1382,360,565,669,170,58600,66500,19400,3850,190,3.1,0,0,16.0,77777,9,999999999,350,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,22.2,17.8,76,100600,720,1382,360,445,451,209,46200,45300,22500,4590,170,3.6,0,0,16.0,77777,9,999999999,340,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,17.8,79,100600,566,1382,358,375,579,137,39400,55900,16500,2700,170,3.6,0,0,16.0,77777,9,999999999,329,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,100600,361,1382,355,195,434,82,20600,36600,11000,1510,160,3.6,0,0,16.0,77777,9,999999999,320,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,19.4,17.2,87,100500,122,1382,353,46,215,27,4600,11200,3700,470,140,5.2,1,1,16.0,77777,9,999999999,320,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,100600,0,12,359,0,0,0,0,0,0,0,170,5.7,4,3,16.0,77777,9,999999999,309,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.2,90,100600,0,0,359,0,0,0,0,0,0,0,180,6.7,3,3,16.0,77777,9,999999999,300,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,100600,0,0,341,0,0,0,0,0,0,0,180,5.7,0,0,16.0,77777,9,999999999,290,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,100600,0,0,341,0,0,0,0,0,0,0,190,5.7,0,0,16.0,77777,9,999999999,279,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,16.7,93,100600,0,0,338,0,0,0,0,0,0,0,190,3.1,0,0,14.4,77777,9,999999999,270,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,100600,0,0,335,0,0,0,0,0,0,0,180,3.6,0,0,14.4,77777,9,999999999,259,0.1230,0,88,0.140,0.0,1.0 +2001,10,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,16.7,97,100600,0,0,335,0,0,0,0,0,0,0,150,3.1,0,0,12.8,77777,9,999999999,250,0.1230,0,88,0.140,0.0,1.0 +2001,10,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100500,0,0,353,0,0,0,0,0,0,0,180,5.2,4,4,12.8,77777,9,999999999,250,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,100500,0,0,372,0,0,0,0,0,0,0,190,4.1,8,8,4.8,122,9,999999999,240,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.0,17.0,100,100400,0,0,386,0,0,0,0,0,0,0,180,5.1,10,10,0.8,15,9,999999999,240,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,17.2,100,100300,0,0,388,0,0,0,0,0,0,0,170,4.6,10,10,0.8,30,9,999999999,229,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.0,17.0,94,100200,0,0,373,0,0,0,0,0,0,0,150,5.7,8,8,16.1,2100,9,999999999,229,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,17.2,93,100200,0,0,375,0,0,0,0,0,0,0,170,7.7,8,8,14.4,1524,9,999999999,229,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,17.2,96,100200,56,934,356,7,113,4,1200,6700,800,150,180,5.2,4,4,11.2,77777,9,999999999,220,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,17.8,93,100200,286,1383,345,164,376,86,16700,28500,10700,1620,200,4.6,0,0,11.2,77777,9,999999999,220,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.1,17.8,81,100200,503,1383,355,327,594,110,33400,54500,13500,2030,200,4.6,0,0,16.0,77777,9,999999999,220,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,17.8,71,100100,673,1383,382,472,733,114,49500,72000,14300,2400,220,6.7,3,3,16.0,77777,9,999999999,209,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,25.0,17.2,62,100100,785,1383,390,566,617,215,59400,62800,23700,4930,230,7.7,3,3,16.0,77777,9,999999999,209,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.9,15.0,57,100100,830,1383,401,163,0,163,19300,0,19300,7520,250,6.2,8,8,16.0,1676,9,999999999,209,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,10.0,43,100100,806,1383,392,135,0,135,16200,0,16200,6360,250,10.3,8,8,16.0,1829,9,999999999,200,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,24.4,-1.1,18,100100,714,1383,369,399,297,245,42200,30900,26200,5800,240,11.8,5,5,16.0,77777,9,999999999,189,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,23.3,-3.3,16,100200,560,1383,355,374,579,139,39200,55700,16600,2740,250,11.8,3,3,16.0,77777,9,999999999,179,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,21.7,-5.0,15,100200,355,1383,346,209,540,70,21400,45100,9800,1260,260,10.3,3,3,16.0,77777,9,999999999,170,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,20.0,-4.4,18,100300,117,1348,338,41,177,26,4400,8600,3600,460,270,12.4,3,3,16.0,77777,9,999999999,160,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.9,-2.2,23,100400,0,0,322,0,0,0,0,0,0,0,260,7.2,0,0,16.0,77777,9,999999999,150,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,18.3,-2.8,23,100500,0,0,319,0,0,0,0,0,0,0,260,8.2,0,0,16.0,77777,9,999999999,139,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,-3.3,23,100500,0,0,316,0,0,0,0,0,0,0,270,8.8,0,0,16.0,77777,9,999999999,129,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,-4.4,22,100600,0,0,312,0,0,0,0,0,0,0,270,8.2,0,0,16.0,77777,9,999999999,120,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-2.2,28,100700,0,0,310,0,0,0,0,0,0,0,250,7.7,0,0,16.0,77777,9,999999999,110,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-5.0,22,100700,0,0,307,0,0,0,0,0,0,0,270,7.2,0,0,16.0,77777,9,999999999,100,0.1220,0,88,0.140,0.0,1.0 +2001,10,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-3.3,28,100700,0,0,301,0,0,0,0,0,0,0,270,6.7,0,0,16.0,77777,9,999999999,89,0.1220,0,88,0.140,0.0,1.0 +2001,10,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-1.1,37,100700,0,0,299,0,0,0,0,0,0,0,250,5.7,0,0,16.0,77777,9,999999999,80,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,100700,0,0,301,0,0,0,0,0,0,0,240,7.7,0,0,16.0,77777,9,999999999,80,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-2.8,32,100700,0,0,297,0,0,0,0,0,0,0,260,9.3,0,0,16.0,77777,9,999999999,80,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-3.9,30,100700,0,0,294,0,0,0,0,0,0,0,280,8.8,0,0,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-3.9,31,100700,0,0,292,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-3.3,34,100800,0,0,290,0,0,0,0,0,0,0,270,7.7,0,0,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-2.8,35,100800,53,911,303,5,55,4,800,2700,700,80,260,8.2,3,3,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-2.8,34,100800,281,1384,306,139,192,100,14300,14500,11400,2050,260,9.3,3,3,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-2.8,32,100800,498,1384,310,272,325,154,28600,31200,17400,3230,250,10.3,3,3,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-3.3,29,100700,668,1384,312,466,617,167,49000,61400,19300,3480,250,12.9,3,3,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-3.3,28,100700,779,1384,315,560,774,123,59300,77600,15400,2820,250,10.8,3,3,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-3.3,29,100700,824,1384,315,580,727,146,61000,72900,17400,3430,250,10.8,4,4,16.0,77777,9,999999999,89,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-3.9,28,100600,800,1384,316,576,783,122,61100,78900,15400,2860,250,9.8,5,5,16.0,77777,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,-3.9,27,100600,707,1384,319,495,646,164,50800,62800,18600,3330,250,10.8,5,5,16.0,77777,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-5.6,26,100600,554,1384,321,293,281,180,30900,27700,19700,3900,260,9.3,8,8,16.0,2286,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-5.0,29,100700,349,1384,317,107,51,94,11700,4400,10600,2420,260,11.3,8,8,16.0,2438,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-5.0,30,100800,111,1326,306,14,0,14,1700,0,1700,530,260,12.4,6,6,16.0,2438,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.3,38,100900,0,0,300,0,0,0,0,0,0,0,250,9.8,5,5,16.0,77777,9,999999999,100,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-3.3,39,100900,0,0,293,0,0,0,0,0,0,0,250,9.8,3,3,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-3.9,39,101000,0,0,290,0,0,0,0,0,0,0,260,10.3,3,3,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.8,44,101000,0,0,289,0,0,0,0,0,0,0,270,9.3,3,3,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,101000,0,0,276,0,0,0,0,0,0,0,280,9.3,0,0,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,100900,0,0,278,0,0,0,0,0,0,0,270,10.3,1,1,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,100900,0,0,280,0,0,0,0,0,0,0,260,9.3,2,2,16.0,77777,9,999999999,110,0.1210,0,88,0.140,0.0,1.0 +2001,10,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,100900,0,0,288,0,0,0,0,0,0,0,260,8.8,6,5,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,100900,0,0,294,0,0,0,0,0,0,0,270,7.7,8,7,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,100900,0,0,284,0,0,0,0,0,0,0,270,8.2,4,4,16.0,6706,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101000,0,0,275,0,0,0,0,0,0,0,270,6.7,1,1,16.0,6706,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,101000,0,0,280,0,0,0,0,0,0,0,270,7.2,2,2,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101100,0,0,281,0,0,0,0,0,0,0,260,5.7,3,3,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,101100,49,888,285,4,37,3,600,1800,500,60,270,7.7,4,4,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.0,60,101200,276,1385,288,132,138,104,14000,10700,11900,2240,270,7.7,3,3,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.0,54,101200,492,1385,295,328,520,142,33700,48300,16500,2780,300,8.2,3,3,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,101300,662,1385,302,466,727,117,48600,71100,14500,2420,290,8.2,4,4,16.0,77777,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101300,773,1385,314,554,750,134,58200,74900,16300,3020,280,8.2,8,8,16.0,1494,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,101300,818,1385,315,544,499,248,56500,50900,26300,5930,310,7.2,8,8,16.0,1676,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-1.7,42,101300,794,1385,316,223,42,199,24600,4200,22200,6570,300,6.7,8,8,16.0,1676,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,-2.8,35,101300,701,1385,319,421,397,219,44900,41200,23900,5040,300,5.7,8,8,16.0,1829,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.8,38,101400,547,1385,315,363,631,112,37300,59200,13800,2130,300,9.3,8,8,16.0,1829,9,999999999,120,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.8,38,101500,343,1385,321,198,527,67,20300,43500,9500,1210,320,6.7,9,9,16.0,2438,9,999999999,110,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-2.2,43,101500,106,1304,317,36,198,21,3900,10400,3000,380,310,9.3,9,9,16.0,2438,9,999999999,110,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,101700,0,0,323,0,0,0,0,0,0,0,320,11.3,10,10,16.0,2591,9,999999999,110,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.1,51,101800,0,0,302,0,0,0,0,0,0,0,330,6.7,7,7,16.0,2591,9,999999999,100,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,101900,0,0,291,0,0,0,0,0,0,0,310,7.2,5,5,16.0,77777,9,999999999,100,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9*9?9?9?9*9*9?9*9*9,7.2,-1.0,55,102000,0,0,297,0,0,0,0,0,0,0,320,7.7,7,7,16.0,12067,9,999999999,100,0.1200,0,88,0.140,999.0,99.0 +2001,10,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,102000,0,0,302,0,0,0,0,0,0,0,320,8.2,8,8,16.0,2134,9,999999999,89,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.2,50,102000,0,0,300,0,0,0,0,0,0,0,320,7.7,8,8,16.0,1829,9,999999999,89,0.1200,0,88,0.140,0.0,1.0 +2001,10,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.2,50,102100,0,0,300,0,0,0,0,0,0,0,310,7.2,8,8,16.0,1829,9,999999999,89,0.1200,0,88,0.140,0.0,1.0 +2001,10,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,102200,0,0,283,0,0,0,0,0,0,0,320,5.7,5,5,16.0,77777,9,999999999,80,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,102200,0,0,276,0,0,0,0,0,0,0,330,5.7,3,3,16.0,77777,9,999999999,80,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,102300,0,0,276,0,0,0,0,0,0,0,340,4.6,3,3,16.0,77777,9,999999999,80,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,102400,0,0,274,0,0,0,0,0,0,0,330,4.6,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102500,0,0,272,0,0,0,0,0,0,0,320,4.6,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102600,0,0,272,0,0,0,0,0,0,0,330,4.1,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,102700,46,866,272,4,102,2,900,5900,500,80,360,3.1,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-4.4,45,102800,270,1385,279,159,401,81,16200,29600,10400,1520,350,9.8,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-5.0,40,102900,487,1385,282,321,608,107,32800,55200,13300,1950,350,7.7,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-5.6,36,103000,656,1385,284,421,532,168,44200,52800,19100,3490,350,8.2,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-5.0,35,103000,767,1385,289,486,550,180,51700,55900,20600,4000,340,7.7,3,3,16.0,77777,9,999999999,89,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-5.0,34,102900,812,1385,291,502,469,226,52600,47900,24500,5320,350,6.2,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-6.1,29,102900,787,1385,295,564,675,179,58100,66500,20200,3890,350,7.2,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-6.1,29,102900,695,1385,295,438,533,169,46200,53400,19300,3570,350,6.7,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-6.7,27,102900,541,1385,294,330,549,114,33800,51300,13700,2150,360,7.2,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-7.8,25,103000,337,1385,293,178,420,75,18700,34400,10200,1370,360,6.7,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-7.2,28,103000,101,1258,289,29,122,21,3300,5700,2900,370,360,5.7,3,3,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-5.6,35,103100,0,0,274,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,100,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-5.0,38,103100,0,0,273,0,0,0,0,0,0,0,20,3.6,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.9,43,103200,0,0,272,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-3.9,45,103300,0,0,270,0,0,0,0,0,0,0,360,1.5,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,103300,0,0,264,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,103300,0,0,264,0,0,0,0,0,0,0,340,2.6,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,103300,0,0,265,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1190,0,88,0.140,0.0,1.0 +2001,10,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,103300,0,0,263,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,103300,0,0,260,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,103300,0,0,255,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,103300,0,0,255,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,103300,0,0,257,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,103300,0,0,260,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.1,78,103300,43,843,255,3,63,2,600,3600,400,80,0,0.0,0,0,16.0,77777,9,999999999,120,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,103400,265,1386,274,134,264,83,13900,19300,10200,1640,0,0.0,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,103400,481,1386,279,322,590,117,33800,54600,14700,2240,0,0.0,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,103400,650,1386,285,435,612,147,44600,58800,16900,2880,260,3.1,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,103300,761,1386,287,473,484,206,49600,49000,22500,4620,250,4.1,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-0.6,46,103100,806,1386,289,490,463,220,51500,47200,23900,5130,220,4.6,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.0,44,103000,781,1386,294,500,556,185,53200,56600,21100,4160,220,5.7,0,0,16.0,77777,9,999999999,129,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-1.1,38,102900,689,1386,297,455,610,150,46800,59300,17200,3040,250,4.6,0,0,16.0,77777,9,999999999,139,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,102900,535,1386,303,318,479,133,33400,45600,15700,2600,250,4.6,0,0,16.0,77777,9,999999999,139,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-0.6,37,102800,331,1386,315,192,424,90,19700,34300,11500,1680,240,4.1,3,3,16.0,77777,9,999999999,139,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.2,50,102700,96,1236,316,26,120,18,3000,5500,2600,310,240,5.2,5,5,16.0,77777,9,999999999,139,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.7,47,102800,0,0,337,0,0,0,0,0,0,0,250,4.1,9,9,16.0,3353,9,999999999,139,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.0,40,102800,0,0,318,0,0,0,0,0,0,0,270,4.6,5,5,16.0,77777,9,999999999,150,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,102700,0,0,306,0,0,0,0,0,0,0,230,3.6,3,3,16.0,77777,9,999999999,150,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.2,50,102700,0,0,335,0,0,0,0,0,0,0,250,4.6,9,9,16.0,3048,9,999999999,150,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.8,53,102700,0,0,335,0,0,0,0,0,0,0,270,3.6,9,9,16.0,3048,9,999999999,150,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,0.6,43,102700,0,0,336,0,0,0,0,0,0,0,290,4.6,9,9,16.0,3048,9,999999999,150,0.1180,0,88,0.140,0.0,1.0 +2001,10,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.1,45,102700,0,0,346,0,0,0,0,0,0,0,280,3.6,10,10,16.0,3353,9,999999999,160,0.1180,0,88,0.140,0.0,1.0 +2001,10,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.1,47,102600,0,0,326,0,0,0,0,0,0,0,270,3.6,8,8,16.0,3353,9,999999999,160,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.1,47,102600,0,0,326,0,0,0,0,0,0,0,280,3.1,8,8,16.0,3353,9,999999999,160,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,102600,0,0,322,0,0,0,0,0,0,0,0,0.0,8,8,16.0,2591,9,999999999,150,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.1,47,102700,0,0,343,0,0,0,0,0,0,0,360,3.1,10,10,16.0,2743,9,999999999,150,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.7,49,102800,0,0,327,0,0,0,0,0,0,0,360,2.6,8,8,16.0,2286,9,999999999,139,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.7,54,102800,0,0,306,0,0,0,0,0,0,0,0,0.0,4,4,16.0,77777,9,999999999,139,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.2,58,102900,41,821,302,3,79,1,600,4500,400,40,0,0.0,3,3,16.0,77777,9,999999999,139,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,2.2,50,103000,260,1387,311,154,356,87,15400,25700,10600,1660,0,0.0,3,3,16.0,77777,9,999999999,129,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.9,53,103000,475,1387,318,288,490,119,30000,45100,14500,2280,350,4.6,3,3,16.0,77777,9,999999999,129,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,5.0,55,103000,645,1387,322,396,495,165,41500,49000,18700,3400,360,6.2,3,3,16.0,77777,9,999999999,120,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,3.9,49,103000,755,1387,323,442,363,244,47200,38100,26400,5840,350,6.2,3,3,16.0,77777,9,999999999,120,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,2.8,41,103000,800,1387,329,574,721,157,59800,71700,18300,3540,10,7.2,3,3,16.0,77777,9,999999999,120,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,3.9,46,102900,775,1387,333,552,777,117,58700,78000,14900,2690,340,4.1,5,5,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.3,42,102900,683,1387,335,477,741,111,50200,73000,14100,2360,0,0.0,5,5,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,-1.7,28,102900,529,1387,327,345,624,106,35500,58100,13200,2010,360,5.7,3,3,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,0.0,34,103000,326,1387,320,162,340,82,16800,27400,10300,1520,40,4.6,2,2,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,-2.2,32,103000,91,1213,314,22,84,17,2600,3800,2300,290,30,4.6,3,3,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-3.9,31,103100,0,0,301,0,0,0,0,0,0,0,20,4.1,2,2,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-2.8,37,103200,0,0,301,0,0,0,0,0,0,0,10,3.1,3,3,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-3.9,35,103300,0,0,285,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-3.9,39,103300,0,0,278,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.1,51,103400,0,0,279,0,0,0,0,0,0,0,360,4.1,0,0,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-3.9,42,103400,0,0,274,0,0,0,0,0,0,0,10,3.1,0,0,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-4.4,42,103400,0,0,276,0,0,0,0,0,0,0,10,3.6,1,1,16.0,77777,9,999999999,110,0.1170,0,88,0.140,0.0,1.0 +2001,10,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-3.9,45,103400,0,0,270,0,0,0,0,0,0,0,30,3.6,0,0,16.0,77777,9,999999999,110,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,103500,0,0,267,0,0,0,0,0,0,0,50,3.1,1,1,16.0,77777,9,999999999,110,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,103500,0,0,269,0,0,0,0,0,0,0,360,1.5,1,1,16.0,7620,9,999999999,120,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,103500,0,0,273,0,0,0,0,0,0,0,20,3.1,4,3,16.0,77777,9,999999999,120,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,103600,0,0,288,0,0,0,0,0,0,0,0,0.0,9,8,16.0,4267,9,999999999,129,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-4.4,46,103500,0,0,283,0,0,0,0,0,0,0,60,4.6,7,6,16.0,4267,9,999999999,129,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-3.9,47,103500,38,798,294,1,4,1,200,100,200,10,50,4.1,9,8,16.0,3658,9,999999999,129,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.9,43,103600,254,1388,305,73,21,69,8000,1700,7700,1690,50,3.6,10,9,16.0,3658,9,999999999,139,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.0,56,103500,470,1388,323,253,270,161,26400,25400,17800,3430,70,3.6,10,10,16.0,3353,9,999999999,139,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.7,59,103500,639,1388,314,195,24,184,22100,1900,21200,7150,60,1.5,8,8,16.0,3962,9,999999999,150,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,103400,750,1388,335,100,0,100,12100,0,12100,4770,90,2.1,10,10,16.0,3353,9,999999999,150,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,4.4,65,103300,794,1388,339,151,0,151,17900,0,17900,6920,100,3.1,10,10,16.0,2591,9,999999999,160,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.1,64,103200,769,1388,352,200,6,196,23000,500,22700,8320,180,4.6,10,10,16.0,2591,9,999999999,160,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,103100,677,1388,354,108,0,108,12900,0,12900,4900,170,5.7,10,10,16.0,2438,9,999999999,170,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,103000,524,1388,357,54,0,54,6600,0,6600,2450,170,4.6,10,10,16.0,2286,9,999999999,170,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.0,80,103000,320,1388,359,47,0,47,5500,0,5500,1870,170,4.6,10,10,16.0,2286,9,999999999,170,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,11.1,87,102900,86,1191,360,10,0,10,1200,0,1200,390,170,5.2,10,10,16.0,2438,9,999999999,179,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,102900,0,0,363,0,0,0,0,0,0,0,180,5.7,10,10,16.0,2743,9,999999999,179,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,10.6,80,102900,0,0,363,0,0,0,0,0,0,0,190,6.7,10,10,16.0,2591,9,999999999,189,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,102900,0,0,364,0,0,0,0,0,0,0,210,4.6,10,10,16.0,2743,9,999999999,189,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.1,83,102900,0,0,363,0,0,0,0,0,0,0,200,5.7,10,10,16.0,2896,9,999999999,189,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.7,90,102800,0,0,356,0,0,0,0,0,0,0,200,5.7,10,10,16.0,3048,9,999999999,200,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.2,89,102800,0,0,339,0,0,0,0,0,0,0,210,5.7,9,9,16.0,3048,9,999999999,200,0.1160,0,88,0.140,0.0,1.0 +2001,10,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.8,87,102800,0,0,320,0,0,0,0,0,0,0,210,5.7,8,7,16.0,3962,9,999999999,209,0.1160,0,88,0.140,0.0,1.0 +2000,11,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.4,70,101800,0,0,290,0,0,0,0,0,0,0,350,5.7,0,0,16.0,77777,9,999999999,150,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,4.0,73,101800,0,0,296,0,0,0,0,0,0,0,350,5.7,3,3,16.0,77777,9,999999999,139,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.5,70,101800,0,0,278,0,0,0,0,0,0,0,360,5.7,0,0,16.0,77777,9,999999999,139,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101800,0,0,272,0,0,0,0,0,0,0,350,5.7,0,0,16.0,77777,9,999999999,129,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101800,0,0,272,0,0,0,0,0,0,0,350,7.7,0,0,16.0,77777,9,999999999,129,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101800,0,0,284,0,0,0,0,0,0,0,350,7.7,3,3,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101800,34,752,284,1,61,1,500,3400,300,40,350,6.7,3,3,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.1,63,101900,248,1389,291,139,324,81,14000,22900,9900,1540,350,6.7,3,3,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.1,58,101900,463,1389,283,282,516,109,29600,47200,13800,2060,350,7.7,0,0,16.0,77777,9,999999999,110,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,1.1,52,101800,632,1389,303,436,667,131,44900,64200,15600,2590,340,8.8,3,3,16.0,77777,9,999999999,110,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.6,46,101800,743,1389,307,480,551,184,50700,55700,20800,4030,350,7.7,3,3,16.0,77777,9,999999999,100,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,0.6,43,101700,787,1389,312,484,481,210,50800,48900,23000,4800,350,9.3,3,3,16.0,77777,9,999999999,100,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.0,40,101600,762,1389,313,493,591,168,52800,60100,19800,3690,330,10.8,3,3,16.0,77777,9,999999999,89,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,1.1,40,101600,670,1389,320,414,557,145,44300,55600,17400,2980,330,10.3,3,3,16.0,77777,9,999999999,89,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,101500,517,1389,303,290,449,123,30500,42300,14700,2370,350,8.8,0,0,16.0,77777,9,999999999,100,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,-0.6,38,101600,313,1389,300,151,333,76,15700,26400,9800,1400,340,8.2,0,0,16.0,77777,9,999999999,100,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,-0.6,39,101600,81,1146,298,23,129,15,2600,6500,2100,280,360,8.8,0,0,16.0,77777,9,999999999,100,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,0.0,44,101600,0,0,294,0,0,0,0,0,0,0,360,5.2,0,0,16.0,77777,9,999999999,110,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,0.6,48,101700,0,0,302,0,0,0,0,0,0,0,360,7.7,2,2,16.0,77777,9,999999999,110,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.0,48,101700,0,0,289,0,0,0,0,0,0,0,350,4.6,0,0,16.0,77777,9,999999999,110,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,101700,0,0,287,0,0,0,0,0,0,0,350,6.7,0,0,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,101700,0,0,284,0,0,0,0,0,0,0,350,6.2,0,0,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,101700,0,0,284,0,0,0,0,0,0,0,350,7.2,0,0,16.0,77777,9,999999999,120,0.1150,0,88,0.150,0.0,1.0 +2000,11,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.1,47,101700,0,0,283,0,0,0,0,0,0,0,360,9.3,0,0,16.0,77777,9,999999999,129,0.1150,0,88,0.150,0.0,1.0 +2000,11,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,101700,0,0,282,0,0,0,0,0,0,0,360,8.2,0,0,16.0,77777,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,101800,0,0,279,0,0,0,0,0,0,0,360,5.7,0,0,16.0,77777,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.0,58,101800,0,0,278,0,0,0,0,0,0,0,350,5.7,0,0,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.0,60,101800,0,0,276,0,0,0,0,0,0,0,350,5.2,0,0,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,101800,0,0,274,0,0,0,0,0,0,0,340,3.6,0,0,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101800,0,0,273,0,0,0,0,0,0,0,330,3.6,0,0,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,101900,32,730,275,1,66,0,0,0,0,0,350,4.6,0,0,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,101900,243,1390,284,140,375,74,14100,26200,9500,1390,350,5.2,0,0,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-0.6,44,101900,458,1390,291,290,560,104,29400,49900,12900,1860,360,8.8,0,0,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-1.1,39,101900,626,1390,295,423,674,118,43900,65100,14400,2370,10,8.8,0,0,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,101800,737,1390,303,518,744,121,54400,74000,15000,2660,350,7.7,0,0,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,0.0,36,101800,781,1390,308,550,763,120,58300,76600,15100,2760,10,7.2,0,0,16.0,77777,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,0.0,34,101700,756,1390,310,529,752,118,55900,75200,14800,2650,340,6.2,0,0,16.0,77777,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,0.6,35,101700,664,1390,313,454,722,107,47600,70900,13600,2250,340,6.7,0,0,16.0,77777,9,999999999,100,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,0.6,34,101700,511,1390,322,322,536,124,33700,50400,15100,2390,350,7.2,1,1,16.0,77777,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,-0.6,32,101700,308,1390,318,122,144,90,13200,11700,10600,1950,350,7.2,2,1,16.0,7620,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,0.0,37,101700,77,1123,305,13,20,12,1500,1000,1500,250,360,5.2,0,0,16.0,7620,9,999999999,110,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,0.0,38,101800,0,0,309,0,0,0,0,0,0,0,360,7.7,1,1,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,0.0,40,101800,0,0,318,0,0,0,0,0,0,0,10,5.2,5,5,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,0.0,41,101800,0,0,298,0,0,0,0,0,0,0,10,5.7,0,0,16.0,77777,9,999999999,120,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,0.6,43,101800,0,0,299,0,0,0,0,0,0,0,360,5.2,0,0,16.0,77777,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.1,48,101800,0,0,295,0,0,0,0,0,0,0,360,4.1,1,0,16.0,77777,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.1,50,101800,0,0,292,0,0,0,0,0,0,0,20,3.6,0,0,16.0,77777,9,999999999,129,0.1140,0,88,0.150,0.0,1.0 +2000,11,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,1.7,49,101800,0,0,298,0,0,0,0,0,0,0,360,7.2,0,0,16.0,77777,9,999999999,139,0.1140,0,88,0.150,0.0,1.0 +2000,11,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,2.8,57,101800,0,0,294,0,0,0,0,0,0,0,350,4.6,0,0,16.0,77777,9,999999999,139,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,2.8,58,101800,0,0,292,0,0,0,0,0,0,0,360,5.2,0,0,16.0,77777,9,999999999,150,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.9,68,101800,0,0,298,0,0,0,0,0,0,0,360,4.1,2,2,16.0,77777,9,999999999,150,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.9,71,101800,0,0,299,0,0,0,0,0,0,0,350,3.6,4,3,16.0,77777,9,999999999,160,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,101900,0,0,300,0,0,0,0,0,0,0,360,4.6,7,3,16.0,77777,9,999999999,160,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101900,0,0,289,0,0,0,0,0,0,0,350,3.1,1,1,16.0,7620,9,999999999,170,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,101900,29,707,298,0,39,0,0,0,0,0,350,4.1,3,3,16.0,77777,9,999999999,170,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,2.8,57,101900,237,1391,309,114,242,72,11800,16600,9000,1410,360,4.6,5,4,16.0,7620,9,999999999,179,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.3,52,102000,452,1391,312,269,479,113,28100,43400,13900,2150,360,4.1,5,2,16.0,7620,9,999999999,179,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,3.3,51,102000,621,1391,310,391,557,141,41400,54800,16900,2830,10,3.6,1,1,16.0,7620,9,999999999,189,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,3.3,45,101900,731,1391,321,443,412,226,47400,43000,24700,5270,360,3.6,4,2,16.0,7620,9,999999999,189,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,3.9,44,101900,775,1391,323,387,198,276,41900,20500,30400,7190,350,3.1,2,1,16.0,7620,9,999999999,200,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,4.4,43,101800,751,1391,322,440,418,214,45900,42200,23000,4780,330,4.1,0,0,16.0,77777,9,999999999,200,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,3.9,40,101700,659,1391,324,391,444,180,40800,44000,19800,3770,300,2.1,0,0,16.0,77777,9,999999999,200,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,5.6,46,101700,506,1391,323,279,425,124,29200,39800,14700,2390,210,3.1,0,0,16.0,77777,9,999999999,200,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,6.1,55,101600,302,1391,314,155,404,66,16200,31600,9300,1200,210,3.1,0,0,16.0,77777,9,999999999,189,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,6.7,66,101600,73,1101,305,18,144,11,2300,7200,1700,210,220,3.1,0,0,16.0,77777,9,999999999,189,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,6.1,68,101600,0,0,300,0,0,0,0,0,0,0,0,0.0,1,0,16.0,77777,9,999999999,179,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,6.7,64,101700,0,0,332,0,0,0,0,0,0,0,170,2.1,7,7,16.0,4267,9,999999999,179,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,9.4,80,101600,0,0,329,0,0,0,0,0,0,0,180,2.6,6,6,16.0,4267,9,999999999,179,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.8,72,101600,0,0,354,0,0,0,0,0,0,0,220,2.1,10,10,16.0,3048,9,999999999,170,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,101500,0,0,354,0,0,0,0,0,0,0,210,1.5,10,10,16.0,2743,9,999999999,170,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101500,0,0,355,0,0,0,0,0,0,0,210,2.1,10,10,16.0,2134,9,999999999,160,0.1130,0,88,0.150,0.0,1.0 +2000,11,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,101500,0,0,357,0,0,0,0,0,0,0,220,3.6,10,10,16.0,2134,9,999999999,160,0.1130,0,88,0.150,0.0,1.0 +2000,11,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,101500,0,0,354,0,0,0,0,0,0,0,220,1.5,10,10,16.0,2134,9,999999999,160,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.8,77,101400,0,0,332,0,0,0,0,0,0,0,180,1.5,9,8,16.0,2591,9,999999999,170,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101400,0,0,319,0,0,0,0,0,0,0,0,0.0,9,7,16.0,4267,9,999999999,170,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,101400,0,0,307,0,0,0,0,0,0,0,250,2.1,3,2,16.0,7620,9,999999999,179,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,101400,0,0,298,0,0,0,0,0,0,0,290,1.5,0,0,16.0,7620,9,999999999,189,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,101400,0,0,295,0,0,0,0,0,0,0,0,0.0,0,0,16.0,77777,9,999999999,200,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.2,86,101400,27,684,292,0,0,0,0,0,0,0,330,2.6,1,0,16.0,7620,9,999999999,209,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,6.7,69,101400,232,1391,309,115,272,69,11600,18600,8500,1290,360,3.6,1,1,16.0,7620,9,999999999,209,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,6.1,57,101400,447,1391,318,270,404,140,27500,36300,15800,2740,350,1.5,2,1,16.0,7620,9,999999999,220,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,6.7,54,101400,615,1391,334,267,135,207,28900,13500,22900,4970,340,3.1,4,3,16.0,7620,9,999999999,229,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,7.2,52,101300,725,1391,331,449,460,208,46700,46200,22500,4570,300,2.1,3,1,16.0,7620,9,999999999,240,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.3,54,101100,770,1391,343,502,589,175,53600,59900,20300,3880,250,3.1,4,3,16.0,7620,9,999999999,250,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,8.9,56,101100,745,1391,349,505,597,184,53400,60400,20900,4030,230,4.6,7,5,16.0,7620,9,999999999,250,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.7,10.0,65,101000,653,1391,366,340,249,223,36800,25200,25000,5450,230,5.7,10,9,14.4,2438,9,999999999,240,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.2,10.0,63,101000,500,1391,355,171,58,150,18700,5500,16800,4060,240,4.6,9,7,16.0,4267,9,999999999,229,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,5.6,45,100900,297,1391,349,75,11,72,8300,400,8200,2530,290,5.2,9,6,16.0,4267,9,999999999,220,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,17.8,4.4,41,100900,69,1078,347,14,57,11,1700,2400,1500,180,280,4.1,9,6,16.0,4267,9,999999999,209,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,7.2,56,100900,0,0,339,0,0,0,0,0,0,0,250,5.2,7,5,16.0,4267,9,999999999,200,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,6.1,53,101000,0,0,366,0,0,0,0,0,0,0,320,8.8,10,10,16.0,4267,9,999999999,189,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,3.3,49,101000,0,0,320,0,0,0,0,0,0,0,320,8.2,5,3,16.0,4267,9,999999999,179,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,101000,0,0,318,0,0,0,0,0,0,0,320,7.7,6,4,16.0,4267,9,999999999,170,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,101000,0,0,316,0,0,0,0,0,0,0,310,7.7,7,5,16.0,4267,9,999999999,150,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.3,56,101000,0,0,315,0,0,0,0,0,0,0,300,7.2,7,5,16.0,4267,9,999999999,139,0.1120,0,88,0.150,0.0,1.0 +2000,11,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.9,61,101000,0,0,324,0,0,0,0,0,0,0,310,6.7,9,8,16.0,4267,9,999999999,129,0.1120,0,88,0.150,0.0,1.0 +2000,11,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,4.4,65,100900,0,0,306,0,0,0,0,0,0,0,310,8.2,3,3,16.0,3658,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,101000,0,0,290,0,0,0,0,0,0,0,310,6.7,0,0,16.0,7620,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.8,63,100900,0,0,302,0,0,0,0,0,0,0,310,5.7,4,4,16.0,7620,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,101000,0,0,286,0,0,0,0,0,0,0,310,6.2,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.9,74,101000,0,0,284,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101000,0,0,283,0,0,0,0,0,0,0,300,6.7,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,101000,25,638,283,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,101000,227,1392,298,117,245,77,12100,16300,9400,1540,310,7.7,3,3,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,101000,441,1392,303,263,499,105,27600,44900,13300,1980,310,8.8,3,3,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,1.7,52,101000,609,1392,306,385,576,132,41000,56500,16200,2620,330,7.7,3,3,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-0.6,41,101000,720,1392,313,462,478,214,47900,48000,23000,4700,310,12.4,5,5,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-1.1,44,101000,764,1392,332,85,0,85,10500,0,10500,4160,320,10.8,10,10,16.0,1829,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,101000,739,1392,313,141,0,141,16600,0,16600,6330,310,12.4,8,8,16.0,1676,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101000,647,1392,314,85,0,85,10200,0,10200,3920,310,9.3,8,8,16.0,1829,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-1.1,42,101000,495,1392,319,144,23,136,16200,1600,15700,5030,310,10.3,8,8,16.0,2743,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,101000,292,1392,315,97,77,81,10600,6100,9300,1750,330,8.2,8,8,16.0,2743,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,101100,66,1056,315,7,0,7,900,0,900,280,350,7.2,8,8,16.0,1829,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.6,54,101200,0,0,302,0,0,0,0,0,0,0,310,9.8,5,5,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,101200,0,0,290,0,0,0,0,0,0,0,310,9.8,2,2,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.1,63,101200,0,0,296,0,0,0,0,0,0,0,320,8.2,5,5,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,1.1,63,101300,0,0,293,0,0,0,0,0,0,0,320,7.7,4,4,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,101300,0,0,289,0,0,0,0,0,0,0,320,6.7,3,3,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,101300,0,0,289,0,0,0,0,0,0,0,320,6.7,3,3,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,101400,0,0,287,0,0,0,0,0,0,0,330,5.2,3,3,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,101400,0,0,287,0,0,0,0,0,0,0,320,4.6,3,3,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.6,68,101400,0,0,272,0,0,0,0,0,0,0,320,5.2,0,0,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101400,0,0,269,0,0,0,0,0,0,0,290,4.6,0,0,16.0,77777,9,999999999,139,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,101400,0,0,267,0,0,0,0,0,0,0,330,5.2,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-0.6,67,101500,0,0,267,0,0,0,0,0,0,0,320,6.7,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-0.6,67,101500,0,0,267,0,0,0,0,0,0,0,310,5.7,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-0.6,67,101600,23,615,267,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,101500,222,1393,271,118,261,77,12200,17100,9500,1550,340,5.7,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-0.6,55,101600,436,1393,277,264,506,105,27600,45400,13300,1980,360,7.2,0,0,16.0,77777,9,999999999,129,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.0,54,101500,604,1393,282,392,607,128,40300,57800,15100,2470,350,5.7,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,0.6,50,101500,714,1393,290,462,563,172,48900,56600,19700,3670,350,8.2,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.1,48,101400,758,1393,295,538,751,128,56600,74800,15700,2850,350,7.2,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,1.1,45,101400,734,1393,299,517,764,112,54600,76200,14300,2480,340,5.7,0,0,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,1.7,44,101400,642,1393,318,436,669,127,45100,64600,15200,2540,330,4.6,3,3,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,1.7,45,101400,490,1393,315,278,453,118,29100,42100,14300,2260,330,5.2,3,3,16.0,77777,9,999999999,120,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,1.7,45,101400,287,1393,315,143,401,60,14500,30800,8200,1050,310,7.2,3,3,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,2.8,54,101400,63,1010,310,12,92,9,1600,4500,1300,180,20,3.6,3,3,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,101500,0,0,307,0,0,0,0,0,0,0,10,4.1,3,3,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.3,63,101600,0,0,303,0,0,0,0,0,0,0,10,2.6,3,3,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,3.3,68,101700,0,0,286,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,101700,0,0,283,0,0,0,0,0,0,0,340,2.6,0,0,16.0,77777,9,999999999,110,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,101700,0,0,283,0,0,0,0,0,0,0,350,4.6,0,0,16.0,77777,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,101700,0,0,278,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +2000,11,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,2.8,74,101700,0,0,278,0,0,0,0,0,0,0,340,4.1,0,0,16.0,77777,9,999999999,100,0.1110,0,88,0.150,0.0,1.0 +2000,11,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,101700,0,0,279,0,0,0,0,0,0,0,340,5.2,0,0,16.0,77777,9,999999999,100,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,101700,0,0,273,0,0,0,0,0,0,0,350,5.2,0,0,16.0,77777,9,999999999,110,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,101800,0,0,273,0,0,0,0,0,0,0,340,4.1,0,0,16.0,77777,9,999999999,120,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,101700,0,0,271,0,0,0,0,0,0,0,350,4.1,0,0,16.0,77777,9,999999999,129,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101800,0,0,272,0,0,0,0,0,0,0,350,3.6,0,0,16.0,77777,9,999999999,139,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,101800,0,0,270,0,0,0,0,0,0,0,330,3.6,0,0,16.0,77777,9,999999999,150,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101800,21,592,272,0,0,0,0,0,0,0,360,5.2,0,0,16.0,77777,9,999999999,160,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,101900,216,1393,279,100,175,73,10400,11300,8600,1460,320,4.6,0,0,16.0,77777,9,999999999,170,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101800,430,1393,283,250,449,111,26000,40000,13500,2100,360,5.2,0,0,16.0,77777,9,999999999,179,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,3.9,66,101800,598,1393,291,366,491,154,38200,47800,17600,3100,290,3.6,0,0,16.0,77777,9,999999999,189,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,4.4,63,101700,708,1393,301,450,563,162,47800,56600,18900,3430,330,5.2,1,1,16.0,77777,9,999999999,189,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,101600,753,1393,304,423,301,260,44900,31500,27800,6300,320,3.1,2,1,16.0,7620,9,999999999,200,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,101600,728,1393,312,252,54,224,27700,5400,24900,6820,290,4.1,4,2,16.0,7620,9,999999999,209,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,4.4,55,101500,637,1393,326,351,302,212,37000,30700,22900,4780,310,4.6,8,6,16.0,4267,9,999999999,220,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,3.9,55,101600,484,1393,318,203,110,164,21800,10400,18200,3750,320,5.2,5,4,16.0,4267,9,999999999,220,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,4.4,55,101600,282,1393,311,101,77,86,11000,6000,9700,1850,320,5.7,1,1,16.0,7620,9,999999999,220,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,4.4,59,101600,59,987,306,10,47,8,1300,1900,1100,130,350,3.1,1,1,16.0,4267,9,999999999,220,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.0,68,101600,0,0,294,0,0,0,0,0,0,0,340,3.1,0,0,16.0,77777,9,999999999,220,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,5.6,66,101600,0,0,309,0,0,0,0,0,0,0,340,3.6,2,2,16.0,77777,9,999999999,229,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,101700,0,0,292,0,0,0,0,0,0,0,10,4.1,0,0,16.0,77777,9,999999999,229,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.6,77,101700,0,0,290,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,229,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.6,83,101800,0,0,291,0,0,0,0,0,0,0,320,3.6,1,1,16.0,77777,9,999999999,229,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.6,86,101700,0,0,289,0,0,0,0,0,0,0,360,3.6,1,1,16.0,77777,9,999999999,240,0.1100,0,88,0.150,0.0,1.0 +2000,11,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.6,86,101700,0,0,283,0,0,0,0,0,0,0,350,3.6,0,0,16.0,77777,9,999999999,240,0.1100,0,88,0.150,0.0,1.0 +2000,11,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101700,0,0,282,0,0,0,0,0,0,0,350,3.1,1,1,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.0,86,101700,0,0,300,0,0,0,0,0,0,0,340,2.1,7,6,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.0,89,101800,0,0,278,0,0,0,0,0,0,0,320,3.6,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,101700,0,0,276,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.0,93,101800,0,0,276,0,0,0,0,0,0,0,330,4.6,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101700,0,0,277,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101800,19,569,277,0,0,0,0,0,0,0,320,3.1,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,101800,211,1394,284,102,221,68,10500,14100,8400,1340,20,3.6,0,0,16.0,77777,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,101800,425,1394,303,265,520,106,27600,46200,13400,2000,10,2.6,3,2,16.0,7620,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.7,74,101900,593,1394,308,353,417,175,36400,40400,19100,3570,340,1.5,5,2,16.0,7620,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,7.2,69,101800,703,1394,322,362,242,240,39300,24800,26700,6000,300,2.6,8,4,16.0,7620,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,7.2,67,101700,747,1394,314,345,138,270,37200,14200,29600,6910,360,3.1,2,1,16.0,7620,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.2,62,101600,723,1394,313,458,513,191,48000,51600,21200,4140,0,0.0,0,0,16.0,7620,9,999999999,240,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,7.8,60,101500,631,1394,329,385,521,148,40700,51300,17300,3000,310,2.1,3,2,16.0,7620,9,999999999,250,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,9.4,77,101600,479,1394,321,234,279,138,24800,26400,15700,2830,240,4.6,2,2,16.0,7620,9,999999999,259,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101600,277,1394,308,114,197,75,12100,14800,9100,1440,220,4.6,1,0,16.0,7620,9,999999999,270,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,8.9,83,101500,56,964,313,7,17,7,900,600,900,110,210,3.1,3,2,16.0,7620,9,999999999,279,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,101500,0,0,311,0,0,0,0,0,0,0,0,0.0,5,3,16.0,7620,9,999999999,290,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101500,0,0,348,0,0,0,0,0,0,0,190,3.1,10,10,16.0,7620,9,999999999,300,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,101600,0,0,326,0,0,0,0,0,0,0,210,4.6,8,5,16.0,7620,9,999999999,309,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.1,89,101600,0,0,326,0,0,0,0,0,0,0,250,2.6,9,4,16.0,4267,9,999999999,320,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.1,96,101600,0,0,321,0,0,0,0,0,0,0,180,2.6,8,4,16.0,7620,9,999999999,329,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,101500,0,0,344,0,0,0,0,0,0,0,0,0.0,9,9,16.0,3353,9,999999999,340,0.1090,0,88,0.150,0.0,1.0 +2000,11,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101500,0,0,319,0,0,0,0,0,0,0,0,0.0,5,5,16.0,4267,9,999999999,350,0.1090,0,88,0.150,0.0,1.0 +2000,11,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,101500,0,0,321,0,0,0,0,0,0,0,0,0.0,6,6,16.0,4267,9,999999999,359,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101500,0,0,314,0,0,0,0,0,0,0,0,0.0,7,7,16.0,77777,9,999999999,350,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101500,0,0,314,0,0,0,0,0,0,0,0,0.0,8,7,16.0,77777,9,999999999,350,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101500,0,0,325,0,0,0,0,0,0,0,0,0.0,8,8,16.0,77777,9,999999999,340,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.4,96,101500,0,0,317,0,0,0,0,0,0,0,280,1.5,6,6,16.0,77777,9,999999999,340,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,101500,0,0,299,0,0,0,0,0,0,0,0,0.0,1,1,16.0,77777,9,999999999,329,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101400,17,546,301,0,0,0,0,0,0,0,0,0.0,2,1,16.0,77777,9,999999999,329,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,9.4,89,101500,206,1395,314,103,163,79,10500,10200,9000,1630,60,2.6,3,3,16.0,7620,9,999999999,320,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.8,67,101500,419,1395,349,158,82,133,17300,7500,15000,3400,60,3.6,9,9,16.0,2438,9,999999999,320,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,7.8,65,101500,587,1395,352,144,0,144,16500,0,16500,5740,90,3.1,9,9,16.0,2286,9,999999999,309,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,8.3,67,101400,697,1395,352,156,0,156,18100,0,18100,6650,130,2.6,9,9,16.0,2134,9,999999999,300,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,8.3,64,101300,742,1395,365,236,24,223,26800,2100,25700,8870,130,3.6,10,10,16.0,1981,9,999999999,300,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,101200,717,1395,367,329,149,252,35600,15300,27700,6350,120,4.6,10,10,16.0,1829,9,999999999,290,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,101200,626,1395,346,254,83,217,27900,8200,24200,6060,100,4.1,8,8,16.0,1829,9,999999999,300,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,11.7,87,101200,474,1395,364,144,17,138,16100,1200,15700,4950,110,3.6,10,10,16.0,1829,9,999999999,300,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101200,273,1395,361,68,5,67,7600,200,7600,2310,110,5.2,10,10,16.0,1463,9,999999999,309,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.2,93,101200,54,941,361,6,0,6,700,0,700,240,110,4.1,10,10,16.0,1372,9,999999999,309,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,12.8,97,101200,0,0,362,0,0,0,0,0,0,0,110,3.6,10,10,16.0,914,9,999999999,309,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101100,0,0,363,0,0,0,0,0,0,0,90,4.6,10,10,14.4,975,9,999999999,320,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,101000,0,0,363,0,0,0,0,0,0,0,130,4.6,10,10,16.0,853,9,999999999,320,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.2,96,101000,0,0,359,0,0,0,0,0,0,0,120,3.6,10,10,16.0,853,9,999999999,320,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100900,0,0,356,0,0,0,0,0,0,0,120,4.6,10,10,12.8,792,9,999999999,329,0.1080,0,88,0.150,0.0,1.0 +2000,11,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100800,0,0,356,0,0,0,0,0,0,0,130,8.8,10,10,4.8,427,9,999999999,329,0.1080,0,88,0.150,2.0,1.0 +2000,11,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100700,0,0,356,0,0,0,0,0,0,0,120,7.7,10,10,8.0,305,9,999999999,329,0.1080,0,88,0.150,3.0,1.0 +2000,11,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100600,0,0,356,0,0,0,0,0,0,0,120,8.2,10,10,4.8,427,9,999999999,340,0.1080,0,88,0.150,3.0,1.0 +2000,11,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,100400,0,0,360,0,0,0,0,0,0,0,110,8.8,10,10,4.8,213,9,999999999,329,0.1080,0,88,0.150,6.0,1.0 +2000,11,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,100300,0,0,360,0,0,0,0,0,0,0,110,11.3,10,10,4.8,152,9,999999999,309,0.1080,0,88,0.150,6.0,1.0 +2000,11,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,100200,0,0,360,0,0,0,0,0,0,0,90,7.7,10,10,3.2,152,9,999999999,300,0.1080,0,88,0.150,16.0,1.0 +2000,11,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,100100,0,0,363,0,0,0,0,0,0,0,100,9.3,10,10,11.2,213,9,999999999,290,0.1080,0,88,0.150,20.0,1.0 +2000,11,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,14.4,100,100000,0,0,370,0,0,0,0,0,0,0,110,5.7,10,10,14.4,152,9,999999999,279,0.1080,0,88,0.150,1.0,1.0 +2000,11,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,15.6,100,99700,15,523,377,0,0,0,0,0,0,0,140,8.8,10,10,6.4,152,9,999999999,259,0.1080,0,88,0.150,1.0,1.0 +2000,11,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,16.1,100,99800,201,1395,380,42,0,42,4700,0,4700,1470,160,8.2,10,10,6.4,152,9,999999999,250,0.1080,0,88,0.150,2.0,1.0 +2000,11,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,15.0,100,99800,414,1395,355,101,0,101,11400,0,11400,3730,230,6.2,8,8,16.0,1829,9,999999999,240,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,16.1,15.6,97,99700,582,1395,362,387,460,194,40700,45900,21500,4270,210,5.7,8,8,16.0,3353,9,999999999,229,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,13.9,90,99800,692,1395,375,338,218,229,36600,22300,25500,5690,230,9.3,10,10,16.0,579,9,999999999,220,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,12.2,83,99800,736,1395,370,97,0,97,11800,0,11800,4610,250,7.7,10,10,16.0,518,9,999999999,200,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.6,11.1,75,99800,712,1395,354,194,12,188,22200,1000,21700,7710,270,7.7,8,8,16.0,914,9,999999999,189,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,15.0,10.0,72,99900,621,1395,367,198,18,190,22300,1500,21600,7140,260,8.8,10,10,16.0,1402,9,999999999,189,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,14.4,9.4,72,99900,470,1395,364,117,6,115,13300,400,13100,4360,250,9.3,10,10,16.0,1128,9,999999999,200,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,8.9,72,99900,268,1395,351,123,196,85,12800,14400,10000,1690,260,7.7,9,9,16.0,1128,9,999999999,200,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.9,7.8,67,100000,51,919,359,5,3,5,600,200,600,130,270,7.7,10,10,16.0,1128,9,999999999,209,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.3,72,100100,0,0,357,0,0,0,0,0,0,0,270,7.7,10,10,16.0,1067,9,999999999,209,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.3,74,100100,0,0,337,0,0,0,0,0,0,0,270,8.2,8,8,16.0,1463,9,999999999,209,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,100100,0,0,355,0,0,0,0,0,0,0,280,6.7,10,10,16.0,1158,9,999999999,220,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,9.4,83,100100,0,0,353,0,0,0,0,0,0,0,270,7.7,10,10,16.0,975,9,999999999,220,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,100200,0,0,353,0,0,0,0,0,0,0,270,6.2,10,10,16.0,853,9,999999999,220,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,100200,0,0,353,0,0,0,0,0,0,0,290,6.7,10,10,16.0,762,9,999999999,229,0.1080,0,88,0.150,0.0,1.0 +2000,11,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.0,86,100200,0,0,353,0,0,0,0,0,0,0,310,7.2,10,10,16.0,701,9,999999999,229,0.1080,0,88,0.150,0.0,1.0 +2000,11,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,100200,0,0,352,0,0,0,0,0,0,0,310,8.2,10,10,16.0,701,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,100300,0,0,348,0,0,0,0,0,0,0,320,9.3,10,10,16.0,671,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,100400,0,0,345,0,0,0,0,0,0,0,310,7.2,10,10,16.0,610,9,999999999,229,0.1070,0,88,0.150,1.0,1.0 +2000,11,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,100400,0,0,345,0,0,0,0,0,0,0,310,9.8,10,10,16.0,518,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,100500,0,0,343,0,0,0,0,0,0,0,310,9.3,10,10,16.0,701,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,100500,0,0,343,0,0,0,0,0,0,0,320,6.7,10,10,16.0,762,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.3,86,100600,13,477,343,0,0,0,0,0,0,0,330,8.2,10,10,16.0,640,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,8.9,89,100800,196,1396,344,75,68,65,8000,4500,7400,1370,330,5.7,10,10,16.0,579,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,100800,409,1396,345,217,318,124,22900,28400,14500,2520,330,8.2,10,10,4.8,518,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100900,576,1396,346,276,178,202,29700,17600,22400,4770,330,8.2,10,10,4.8,549,9,999999999,240,0.1070,0,88,0.150,1.0,1.0 +2000,11,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,100900,686,1396,349,307,109,253,33600,10900,28200,7180,330,7.2,10,10,4.8,671,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,11.1,93,101000,731,1396,355,345,126,279,37800,12700,31100,8050,340,7.7,10,10,16.0,671,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,11.7,93,101000,707,1396,358,334,131,268,36700,13200,30000,7640,340,9.3,10,10,16.0,3048,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,10.6,84,101000,616,1396,342,282,124,227,30900,12300,25400,6190,350,8.8,9,8,16.0,3048,9,999999999,240,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,8.9,75,101000,465,1396,357,202,122,161,21700,11400,17900,3650,360,12.4,10,10,16.0,1219,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,8.9,77,101100,264,1396,345,95,76,80,10200,5800,9100,1720,350,7.7,9,9,16.0,1067,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,8.3,77,101300,48,896,351,5,7,5,600,300,600,100,350,8.8,10,10,16.0,1829,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,7.8,74,101300,0,0,351,0,0,0,0,0,0,0,350,7.7,10,10,16.0,2134,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.2,74,101300,0,0,348,0,0,0,0,0,0,0,350,7.7,10,10,16.0,2134,9,999999999,229,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,7.2,74,101400,0,0,331,0,0,0,0,0,0,0,360,8.2,8,8,16.0,1829,9,999999999,220,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,6.7,74,101400,0,0,328,0,0,0,0,0,0,0,350,6.7,8,8,16.0,1981,9,999999999,220,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,101400,0,0,313,0,0,0,0,0,0,0,350,7.2,5,5,16.0,3658,9,999999999,220,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,101500,0,0,321,0,0,0,0,0,0,0,360,10.3,8,8,16.0,2134,9,999999999,220,0.1070,0,88,0.150,0.0,1.0 +2000,11,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.0,74,101500,0,0,318,0,0,0,0,0,0,0,360,10.8,8,8,16.0,2286,9,999999999,220,0.1070,0,88,0.150,0.0,1.0 +2000,11,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101500,0,0,316,0,0,0,0,0,0,0,350,7.2,8,8,16.0,2286,9,999999999,209,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.0,80,101500,0,0,313,0,0,0,0,0,0,0,360,8.8,8,8,16.0,1676,9,999999999,209,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.0,80,101500,0,0,313,0,0,0,0,0,0,0,350,9.3,8,8,16.0,1158,9,999999999,209,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.0,80,101500,0,0,329,0,0,0,0,0,0,0,350,6.2,10,10,16.0,1158,9,999999999,200,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101500,0,0,332,0,0,0,0,0,0,0,360,6.2,10,10,16.0,1097,9,999999999,200,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101500,0,0,332,0,0,0,0,0,0,0,360,5.7,10,10,16.0,1158,9,999999999,189,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101600,12,454,332,0,0,0,0,0,0,0,340,5.2,10,10,16.0,1158,9,999999999,189,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,101700,191,1397,315,55,0,55,6000,0,6000,1720,350,6.2,8,8,16.0,1219,9,999999999,179,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101700,403,1397,316,131,25,123,14400,1600,14000,4180,360,7.2,8,8,16.0,1219,9,999999999,179,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,101700,571,1397,331,112,0,112,13000,0,13000,4690,350,6.7,10,10,16.0,1219,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,4.4,71,101700,681,1397,333,163,0,163,18800,0,18800,6790,360,7.2,10,10,16.0,1158,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,101600,726,1397,336,157,0,157,18300,0,18300,6820,360,8.2,10,10,16.0,1219,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,5.0,68,101500,702,1397,323,223,24,211,25300,2000,24200,8260,340,6.2,8,8,16.0,1219,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.0,66,101500,611,1397,326,226,59,200,24800,5800,22200,5610,350,4.1,8,8,16.0,1219,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.0,66,101500,460,1397,326,186,99,153,20300,9300,17300,3950,340,4.1,8,8,16.0,1158,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,5.0,66,101500,260,1397,326,90,65,78,9900,5200,8900,1870,330,5.2,8,8,16.0,1158,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,4.4,68,101600,46,896,304,3,0,3,400,0,400,120,360,4.6,3,3,16.0,77777,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,101600,0,0,299,0,0,0,0,0,0,0,360,4.1,3,3,16.0,77777,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,4.4,76,101700,0,0,297,0,0,0,0,0,0,0,10,4.1,3,3,16.0,77777,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,101700,0,0,279,0,0,0,0,0,0,0,10,5.2,0,0,16.0,77777,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,101700,0,0,277,0,0,0,0,0,0,0,360,4.1,0,0,16.0,77777,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101700,0,0,274,0,0,0,0,0,0,0,360,3.6,0,0,16.0,77777,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101700,0,0,289,0,0,0,0,0,0,0,360,5.2,5,4,16.0,77777,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101700,0,0,286,0,0,0,0,0,0,0,360,4.6,7,3,16.0,7620,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101700,0,0,282,0,0,0,0,0,0,0,10,2.6,4,2,16.0,7620,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101800,0,0,279,0,0,0,0,0,0,0,340,2.6,2,2,16.0,3962,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101800,0,0,299,0,0,0,0,0,0,0,360,4.1,8,8,16.0,1006,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101700,0,0,314,0,0,0,0,0,0,0,10,3.1,10,10,16.0,884,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101800,0,0,315,0,0,0,0,0,0,0,360,2.6,10,10,16.0,884,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.3,85,101800,0,0,315,0,0,0,0,0,0,0,20,3.1,10,10,16.0,792,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,101800,10,431,317,0,0,0,0,0,0,0,10,3.6,10,10,16.0,792,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,101900,186,1397,317,22,0,22,2600,0,2600,850,30,2.6,10,10,16.0,792,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.9,82,101900,398,1397,320,87,0,87,9900,0,9900,3290,30,3.6,10,10,16.0,732,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.9,80,101900,566,1397,322,131,0,131,15000,0,15000,5250,40,3.1,10,10,16.0,732,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,4.4,76,101900,676,1397,328,131,0,131,15300,0,15300,5720,80,3.1,10,10,16.0,792,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,101800,720,1397,332,115,0,115,13700,0,13700,5280,0,0.0,10,10,16.0,914,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.6,77,101800,697,1397,335,76,0,76,9300,0,9300,3640,0,0.0,10,10,16.0,975,9,999999999,170,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,101700,607,1397,322,141,0,141,16200,0,16200,5740,150,2.6,9,8,16.0,1036,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,101700,456,1397,330,64,0,64,7600,0,7600,2720,120,3.6,9,9,16.0,1036,9,999999999,160,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.2,83,101700,256,1397,339,90,98,72,9800,7400,8400,1540,150,3.1,10,10,16.0,975,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,101600,44,873,340,4,9,4,500,400,500,80,140,3.6,10,10,16.0,975,9,999999999,150,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.8,90,101700,0,0,312,0,0,0,0,0,0,0,140,4.1,9,6,16.0,4267,9,999999999,139,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.3,89,101600,0,0,341,0,0,0,0,0,0,0,140,4.6,10,10,16.0,884,9,999999999,139,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,101600,0,0,341,0,0,0,0,0,0,0,150,4.1,10,10,16.0,610,9,999999999,129,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,9.4,92,101600,0,0,345,0,0,0,0,0,0,0,150,4.6,10,10,16.0,640,9,999999999,129,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101600,0,0,345,0,0,0,0,0,0,0,150,3.1,10,10,16.0,549,9,999999999,120,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101600,0,0,348,0,0,0,0,0,0,0,160,2.6,10,10,16.0,457,9,999999999,120,0.1060,0,88,0.150,0.0,1.0 +2000,11,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101500,0,0,348,0,0,0,0,0,0,0,180,3.6,10,10,16.0,1219,9,999999999,110,0.1060,0,88,0.150,0.0,1.0 +2000,11,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101500,0,0,326,0,0,0,0,0,0,0,160,4.1,8,7,16.0,3962,9,999999999,110,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101500,0,0,348,0,0,0,0,0,0,0,190,3.6,10,10,16.0,1097,9,999999999,120,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.0,93,101400,0,0,348,0,0,0,0,0,0,0,160,1.5,10,10,16.0,1097,9,999999999,129,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,10.6,97,101300,0,0,349,0,0,0,0,0,0,0,170,2.6,10,10,16.0,975,9,999999999,139,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,101300,0,0,345,0,0,0,0,0,0,0,130,2.6,10,10,16.0,1524,9,999999999,160,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101300,0,0,343,0,0,0,0,0,0,0,150,2.1,10,10,16.0,1676,9,999999999,170,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101200,9,408,333,0,0,0,0,0,0,0,90,3.6,9,9,11.2,3353,9,999999999,179,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,10.6,93,101200,181,1398,342,91,93,79,9600,5800,8800,1670,100,3.1,10,9,14.4,3353,9,999999999,200,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,10.6,90,101300,393,1398,354,51,0,51,6000,0,6000,2130,140,4.6,10,10,16.0,762,9,999999999,209,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,101100,560,1398,353,92,0,92,10800,0,10800,3970,120,3.1,10,10,11.2,792,9,999999999,220,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,101000,670,1398,353,113,0,113,13400,0,13400,5050,100,3.1,10,10,9.6,762,9,999999999,229,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100900,715,1398,343,212,18,203,24200,1500,23400,8140,120,3.6,9,9,16.0,823,9,999999999,250,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100800,692,1398,356,123,0,123,14500,0,14500,5490,130,2.1,10,10,8.0,518,9,999999999,259,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100600,602,1398,356,135,0,135,15500,0,15500,5540,80,2.1,10,10,8.0,1128,9,999999999,240,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100600,452,1398,353,79,0,79,9200,0,9200,3220,130,3.1,10,10,6.4,396,9,999999999,229,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.0,12.0,100,100400,252,1398,355,53,0,53,6000,0,6000,1890,110,3.1,10,10,8.0,210,9,999999999,209,0.1050,0,88,0.150,1.0,1.0 +2000,11,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100500,41,850,353,2,0,2,300,0,300,80,160,4.6,10,10,6.4,457,9,999999999,200,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,8.9,93,100500,0,0,341,0,0,0,0,0,0,0,310,7.2,10,10,16.0,549,9,999999999,179,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.1,83,100600,0,0,333,0,0,0,0,0,0,0,300,8.2,10,10,14.4,1250,9,999999999,160,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.0,77,100600,0,0,302,0,0,0,0,0,0,0,270,6.2,4,4,16.0,77777,9,999999999,150,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,3.3,73,100600,0,0,309,0,0,0,0,0,0,0,270,8.2,8,8,16.0,2896,9,999999999,129,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.1,67,100600,0,0,287,0,0,0,0,0,0,0,280,8.8,3,3,16.0,77777,9,999999999,120,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,100600,0,0,280,0,0,0,0,0,0,0,300,8.8,3,3,16.0,77777,9,999999999,100,0.1050,0,88,0.150,0.0,1.0 +2000,11,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,100600,0,0,280,0,0,0,0,0,0,0,310,8.8,4,4,16.0,77777,9,999999999,89,0.1050,0,88,0.150,0.0,1.0 +2000,11,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,100700,0,0,277,0,0,0,0,0,0,0,290,8.2,4,4,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,100700,0,0,262,0,0,0,0,0,0,0,300,6.7,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,100800,0,0,261,0,0,0,0,0,0,0,290,5.2,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,100900,0,0,259,0,0,0,0,0,0,0,280,5.7,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,100900,0,0,256,0,0,0,0,0,0,0,300,7.2,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,100900,0,0,257,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,101000,8,385,272,0,0,0,0,0,0,0,270,5.7,5,5,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101000,176,1399,273,81,140,64,8400,7900,7400,1290,270,6.2,3,3,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-0.6,67,101000,388,1399,282,176,134,138,18800,11800,15500,3060,280,7.2,5,5,16.0,7620,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,101000,555,1399,297,277,234,184,30000,22900,20800,4310,280,8.2,8,8,16.0,2438,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.0,60,101000,665,1399,292,439,558,172,45900,55400,19500,3580,280,7.2,5,5,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,100900,710,1399,299,496,595,193,51800,59600,21400,4160,280,9.3,5,5,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.7,50,100900,687,1399,304,240,54,214,26400,5400,23800,6330,270,9.3,8,8,16.0,1524,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101000,597,1399,306,181,18,173,20400,1400,19800,6560,290,6.7,8,8,16.0,1676,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101000,447,1399,306,95,0,95,10900,0,10900,3700,290,8.2,8,8,16.0,1676,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.8,46,101100,248,1399,302,31,0,31,3700,0,3700,1230,270,9.3,8,8,16.0,1981,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.7,52,101200,39,828,301,1,0,1,100,0,100,40,290,7.2,8,8,16.0,1829,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,101300,0,0,281,0,0,0,0,0,0,0,280,7.7,3,3,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101300,0,0,279,0,0,0,0,0,0,0,280,9.3,2,2,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,101400,0,0,269,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,101500,0,0,269,0,0,0,0,0,0,0,270,6.2,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,101500,0,0,267,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.6,76,101600,0,0,265,0,0,0,0,0,0,0,250,8.2,0,0,16.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +2000,11,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.6,76,101600,0,0,265,0,0,0,0,0,0,0,270,5.7,0,0,16.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,101600,0,0,264,0,0,0,0,0,0,0,250,6.7,0,0,16.0,77777,9,999999999,60,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101600,0,0,263,0,0,0,0,0,0,0,280,4.6,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101600,0,0,263,0,0,0,0,0,0,0,270,5.2,0,0,16.0,77777,9,999999999,69,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.0,79,101600,0,0,261,0,0,0,0,0,0,0,280,4.1,0,0,16.0,77777,9,999999999,80,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101700,0,0,276,0,0,0,0,0,0,0,270,5.2,3,3,16.0,77777,9,999999999,89,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101700,0,0,276,0,0,0,0,0,0,0,260,5.7,4,4,16.0,77777,9,999999999,100,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101700,7,338,274,0,0,0,0,0,0,0,250,6.2,3,3,16.0,77777,9,999999999,110,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,101700,171,1399,276,60,32,56,6500,2300,6300,1260,270,5.2,3,3,16.0,77777,9,999999999,120,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101700,383,1399,278,184,218,124,19200,18900,14000,2550,270,7.2,5,2,16.0,7620,9,999999999,120,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.0,65,101700,550,1399,283,323,375,175,34100,36800,19500,3770,260,6.7,7,3,16.0,7620,9,999999999,129,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101600,660,1399,286,226,115,171,24800,11700,19300,4180,260,5.7,7,5,16.0,7620,9,999999999,139,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,101500,705,1399,288,448,463,214,46300,46300,22900,4660,250,6.2,8,4,16.0,7620,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,101400,682,1399,288,311,149,238,33600,15200,26200,5890,240,6.2,2,2,16.0,7620,9,999999999,160,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,101400,593,1399,300,310,278,192,32800,27800,20900,4220,230,6.2,6,5,16.0,7620,9,999999999,160,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,101300,443,1399,303,132,35,121,14500,3200,13500,3240,230,5.2,9,7,16.0,4267,9,999999999,160,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,101200,244,1399,300,44,0,44,5000,0,5000,1630,210,5.7,9,6,16.0,4267,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101200,38,805,315,1,0,1,100,0,100,40,220,6.2,10,9,16.0,3048,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101200,0,0,324,0,0,0,0,0,0,0,220,7.7,10,10,16.0,3048,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.7,63,101100,0,0,325,0,0,0,0,0,0,0,210,6.2,10,10,16.0,2286,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,3.9,76,101100,0,0,325,0,0,0,0,0,0,0,220,5.7,10,10,16.0,2134,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,5.0,80,101100,0,0,329,0,0,0,0,0,0,0,210,6.7,10,10,16.0,2286,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,5.6,80,101000,0,0,332,0,0,0,0,0,0,0,200,8.8,10,10,16.0,2134,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,6.1,80,100900,0,0,326,0,0,0,0,0,0,0,210,8.8,10,9,16.0,1981,9,999999999,150,0.1040,0,88,0.150,0.0,1.0 +2000,11,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,100800,0,0,334,0,0,0,0,0,0,0,220,7.2,10,10,16.0,1981,9,999999999,139,0.1040,0,88,0.150,0.0,1.0 +2000,11,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.2,93,100700,0,0,331,0,0,0,0,0,0,0,220,4.6,10,10,16.0,1829,9,999999999,139,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,100700,0,0,330,0,0,0,0,0,0,0,220,5.2,10,10,16.0,2134,9,999999999,139,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,100700,0,0,331,0,0,0,0,0,0,0,220,5.7,10,10,16.0,2134,9,999999999,139,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,100600,0,0,331,0,0,0,0,0,0,0,230,5.7,10,10,16.0,3048,9,999999999,139,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,100600,0,0,328,0,0,0,0,0,0,0,240,6.2,10,10,16.0,3353,9,999999999,129,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.7,93,100600,0,0,294,0,0,0,0,0,0,0,240,5.2,2,2,16.0,3658,9,999999999,129,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.7,97,100600,6,315,288,0,0,0,0,0,0,0,240,5.2,1,1,16.0,3658,9,999999999,129,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,100600,166,1400,287,49,0,49,5400,0,5400,1510,250,5.7,0,0,16.0,77777,9,999999999,120,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,5.6,74,100600,377,1400,305,199,295,119,20800,25500,13900,2430,250,6.7,3,3,16.0,7620,9,999999999,120,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,3.9,59,100600,545,1400,311,304,406,145,31500,38600,16400,2860,260,7.2,3,3,16.0,77777,9,999999999,120,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,2.8,54,100500,655,1400,312,401,516,159,42300,51100,18300,3270,270,7.7,4,4,16.0,77777,9,999999999,120,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,2.2,52,100400,700,1400,309,448,559,167,47400,56000,19200,3520,270,7.2,3,3,16.0,77777,9,999999999,110,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.7,50,100400,678,1400,308,399,436,187,41500,43400,20400,3960,270,9.3,3,3,16.0,77777,9,999999999,110,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,1.1,48,100400,589,1400,312,310,337,168,33100,33700,18800,3580,260,9.8,5,5,16.0,77777,9,999999999,110,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,-0.6,44,100500,440,1400,319,211,225,140,22100,20600,15600,2910,290,8.8,8,8,16.0,1829,9,999999999,110,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,100600,241,1400,304,40,0,40,4600,0,4600,1500,300,7.7,5,5,16.0,77777,9,999999999,100,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.0,54,100700,36,782,310,1,0,1,100,0,100,40,300,9.3,8,8,16.0,1981,9,999999999,100,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.0,58,100900,0,0,295,0,0,0,0,0,0,0,300,9.8,5,5,16.0,77777,9,999999999,100,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,101000,0,0,295,0,0,0,0,0,0,0,290,7.2,7,5,16.0,77777,9,999999999,89,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,101100,0,0,284,0,0,0,0,0,0,0,290,10.3,3,3,16.0,77777,9,999999999,89,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101200,0,0,285,0,0,0,0,0,0,0,300,9.3,3,3,16.0,77777,9,999999999,89,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101300,0,0,281,0,0,0,0,0,0,0,290,7.2,3,3,16.0,77777,9,999999999,89,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,101400,0,0,279,0,0,0,0,0,0,0,300,8.8,3,3,16.0,77777,9,999999999,80,0.1030,0,88,0.150,0.0,1.0 +2000,11,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,101400,0,0,264,0,0,0,0,0,0,0,300,7.7,0,0,16.0,77777,9,999999999,80,0.1030,0,88,0.150,0.0,1.0 +2000,11,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,101400,0,0,262,0,0,0,0,0,0,0,300,6.7,0,0,16.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101500,0,0,261,0,0,0,0,0,0,0,290,5.7,0,0,16.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101600,0,0,260,0,0,0,0,0,0,0,280,4.1,0,0,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101700,0,0,271,0,0,0,0,0,0,0,280,5.7,3,3,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101700,0,0,258,0,0,0,0,0,0,0,280,4.6,0,0,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.0,82,101800,0,0,259,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,101900,5,292,271,0,0,0,0,0,0,0,260,5.7,3,3,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,102000,161,1400,272,63,24,60,6800,1700,6600,1290,280,6.2,3,3,16.0,77777,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.6,76,102000,372,1400,277,229,527,89,23200,43900,11400,1530,270,6.2,3,3,16.0,77777,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,102000,540,1400,281,364,671,104,37500,62800,13200,1990,280,6.7,3,3,16.0,77777,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,102000,650,1400,286,446,728,106,46700,71100,13600,2200,280,6.7,3,3,16.0,77777,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.0,60,101900,696,1400,290,485,752,110,51100,74300,14000,2350,290,6.2,4,4,16.0,77777,9,999999999,50,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,101800,673,1400,302,463,579,184,48300,57500,20500,3880,310,5.2,8,8,16.0,1250,9,999999999,50,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.7,52,101800,585,1400,301,169,24,159,19100,1800,18400,6120,260,6.2,8,8,16.0,1433,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.1,57,101800,436,1400,315,84,0,84,9700,0,9700,3330,240,7.7,10,10,16.0,1524,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.7,56,101800,237,1400,303,53,0,53,6000,0,6000,1850,250,7.7,9,9,16.0,1676,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101800,34,782,308,0,0,0,0,0,0,0,260,8.2,10,10,16.0,1829,9,999999999,60,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101800,0,0,309,0,0,0,0,0,0,0,250,6.7,10,10,16.0,1829,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101700,0,0,280,0,0,0,0,0,0,0,280,4.6,5,5,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101800,0,0,282,0,0,0,0,0,0,0,260,4.6,8,6,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101800,0,0,288,0,0,0,0,0,0,0,270,4.6,9,7,16.0,77777,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.1,64,101800,0,0,307,0,0,0,0,0,0,0,250,5.2,10,10,16.0,1829,9,999999999,69,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101800,0,0,290,0,0,0,0,0,0,0,250,4.6,9,8,16.0,1829,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,101700,0,0,279,0,0,0,0,0,0,0,250,4.1,8,5,16.0,4267,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101800,0,0,280,0,0,0,0,0,0,0,260,4.6,9,6,16.0,4267,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101700,0,0,269,0,0,0,0,0,0,0,260,4.6,4,3,16.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,283,0,0,0,0,0,0,0,260,6.2,8,8,16.0,1829,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,101800,0,0,266,0,0,0,0,0,0,0,280,5.2,4,4,16.0,3658,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.9,64,101900,0,0,264,0,0,0,0,0,0,0,270,4.6,6,4,14.4,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,101900,0,0,250,0,0,0,0,0,0,0,290,5.7,0,0,16.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,101900,4,269,264,0,0,0,0,0,0,0,260,4.6,4,4,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,102100,156,1401,264,13,0,13,1600,0,1600,520,270,5.2,3,3,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,102000,367,1401,267,171,206,117,17900,17600,13200,2380,290,5.2,7,4,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,102100,535,1401,266,324,431,159,33300,40700,17600,3170,290,6.2,4,2,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,102000,645,1401,273,326,218,225,35200,22000,25000,5470,300,5.2,6,4,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,102000,691,1401,273,345,168,262,37100,17100,28700,6510,290,3.6,7,3,16.0,7620,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,101900,669,1401,277,258,90,215,28300,8900,24000,6250,280,1.5,8,5,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101900,581,1401,274,96,0,96,11300,0,11300,4160,260,4.1,8,3,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,101800,432,1401,277,84,0,84,9700,0,9700,3320,220,4.6,9,4,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101800,234,1401,275,79,107,61,8600,7700,7300,1300,230,4.1,9,4,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101900,33,759,275,0,0,0,0,0,0,0,230,4.1,9,4,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101800,0,0,271,0,0,0,0,0,0,0,240,4.1,4,2,16.0,4572,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,101800,0,0,272,0,0,0,0,0,0,0,240,3.1,7,5,16.0,77777,9,999999999,80,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,101900,0,0,254,0,0,0,0,0,0,0,240,3.6,0,0,16.0,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101800,0,0,255,0,0,0,0,0,0,0,250,3.6,0,0,16.0,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101800,0,0,255,0,0,0,0,0,0,0,250,4.1,0,0,16.0,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,101800,0,0,253,0,0,0,0,0,0,0,260,3.6,0,0,16.0,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +2000,11,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.1,84,101700,0,0,251,0,0,0,0,0,0,0,270,3.1,0,0,14.4,77777,9,999999999,89,0.1020,0,88,0.150,0.0,1.0 +2000,11,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.7,83,101600,0,0,249,0,0,0,0,0,0,0,270,2.6,0,0,16.0,77777,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.2,77,101600,0,0,250,0,0,0,0,0,0,0,270,5.2,0,0,16.0,77777,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.2,80,101600,0,0,249,0,0,0,0,0,0,0,270,3.6,0,0,16.0,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.2,80,101600,0,0,249,0,0,0,0,0,0,0,270,4.1,0,0,16.0,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.8,76,101600,0,0,248,0,0,0,0,0,0,0,270,3.1,0,0,16.0,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.8,79,101600,0,0,257,0,0,0,0,0,0,0,270,3.6,3,3,16.0,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.8,79,101500,3,245,257,0,0,0,0,0,0,0,270,3.1,3,3,16.0,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.1,84,101600,151,1402,251,66,116,54,6800,5900,6200,1080,240,2.6,0,0,11.2,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,101600,362,1402,268,216,490,89,22500,41000,11800,1650,240,3.1,3,3,12.8,77777,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101600,530,1402,262,351,666,98,36300,62200,12700,1880,220,5.2,0,0,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-0.6,70,101500,641,1402,264,421,595,148,44600,58700,17600,3000,210,4.1,0,0,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101300,687,1402,270,479,692,139,49500,67400,16400,2840,200,5.7,0,0,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101300,665,1402,272,434,507,192,44900,50200,21000,4050,200,6.2,0,0,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,0.6,68,101200,577,1402,284,214,83,180,23500,8100,20200,5010,220,5.2,3,3,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,101100,429,1402,288,147,46,133,16100,4200,14800,3430,220,5.7,4,4,16.0,77777,9,999999999,110,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,101100,231,1402,302,65,27,61,7200,2100,6800,1490,190,4.6,8,8,16.0,3048,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,101100,31,736,309,0,0,0,0,0,0,0,210,4.1,9,9,16.0,2743,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.8,79,101100,0,0,301,0,0,0,0,0,0,0,210,7.2,8,8,16.0,2134,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,101100,0,0,300,0,0,0,0,0,0,0,220,9.8,8,8,16.0,2286,9,999999999,100,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,101200,0,0,298,0,0,0,0,0,0,0,280,8.8,10,10,9.6,549,9,999999999,100,0.1010,0,88,0.150,1.0,1.0 +2000,11,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101200,0,0,303,0,0,0,0,0,0,0,270,6.2,10,10,16.0,2743,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,101200,0,0,273,0,0,0,0,0,0,0,270,6.7,4,4,16.0,77777,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101300,0,0,268,0,0,0,0,0,0,0,270,7.7,3,3,16.0,77777,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,101300,0,0,263,0,0,0,0,0,0,0,280,7.2,3,3,16.0,77777,9,999999999,89,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101300,0,0,261,0,0,0,0,0,0,0,270,8.8,3,3,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-4.4,66,101300,0,0,257,0,0,0,0,0,0,0,270,7.7,3,3,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-4.4,69,101300,0,0,244,0,0,0,0,0,0,0,280,6.7,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-4.4,69,101300,0,0,244,0,0,0,0,0,0,0,270,7.7,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-4.4,73,101200,0,0,242,0,0,0,0,0,0,0,270,5.7,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101300,0,0,243,0,0,0,0,0,0,0,260,6.7,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101300,2,222,253,0,0,0,0,0,0,0,260,5.2,3,3,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.9,72,101300,146,1402,245,55,42,50,5900,2800,5600,1100,270,5.2,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101300,358,1402,250,217,497,90,22500,41400,11900,1670,270,5.2,0,0,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,101300,525,1402,268,338,629,102,34900,58400,12900,1930,270,6.7,5,5,16.0,77777,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,101300,636,1402,279,390,461,180,40400,45300,19800,3730,280,7.2,8,8,16.0,2743,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101200,682,1402,289,473,583,188,49200,58000,20900,3980,260,8.8,8,8,16.0,2743,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101100,661,1402,289,317,203,221,34300,20600,24600,5410,260,7.7,8,8,16.0,2743,9,999999999,80,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101100,573,1402,289,355,472,161,36700,45400,18000,3240,270,7.2,8,8,16.0,2743,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101100,425,1402,288,210,260,131,22100,23500,14900,2690,270,7.7,8,8,16.0,2743,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101200,228,1402,283,61,27,56,6600,2100,6300,1380,280,7.2,8,8,16.0,1494,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101200,30,736,280,0,0,0,0,0,0,0,280,7.7,8,8,16.0,2591,9,999999999,69,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.3,67,101300,0,0,276,0,0,0,0,0,0,0,280,6.7,8,8,16.0,2896,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.9,64,101400,0,0,266,0,0,0,0,0,0,0,280,9.3,5,5,16.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.9,67,101400,0,0,260,0,0,0,0,0,0,0,280,8.8,3,3,16.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-4.4,69,101400,0,0,255,0,0,0,0,0,0,0,280,7.2,3,3,16.0,77777,9,999999999,60,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.0,66,101400,0,0,254,0,0,0,0,0,0,0,270,8.2,3,3,16.0,77777,9,999999999,50,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-5.6,66,101400,0,0,241,0,0,0,0,0,0,0,270,9.3,0,0,16.0,77777,9,999999999,50,0.1010,0,88,0.150,0.0,1.0 +2000,11,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-5.0,69,101500,0,0,242,0,0,0,0,0,0,0,270,9.8,0,0,16.0,77777,9,999999999,50,0.1010,0,88,0.150,0.0,1.0 +2000,11,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-5.0,72,101400,0,0,240,0,0,0,0,0,0,0,280,7.2,0,0,16.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.1,66,101500,0,0,239,0,0,0,0,0,0,0,280,7.7,0,0,16.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-5.6,72,101500,0,0,237,0,0,0,0,0,0,0,280,9.8,0,0,16.0,77777,9,999999999,50,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-5.0,76,101500,0,0,238,0,0,0,0,0,0,0,280,8.2,0,0,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-5.0,79,101600,0,0,246,0,0,0,0,0,0,0,280,9.3,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-5.6,75,101600,0,0,246,0,0,0,0,0,0,0,280,9.3,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-6.1,72,101700,2,199,245,0,0,0,0,0,0,0,270,9.3,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-6.1,69,101700,142,1403,247,71,170,54,7300,8200,6400,1090,270,7.2,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,101700,353,1403,249,218,517,87,22600,42800,11800,1610,270,9.3,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,101700,520,1403,257,339,599,116,34600,55100,14100,2130,280,9.3,5,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.2,52,101700,631,1403,268,384,449,181,39700,44000,19800,3750,300,10.8,8,8,16.0,1280,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,101600,678,1403,269,370,313,218,39200,32200,23600,4970,270,6.7,8,8,16.0,1341,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-8.3,47,101500,657,1403,258,416,459,200,42800,45300,21500,4230,270,9.3,5,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,101500,569,1403,264,163,53,142,18000,5100,15900,4130,270,8.8,5,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-9.4,41,101400,422,1403,254,205,237,133,21400,21400,15000,2740,290,9.3,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-10.0,41,101500,225,1403,252,104,256,62,10600,17200,7800,1140,280,8.2,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-9.4,43,101500,29,713,255,0,0,0,0,0,0,0,270,9.8,4,4,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.8,52,101600,0,0,256,0,0,0,0,0,0,0,280,8.8,5,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.8,52,101700,0,0,256,0,0,0,0,0,0,0,280,9.3,6,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,101700,0,0,254,0,0,0,0,0,0,0,270,8.8,5,5,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.8,57,101700,0,0,248,0,0,0,0,0,0,0,290,9.8,3,3,14.4,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.8,57,101700,0,0,248,0,0,0,0,0,0,0,280,9.8,3,3,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-7.8,57,101800,0,0,238,0,0,0,0,0,0,0,290,10.8,0,0,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,101800,0,0,235,0,0,0,0,0,0,0,290,10.3,0,0,16.0,77777,9,999999999,40,0.1000,0,88,0.150,0.0,1.0 +2000,11,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.3,59,101800,0,0,243,0,0,0,0,0,0,0,290,9.3,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,101900,0,0,229,0,0,0,0,0,0,0,300,11.3,0,0,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.7,48,102000,0,0,236,0,0,0,0,0,0,0,290,7.7,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,102100,0,0,237,0,0,0,0,0,0,0,300,7.2,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.0,59,102100,0,0,226,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-9.4,62,102200,0,0,236,0,0,0,0,0,0,0,290,7.2,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-8.9,65,102300,1,152,237,0,0,0,0,0,0,0,300,5.7,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-8.3,62,102400,137,1403,241,44,0,44,4800,0,4800,1290,310,4.6,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,102500,348,1403,246,211,343,126,21800,28500,14700,2640,300,5.2,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.2,57,102500,516,1403,250,266,272,166,28000,26200,18300,3540,300,6.2,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,102500,627,1403,252,371,401,191,39400,40700,21200,4200,300,6.7,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.2,48,102400,674,1403,259,467,686,136,48200,66600,16100,2750,320,4.6,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,102400,653,1403,249,446,716,111,46600,69800,14000,2290,310,5.7,0,0,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,102400,566,1403,260,349,537,131,36700,51700,15800,2570,260,4.6,3,3,16.0,77777,9,999999999,40,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,102400,419,1403,260,225,427,97,23600,37700,12300,1810,290,4.6,3,3,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.9,41,102400,223,1403,257,95,245,56,9800,16400,7200,1020,300,5.2,3,3,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-9.4,43,102500,28,713,253,0,0,0,0,0,0,0,310,6.2,3,3,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-8.3,49,102600,0,0,251,0,0,0,0,0,0,0,310,6.2,3,3,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,102700,0,0,247,0,0,0,0,0,0,0,320,6.2,2,2,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-9.4,49,102700,0,0,236,0,0,0,0,0,0,0,310,6.2,0,0,16.0,77777,9,999999999,50,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-9.4,52,102800,0,0,234,0,0,0,0,0,0,0,300,7.2,0,0,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.1,46,102800,0,0,231,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.7,46,102800,0,0,228,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.7,48,102800,0,0,227,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,102800,0,0,239,0,0,0,0,0,0,0,320,5.2,4,4,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,102900,0,0,249,0,0,0,0,0,0,0,340,3.6,8,8,16.0,3048,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.7,48,102900,0,0,254,0,0,0,0,0,0,0,330,3.6,9,9,16.0,3353,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-11.1,51,102900,0,0,249,0,0,0,0,0,0,0,350,3.6,8,8,16.0,3048,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.6,56,102900,0,0,248,0,0,0,0,0,0,0,350,4.1,8,8,16.0,3048,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.0,61,102900,0,0,234,0,0,0,0,0,0,0,10,1.5,3,3,16.0,7620,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-10.0,61,103000,1,129,236,0,0,0,0,0,0,0,50,1.5,4,4,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-7.8,71,103000,133,1404,238,61,61,55,6400,3200,6100,1150,0,0.0,3,3,16.0,7620,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.8,59,103100,343,1404,235,197,441,88,20300,36100,11400,1640,0,0.0,0,0,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,103100,511,1404,250,320,531,125,33400,49800,15200,2410,240,2.6,3,3,16.0,77777,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.8,52,103100,622,1404,256,327,285,200,34600,28800,21700,4440,240,4.1,5,5,16.0,4267,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-8.3,47,103000,669,1404,260,400,469,176,41900,46600,19600,3680,260,6.2,7,6,16.0,7620,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.8,46,103000,649,1404,262,387,477,165,40500,47100,18600,3400,290,5.2,6,5,16.0,7620,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.8,46,102900,563,1404,258,287,271,178,30300,26800,19500,3840,270,6.2,4,3,16.0,7620,9,999999999,60,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,102900,416,1404,249,225,386,110,23200,33900,13100,2090,290,4.6,0,0,16.0,77777,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,102900,220,1404,245,107,298,60,10900,19800,7800,1110,290,2.1,1,0,16.0,77777,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.3,44,102900,27,690,255,0,0,0,0,0,0,0,290,2.1,2,2,16.0,77777,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.8,49,102900,0,0,248,0,0,0,0,0,0,0,0,0.0,1,1,16.0,77777,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.7,54,103000,0,0,269,0,0,0,0,0,0,0,270,2.6,8,8,16.0,7620,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,103000,0,0,260,0,0,0,0,0,0,0,260,3.1,3,3,16.0,7620,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.6,62,103000,0,0,256,0,0,0,0,0,0,0,60,2.6,5,4,16.0,4267,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,103000,0,0,283,0,0,0,0,0,0,0,40,2.1,10,10,16.0,2438,9,999999999,69,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.0,63,103100,0,0,270,0,0,0,0,0,0,0,0,0.0,8,8,16.0,2438,9,999999999,80,0.0990,0,88,0.150,0.0,1.0 +2000,11,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-4.4,76,103100,0,0,251,0,0,0,0,0,0,0,50,1.5,3,3,16.0,77777,9,999999999,80,0.0990,0,88,0.150,0.0,1.0 +2000,11,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-3.3,91,103100,0,0,238,0,0,0,0,0,0,0,40,1.5,0,0,16.0,77777,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-3.9,83,103200,0,0,239,0,0,0,0,0,0,0,0,0.0,1,0,16.0,77777,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-3.3,100,103100,0,0,242,0,0,0,0,0,0,0,50,2.1,4,2,16.0,77777,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-4.4,96,103100,0,0,238,0,0,0,0,0,0,0,60,2.6,4,2,16.0,77777,9,999999999,80,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-3.9,95,103100,0,0,241,0,0,0,0,0,0,0,60,2.6,5,2,16.0,7620,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-3.9,95,103100,0,0,243,0,0,0,0,0,0,0,60,3.6,6,3,16.0,7620,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-3.9,87,103100,1,105,247,0,0,0,0,0,0,0,60,4.1,8,3,16.0,7620,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-4.4,80,103200,128,1404,253,16,0,16,1900,0,1900,600,60,4.1,9,5,16.0,7620,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-4.4,73,103100,339,1404,257,53,0,53,6200,0,6200,2100,60,4.6,9,5,16.0,7010,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,103300,507,1404,266,173,49,155,18900,4700,17200,4170,70,1.5,9,6,16.0,7010,9,999999999,89,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,103200,618,1404,271,252,85,214,27600,8400,23900,5920,60,4.6,10,6,16.0,6706,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,103000,666,1404,277,285,90,242,31200,9000,26900,6790,60,4.1,10,6,16.0,6706,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,103000,645,1404,282,258,78,222,28300,7700,24700,6250,60,3.6,10,6,16.0,6401,9,999999999,100,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.1,79,103000,559,1404,287,203,65,177,22200,6300,19700,4860,90,4.1,10,7,16.0,4267,9,999999999,110,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,102900,413,1404,308,84,0,84,9600,0,9600,3250,90,4.1,10,10,16.0,853,9,999999999,120,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,102900,218,1404,308,51,11,50,5800,200,5800,1710,80,4.6,10,10,16.0,853,9,999999999,129,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,102800,26,691,297,0,0,0,0,0,0,0,60,4.1,10,9,16.0,853,9,999999999,129,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,102900,0,0,291,0,0,0,0,0,0,0,60,4.1,10,9,16.0,853,9,999999999,139,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,102800,0,0,296,0,0,0,0,0,0,0,60,4.6,10,10,16.0,853,9,999999999,150,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102800,0,0,278,0,0,0,0,0,0,0,50,3.6,10,7,16.0,3962,9,999999999,160,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.6,85,102700,0,0,291,0,0,0,0,0,0,0,50,4.6,10,9,16.0,1402,9,999999999,170,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,102600,0,0,303,0,0,0,0,0,0,0,40,4.1,10,10,16.0,1341,9,999999999,179,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,102500,0,0,309,0,0,0,0,0,0,0,60,5.2,10,10,16.0,732,9,999999999,189,0.0980,0,88,0.150,0.0,1.0 +2000,11,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,5.0,100,102400,0,0,314,0,0,0,0,0,0,0,60,4.1,10,10,16.0,610,9,999999999,200,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,6.1,100,102300,0,0,320,0,0,0,0,0,0,0,60,4.6,10,10,16.0,549,9,999999999,200,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.1,96,102100,0,0,323,0,0,0,0,0,0,0,70,5.2,10,10,16.0,457,9,999999999,200,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,6.7,100,102100,0,0,323,0,0,0,0,0,0,0,50,3.6,10,10,11.2,1676,9,999999999,200,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,101900,0,0,329,0,0,0,0,0,0,0,60,5.2,10,10,9.6,457,9,999999999,200,0.0980,0,88,0.150,1.0,1.0 +2000,11,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101800,0,0,335,0,0,0,0,0,0,0,80,8.2,10,10,11.2,457,9,999999999,200,0.0980,0,88,0.150,1.0,1.0 +2000,11,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,101700,0,0,335,0,0,0,0,0,0,0,90,8.8,10,10,6.4,640,9,999999999,200,0.0980,0,88,0.150,3.0,1.0 +2000,11,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,101500,0,82,332,0,0,0,0,0,0,0,90,10.8,10,10,8.0,244,9,999999999,189,0.0980,0,88,0.150,4.0,1.0 +2000,11,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.9,100,101300,124,1405,336,17,0,17,2000,0,2000,630,80,13.4,10,10,3.2,244,9,999999999,189,0.0980,0,88,0.150,3.0,1.0 +2000,11,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,101100,334,1405,338,38,0,38,4500,0,4500,1580,90,11.3,10,10,2.8,183,9,999999999,189,0.0980,0,88,0.150,2.0,1.0 +2000,11,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,101000,502,1405,343,174,56,154,19100,5300,17200,4130,90,10.8,10,10,3.2,183,9,999999999,189,0.0980,0,88,0.150,2.0,1.0 +2000,11,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100800,614,1405,346,113,0,113,13200,0,13200,4860,110,11.8,10,10,2.4,183,9,999999999,189,0.0980,0,88,0.150,1.0,1.0 +2000,11,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100700,662,1405,346,133,0,133,15500,0,15500,5720,90,12.4,10,10,4.8,183,9,999999999,189,0.0980,0,88,0.150,1.0,1.0 +2000,11,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,100500,642,1405,349,129,0,129,15000,0,15000,5510,90,8.2,10,10,1.2,122,9,999999999,179,0.0980,0,88,0.150,2.0,1.0 +2000,11,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,12.2,100,100300,556,1405,356,101,0,101,11800,0,11800,4260,100,3.6,10,10,1.7,61,9,999999999,179,0.0980,0,88,0.150,1.0,1.0 +2000,11,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,13.3,13.3,100,100300,411,1405,363,68,0,68,7900,0,7900,2750,160,4.1,10,10,2.4,122,9,999999999,170,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.8,12.8,100,100200,216,1405,360,26,0,26,3100,0,3100,1020,180,5.2,10,10,0.2,30,9,999999999,170,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.7,11.7,100,100200,25,667,353,0,0,0,0,0,0,0,240,3.1,10,10,0.2,30,9,999999999,170,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,11.1,100,100200,0,0,349,0,0,0,0,0,0,0,320,3.1,10,10,0.8,61,9,999999999,160,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.6,100,100200,0,0,346,0,0,0,0,0,0,0,320,2.6,10,10,0.0,61,9,999999999,160,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.0,11.0,100,100300,0,0,349,0,0,0,0,0,0,0,300,2.1,10,10,2.4,120,9,999999999,150,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,100300,0,0,343,0,0,0,0,0,0,0,300,5.2,10,10,2.4,122,9,999999999,150,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,9.0,93,100400,0,0,341,0,0,0,0,0,0,0,250,7.2,10,10,14.5,990,9,999999999,139,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.8,93,100400,0,0,335,0,0,0,0,0,0,0,280,5.7,10,10,16.0,945,9,999999999,139,0.0980,0,88,0.150,0.0,1.0 +2000,11,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,100400,0,0,332,0,0,0,0,0,0,0,280,3.1,10,10,16.0,610,9,999999999,129,0.0980,0,88,0.150,0.0,1.0 +2000,11,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,100400,0,0,335,0,0,0,0,0,0,0,260,3.6,10,10,16.0,1006,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,100400,0,0,316,0,0,0,0,0,0,0,220,3.1,8,8,16.0,914,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,100400,0,0,294,0,0,0,0,0,0,0,240,4.1,3,3,16.0,4267,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,100400,0,0,296,0,0,0,0,0,0,0,240,5.2,5,5,16.0,7620,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,100400,0,0,318,0,0,0,0,0,0,0,250,3.6,10,10,16.0,2438,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,5.6,93,100400,0,0,322,0,0,0,0,0,0,0,260,3.1,10,10,12.8,2438,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,100400,0,59,324,0,0,0,0,0,0,0,230,6.2,10,10,12.8,2591,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100400,120,1405,312,17,0,17,2000,0,2000,630,240,4.1,8,8,11.2,1676,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,100500,330,1405,314,115,52,103,12600,4500,11500,2520,240,7.7,8,8,12.8,3048,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,7.2,86,100500,498,1405,309,328,483,156,33400,44700,17500,3100,250,6.2,5,5,14.4,4267,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.7,77,100400,610,1405,325,416,547,178,42900,53300,19700,3650,250,7.7,8,8,16.0,3048,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,6.1,74,100400,658,1405,313,200,24,189,22700,2000,21800,7350,260,10.3,5,5,16.0,77777,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,11.1,3.3,59,100400,639,1405,324,170,6,167,19300,500,19100,6640,270,7.7,8,8,16.0,1128,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,2.8,58,100400,553,1405,321,225,118,178,24300,11600,19700,4160,270,8.8,8,8,16.0,1250,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.2,58,100500,408,1405,318,89,0,89,10100,0,10100,3380,270,8.2,8,8,16.0,1189,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,100600,214,1405,316,59,48,52,6500,3300,6000,1100,250,6.2,8,8,16.0,1219,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,3.3,66,100700,24,668,316,0,0,0,0,0,0,0,250,6.2,8,8,16.0,1311,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.8,63,100700,0,0,316,0,0,0,0,0,0,0,250,6.7,8,8,16.0,1189,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,2.2,58,100800,0,0,313,0,0,0,0,0,0,0,260,8.8,7,7,16.0,1189,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,100800,0,0,329,0,0,0,0,0,0,0,260,5.7,10,10,16.0,1829,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.2,63,100900,0,0,313,0,0,0,0,0,0,0,270,6.2,8,8,16.0,1981,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.2,65,100900,0,0,299,0,0,0,0,0,0,0,270,5.2,5,5,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,101000,0,0,329,0,0,0,0,0,0,0,260,6.7,10,10,16.0,1250,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101000,0,0,327,0,0,0,0,0,0,0,250,5.7,10,10,16.0,1189,9,999999999,150,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101000,0,0,327,0,0,0,0,0,0,0,270,4.6,10,10,16.0,2134,9,999999999,150,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.8,71,101000,0,0,293,0,0,0,0,0,0,0,260,5.2,3,3,16.0,77777,9,999999999,150,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,101000,0,0,288,0,0,0,0,0,0,0,250,4.1,3,3,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.8,76,101100,0,0,288,0,0,0,0,0,0,0,280,3.6,3,3,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,101100,0,0,285,0,0,0,0,0,0,0,260,4.1,3,3,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.2,86,101200,0,0,281,0,0,0,0,0,0,0,0,0.0,4,4,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,101300,0,35,280,0,0,0,0,0,0,0,0,0.0,5,5,16.0,77777,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.3,79,101400,115,1406,304,18,0,18,2100,0,2100,650,250,3.1,8,8,16.0,1250,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.3,76,101400,326,1406,306,115,52,103,12600,4500,11500,2500,250,3.6,8,8,16.0,1128,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,101500,494,1406,326,154,37,141,16900,3500,15700,3830,270,3.6,10,10,16.0,1067,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,1.1,58,101400,606,1406,327,63,0,63,7700,0,7700,2940,300,5.2,10,10,16.0,1128,9,999999999,139,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.1,56,101400,654,1406,329,158,0,158,18100,0,18100,6470,280,4.1,10,10,16.0,1189,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,3.3,71,101300,635,1406,327,76,0,76,9200,0,9200,3520,230,5.2,10,10,16.0,1128,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,101300,551,1406,320,73,0,73,8700,0,8700,3240,230,3.6,10,9,16.0,1128,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,2.8,63,101400,406,1406,322,89,0,89,10100,0,10100,3370,240,3.6,10,9,16.0,1250,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.1,56,101400,212,1406,329,51,5,50,5700,100,5700,1690,250,4.6,10,10,16.0,1372,9,999999999,129,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,2.8,66,101500,23,644,313,0,0,0,0,0,0,0,230,3.1,8,8,16.0,1494,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,2.8,68,101500,0,0,326,0,0,0,0,0,0,0,220,2.1,10,10,16.0,1829,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,2.8,71,101500,0,0,297,0,0,0,0,0,0,0,220,3.6,6,5,16.0,77777,9,999999999,120,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.8,79,101600,0,0,286,0,0,0,0,0,0,0,210,2.6,3,3,14.4,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,101600,0,0,287,0,0,0,0,0,0,0,180,2.6,3,3,14.4,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,101600,0,0,287,0,0,0,0,0,0,0,250,3.1,3,3,12.8,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.6,63,101600,0,0,288,0,0,0,0,0,0,0,300,6.2,3,3,14.4,77777,9,999999999,110,0.0970,0,88,0.150,0.0,1.0 +2000,11,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101600,0,0,285,0,0,0,0,0,0,0,270,4.6,3,3,16.0,77777,9,999999999,100,0.0970,0,88,0.150,0.0,1.0 +2000,11,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-0.6,64,101700,0,0,280,0,0,0,0,0,0,0,280,5.2,3,3,16.0,77777,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101700,0,0,275,0,0,0,0,0,0,0,280,6.2,3,3,16.0,77777,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101700,0,0,264,0,0,0,0,0,0,0,270,5.2,0,0,16.0,77777,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101800,0,0,262,0,0,0,0,0,0,0,260,7.2,0,0,16.0,77777,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101900,0,0,261,0,0,0,0,0,0,0,270,6.2,0,0,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101900,0,0,262,0,0,0,0,0,0,0,270,4.6,0,0,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101900,0,12,260,0,0,0,0,0,0,0,280,4.1,0,0,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,102000,111,1406,262,19,0,19,2200,0,2200,680,280,4.6,0,0,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,102000,321,1406,269,124,105,100,13400,8700,11400,2180,260,4.6,0,0,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,102000,490,1406,274,308,477,141,31600,44000,16200,2760,260,4.1,0,0,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,0.6,63,101900,602,1406,288,391,644,114,40400,61600,14000,2240,230,4.1,3,3,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.0,56,101800,651,1406,292,443,716,111,46400,69700,14000,2280,240,5.7,3,3,12.8,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,0.6,58,101700,632,1406,293,411,644,120,42500,62100,14500,2400,210,3.6,3,3,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,101700,548,1406,301,343,560,124,36200,53500,15300,2400,220,6.2,5,5,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-0.6,51,101700,404,1406,299,193,248,122,20300,22000,14000,2480,230,5.2,5,5,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,101600,210,1406,296,55,32,50,6000,2400,5600,1230,230,5.2,5,5,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.0,62,101600,23,645,290,0,0,0,0,0,0,0,210,4.6,5,5,16.0,77777,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.6,70,101600,0,0,303,0,0,0,0,0,0,0,180,3.1,9,9,16.0,7620,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.1,70,101500,0,0,306,0,0,0,0,0,0,0,120,2.6,9,9,16.0,7620,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,101600,0,0,321,0,0,0,0,0,0,0,210,4.1,10,10,16.0,2591,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,101600,0,0,314,0,0,0,0,0,0,0,210,7.2,10,10,11.2,762,9,999999999,100,0.0960,0,88,0.150,1.0,1.0 +2000,11,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.0,3.0,93,101400,0,0,307,0,0,0,0,0,0,0,190,5.1,10,10,11.3,420,9,999999999,110,0.0960,0,88,0.150,2.0,1.0 +2000,11,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.3,93,101300,0,0,309,0,0,0,0,0,0,0,190,2.6,10,10,11.2,488,9,999999999,110,0.0960,0,88,0.150,0.0,1.0 +2000,11,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,101200,0,0,312,0,0,0,0,0,0,0,140,3.1,10,10,14.4,518,9,999999999,110,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,101100,0,0,315,0,0,0,0,0,0,0,150,2.1,10,10,14.4,975,9,999999999,120,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,101000,0,0,313,0,0,0,0,0,0,0,350,2.1,10,10,12.8,427,9,999999999,120,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100900,0,0,313,0,0,0,0,0,0,0,30,2.1,10,10,9.6,366,9,999999999,110,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.0,93,100800,0,0,313,0,0,0,0,0,0,0,230,4.6,10,10,8.0,360,9,999999999,110,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,100800,0,0,312,0,0,0,0,0,0,0,280,6.2,10,10,14.4,549,9,999999999,110,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,100800,0,0,311,0,0,0,0,0,0,0,280,4.6,10,10,12.8,701,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.8,86,100800,0,0,311,0,0,0,0,0,0,0,280,4.6,10,10,12.8,701,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,100900,107,1395,310,20,0,20,2300,0,2300,710,300,8.2,10,10,16.0,579,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.0,75,100900,317,1407,301,31,0,31,3700,0,3700,1300,300,9.3,10,9,16.1,1500,9,999999999,100,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,101000,486,1407,302,168,56,148,18300,5300,16500,3940,320,8.2,10,9,16.0,640,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,101100,598,1407,310,152,0,152,17300,0,17300,6000,320,9.3,10,10,16.0,579,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.1,73,101100,647,1407,312,304,199,212,32900,20100,23700,5150,310,9.3,10,10,16.0,701,9,999999999,89,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,1.1,65,101100,629,1407,311,82,0,82,9900,0,9900,3750,310,8.2,10,9,16.0,853,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101200,546,1407,306,163,29,152,17900,2800,16800,4260,310,10.3,10,9,16.0,1250,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101300,402,1407,293,219,351,119,23100,31100,14200,2410,310,9.8,8,8,16.0,1219,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,101400,208,1407,285,97,338,47,9800,22400,6500,800,310,8.8,5,5,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101600,22,645,280,0,0,0,0,0,0,0,300,8.8,5,5,16.0,77777,9,999999999,80,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,101700,0,0,289,0,0,0,0,0,0,0,300,9.8,8,8,16.0,1524,9,999999999,69,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,101700,0,0,289,0,0,0,0,0,0,0,310,8.2,8,8,16.0,1219,9,999999999,69,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.0,46,101800,0,0,288,0,0,0,0,0,0,0,310,8.8,8,8,16.0,1402,9,999999999,69,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,101800,0,0,286,0,0,0,0,0,0,0,300,8.8,8,8,16.0,1402,9,999999999,69,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.9,-3.0,51,101900,0,0,290,0,0,0,0,0,0,0,300,8.7,8,8,16.0,1402,9,999999999,60,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.4,-1.6,52,101900,0,0,283,0,0,0,0,0,0,0,300,8.6,5,5,16.0,77777,9,999999999,60,0.0960,0,88,0.150,0.0,1.0 +2000,11,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.9,-0.3,51,101900,0,0,286,0,0,0,0,0,0,0,280,8.5,5,5,16.0,77777,9,999999999,60,0.0960,0,88,0.150,0.0,1.0 +1997,12,1,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.3,1.0,97,99200,0,0,315,0,0,0,0,0,0,0,350,8.5,10,10,4.8,152,9,999999999,120,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.8,2.3,97,99200,0,0,319,0,0,0,0,0,0,0,340,8.4,10,10,11.2,152,9,999999999,120,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.3,3.7,93,99200,0,0,323,0,0,0,0,0,0,0,330,8.3,10,10,16.0,1524,9,999999999,110,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,5.0,82,99200,0,0,326,0,0,0,0,0,0,0,320,8.2,10,10,16.0,518,9,999999999,110,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,99300,0,0,317,0,0,0,0,0,0,0,310,11.3,10,10,16.0,518,9,999999999,110,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,99400,0,0,308,0,0,0,0,0,0,0,320,13.9,10,10,16.0,823,9,999999999,100,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,99500,0,0,306,0,0,0,0,0,0,0,320,10.3,10,10,16.0,1067,9,999999999,100,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,99600,104,1372,275,34,180,20,3600,9200,2800,360,310,11.3,4,4,16.0,77777,9,999999999,100,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,99700,314,1407,275,122,252,66,12900,19900,8400,1190,320,12.9,3,3,16.0,77777,9,999999999,100,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-4.4,46,99800,483,1407,277,261,487,93,26800,44300,11500,1740,330,11.8,3,3,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.6,44,99800,596,1407,288,261,176,186,28300,17500,20900,4420,310,13.4,8,8,16.0,1341,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.0,46,99800,645,1407,288,352,164,277,37500,16400,30000,6730,320,11.3,8,8,16.0,1341,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-6.1,42,99800,627,1407,287,225,142,162,24800,14300,18400,3900,330,12.9,8,8,16.0,1402,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.7,41,99900,544,1407,284,174,135,122,19300,13300,14200,2840,320,11.3,8,8,16.0,1433,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-7.2,38,99900,400,1407,274,130,234,64,14200,20400,8400,1150,300,14.4,4,4,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.7,43,100100,207,1407,268,94,343,43,9500,22900,6100,750,310,11.8,3,3,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-6.7,45,100100,22,645,267,4,22,3,0,0,0,0,300,16.0,4,4,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,100200,0,0,260,0,0,0,0,0,0,0,300,13.4,3,3,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.2,48,100400,0,0,263,0,0,0,0,0,0,0,310,10.8,5,5,16.0,77777,9,999999999,89,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,100400,0,0,258,0,0,0,0,0,0,0,310,11.8,4,4,16.0,77777,9,999999999,80,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,100400,0,0,258,0,0,0,0,0,0,0,300,13.9,4,4,16.0,77777,9,999999999,80,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,100400,0,0,256,0,0,0,0,0,0,0,310,9.8,3,3,16.0,77777,9,999999999,80,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.8,46,100400,0,0,258,0,0,0,0,0,0,0,300,13.4,3,3,16.0,77777,9,999999999,80,0.0960,0,88,0.170,0.0,1.0 +1997,12,1,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.2,48,100500,0,0,259,0,0,0,0,0,0,0,320,9.8,3,3,16.0,77777,9,999999999,80,0.0960,0,88,0.170,0.0,1.0 +1997,12,2,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.2,48,100500,0,0,259,0,0,0,0,0,0,0,310,10.3,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.8,46,100600,0,0,258,0,0,0,0,0,0,0,300,11.8,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,100600,0,0,255,0,0,0,0,0,0,0,300,13.4,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,100600,0,0,245,0,0,0,0,0,0,0,300,12.4,0,0,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,100700,0,0,245,0,0,0,0,0,0,0,290,9.3,0,0,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.9,43,100700,0,0,244,0,0,0,0,0,0,0,300,11.3,0,0,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,100800,0,0,256,0,0,0,0,0,0,0,300,8.2,3,3,16.0,77777,9,999999999,69,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-8.3,46,101000,101,1349,255,42,240,24,4400,12000,3400,420,300,8.2,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.3,42,101100,310,1407,260,171,497,61,17500,39300,8800,1090,300,11.3,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,101100,479,1407,264,305,673,76,31900,61700,10800,1470,310,10.8,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-8.3,36,101100,592,1407,268,353,573,111,36500,54600,13500,2180,310,11.3,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-8.9,33,101100,642,1407,270,413,722,84,43000,69800,11100,1710,300,13.9,3,3,16.0,77777,9,999999999,80,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-7.8,33,101100,625,1407,264,442,869,56,46600,83600,9400,1340,300,12.4,0,0,16.0,77777,9,999999999,89,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-7.2,34,101200,542,1407,267,370,829,50,39000,78100,8800,1190,300,11.8,0,0,16.0,77777,9,999999999,89,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-7.2,34,101300,399,1407,267,250,738,41,26500,65600,7800,940,300,9.8,0,0,16.0,77777,9,999999999,89,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-7.2,35,101300,206,1407,264,105,526,28,10800,37700,5200,560,300,9.3,0,0,16.0,77777,9,999999999,89,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-6.7,40,101400,21,622,261,6,100,3,0,0,0,0,290,11.3,0,0,16.0,77777,9,999999999,100,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-6.7,40,101500,0,0,261,0,0,0,0,0,0,0,300,8.8,0,0,16.0,77777,9,999999999,100,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.7,41,101600,0,0,258,0,0,0,0,0,0,0,290,7.7,0,0,16.0,77777,9,999999999,100,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.7,43,101600,0,0,257,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,100,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,101600,0,0,253,0,0,0,0,0,0,0,300,7.7,0,0,16.0,77777,9,999999999,100,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.1,49,101700,0,0,253,0,0,0,0,0,0,0,290,4.6,0,0,16.0,77777,9,999999999,110,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.1,51,101700,0,0,251,0,0,0,0,0,0,0,290,6.2,0,0,16.0,77777,9,999999999,110,0.0950,0,88,0.170,0.0,1.0 +1997,12,2,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.6,53,101700,0,0,251,0,0,0,0,0,0,0,290,4.6,0,0,16.0,77777,9,999999999,110,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,101700,0,0,250,0,0,0,0,0,0,0,290,5.7,0,0,16.0,77777,9,999999999,110,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,101800,0,0,250,0,0,0,0,0,0,0,280,5.2,0,0,16.0,77777,9,999999999,110,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,101800,0,0,247,0,0,0,0,0,0,0,270,7.2,0,0,16.0,77777,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,101900,0,0,247,0,0,0,0,0,0,0,260,6.7,0,0,16.0,77777,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,101900,0,0,246,0,0,0,0,0,0,0,250,5.7,0,0,16.0,77777,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.1,60,101800,0,0,243,0,0,0,0,0,0,0,280,3.1,0,0,16.0,77777,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,101900,0,0,253,0,0,0,0,0,0,0,250,6.2,1,1,16.0,77777,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,102000,97,1326,248,36,231,19,3800,11600,2900,350,250,4.6,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,102000,306,1408,255,168,575,42,17200,46900,6900,810,230,3.1,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,102000,475,1408,263,301,724,56,31500,66700,8900,1160,280,3.1,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-3.9,47,101900,589,1408,268,397,792,66,42000,76100,10000,1410,250,4.1,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.8,46,101800,639,1408,275,440,816,70,46700,79400,10500,1530,260,5.7,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.8,44,101700,622,1408,277,409,772,68,43400,74900,10200,1480,250,3.6,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.8,42,101700,539,1408,280,352,757,61,37000,71600,9500,1290,240,4.1,0,0,16.0,7620,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-2.2,46,101600,397,1408,278,237,664,50,24600,58500,8100,1000,220,4.1,0,0,16.0,77777,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.8,46,101500,205,1408,292,93,330,45,9400,21800,6200,780,230,4.6,5,5,16.0,7620,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.1,53,101500,21,622,293,5,15,4,0,0,0,0,210,4.1,5,5,16.0,4572,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.1,76,101500,0,0,268,0,0,0,0,0,0,0,190,4.1,0,0,16.0,77777,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-0.6,67,101400,0,0,282,0,0,0,0,0,0,0,200,3.1,5,5,16.0,77777,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,101400,0,0,287,0,0,0,0,0,0,0,190,3.1,6,6,16.0,4267,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,0.0,70,101300,0,0,283,0,0,0,0,0,0,0,200,3.6,5,5,16.0,4267,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101200,0,0,289,0,0,0,0,0,0,0,220,6.2,5,5,16.0,3962,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-1.7,54,101200,0,0,305,0,0,0,0,0,0,0,230,5.2,9,9,16.0,1494,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,3,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-0.6,62,101100,0,0,312,0,0,0,0,0,0,0,210,4.1,10,10,16.0,3048,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.1,73,100900,0,0,312,0,0,0,0,0,0,0,220,3.1,10,10,16.0,2438,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,1.7,70,100900,0,0,318,0,0,0,0,0,0,0,220,5.2,10,10,16.0,1524,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.9,93,100900,0,0,312,0,0,0,0,0,0,0,230,5.2,10,10,8.0,853,9,999999999,150,0.0950,0,88,0.170,2.0,1.0 +1997,12,4,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100700,0,0,316,0,0,0,0,0,0,0,190,2.1,10,10,9.6,335,9,999999999,150,0.0950,0,88,0.170,1.0,1.0 +1997,12,4,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100700,0,0,316,0,0,0,0,0,0,0,0,0.0,10,10,9.6,335,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,100600,0,0,316,0,0,0,0,0,0,0,220,2.1,10,10,9.6,274,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100600,0,0,319,0,0,0,0,0,0,0,230,1.5,10,10,9.6,213,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100500,93,1303,319,11,0,11,1300,0,1300,420,0,0.0,10,10,9.6,213,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,100500,302,1408,325,42,0,42,4900,0,4900,1670,230,3.1,10,10,9.6,244,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,100500,471,1408,325,62,0,62,7400,0,7400,2670,240,3.1,10,10,6.4,183,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100400,585,1408,328,82,0,82,9800,0,9800,3650,290,5.2,10,10,4.8,183,9,999999999,150,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100300,636,1408,328,90,0,90,10800,0,10800,4080,250,4.6,10,10,4.8,183,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,100200,620,1408,334,105,0,105,12400,0,12400,4590,320,3.1,10,10,9.6,366,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,100100,538,1408,309,293,473,112,31200,45000,14000,2140,330,2.1,4,4,14.4,6096,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,100100,396,1408,329,106,48,92,11600,4300,10400,2480,230,3.6,10,9,14.4,6096,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.1,86,100100,204,1408,321,59,24,55,6400,1800,6100,1320,240,2.6,10,9,9.6,2591,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,5.6,90,100100,21,622,315,3,7,3,0,0,0,0,220,3.1,10,9,9.6,2591,9,999999999,139,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,100200,0,0,331,0,0,0,0,0,0,0,250,3.6,10,10,11.2,2134,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,100200,0,0,334,0,0,0,0,0,0,0,0,0.0,10,10,14.4,2134,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,6.7,86,100200,0,0,334,0,0,0,0,0,0,0,0,0.0,10,10,12.8,2134,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,7.2,89,100200,0,0,334,0,0,0,0,0,0,0,230,3.1,10,10,12.8,1829,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,100100,0,0,329,0,0,0,0,0,0,0,200,3.1,10,10,8.0,1981,9,999999999,129,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,6.7,90,100100,0,0,331,0,0,0,0,0,0,0,250,2.1,10,10,11.2,2286,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,4,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.2,96,100100,0,0,329,0,0,0,0,0,0,0,230,3.6,10,10,8.0,2438,9,999999999,120,0.0950,0,88,0.170,0.0,1.0 +1997,12,5,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,6.1,93,100000,0,0,325,0,0,0,0,0,0,0,230,3.1,10,10,9.6,3048,9,999999999,120,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100000,0,0,328,0,0,0,0,0,0,0,270,2.6,10,10,11.2,2896,9,999999999,120,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,6.1,89,100000,0,0,328,0,0,0,0,0,0,0,40,5.7,10,10,8.0,335,9,999999999,120,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,100000,0,0,321,0,0,0,0,0,0,0,10,3.6,10,10,16.0,488,9,999999999,120,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,100000,0,0,317,0,0,0,0,0,0,0,20,2.6,10,10,16.0,610,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.3,82,100000,0,0,317,0,0,0,0,0,0,0,360,3.6,10,10,16.0,671,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,100000,0,0,314,0,0,0,0,0,0,0,360,3.1,10,10,16.0,762,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.2,79,99900,90,1280,305,19,55,15,2100,2200,2000,250,30,2.6,9,9,16.0,1006,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.2,76,99900,299,1409,316,53,0,53,6100,0,6100,2010,70,2.1,10,10,16.0,762,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.8,79,99900,468,1409,308,119,12,115,13500,800,13200,4330,360,1.5,9,9,11.2,701,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,2.8,82,99800,582,1409,314,121,0,121,14000,0,14000,5000,290,2.1,10,10,16.0,518,9,999999999,110,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,2.8,79,99700,633,1409,316,133,0,133,15400,0,15400,5590,240,6.2,10,10,16.0,701,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.7,76,99600,617,1409,313,129,0,129,14900,0,14900,5400,260,7.7,10,10,16.0,762,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,99700,536,1409,310,109,0,109,12600,0,12600,4440,280,7.7,10,10,12.8,518,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.7,83,99700,394,1409,299,103,131,66,11300,11600,8000,1200,280,4.6,9,9,16.0,640,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.1,79,99800,203,1409,298,42,25,39,4700,1800,4400,1000,280,7.7,9,9,16.0,732,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.6,76,99800,21,622,298,3,6,3,0,0,0,0,270,9.3,9,9,16.0,1433,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,99900,0,0,306,0,0,0,0,0,0,0,280,8.2,10,10,12.8,945,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,100000,0,0,302,0,0,0,0,0,0,0,270,7.2,10,10,16.0,1676,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,100000,0,0,293,0,0,0,0,0,0,0,280,7.7,9,9,16.0,975,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,100100,0,0,270,0,0,0,0,0,0,0,270,6.2,3,3,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,100100,0,0,254,0,0,0,0,0,0,0,270,8.2,0,0,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,100100,0,0,263,0,0,0,0,0,0,0,270,6.7,3,3,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,5,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,100100,0,0,252,0,0,0,0,0,0,0,270,6.7,0,0,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,100100,0,0,248,0,0,0,0,0,0,0,270,7.7,0,0,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,100100,0,0,247,0,0,0,0,0,0,0,280,7.2,0,0,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,100100,0,0,246,0,0,0,0,0,0,0,260,7.2,0,0,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,100100,0,0,246,0,0,0,0,0,0,0,270,6.7,0,0,16.0,77777,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.6,62,100100,0,0,243,0,0,0,0,0,0,0,270,5.2,0,0,16.0,77777,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.6,62,100200,0,0,243,0,0,0,0,0,0,0,270,5.2,0,0,16.0,77777,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.6,62,100200,0,0,254,0,0,0,0,0,0,0,270,5.2,3,3,16.0,77777,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,100200,87,1256,262,23,41,21,2700,1900,2500,430,260,6.2,6,6,16.0,7620,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,100300,295,1409,278,60,26,54,6500,2100,6100,1450,270,6.7,9,9,16.0,2591,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,100300,465,1409,281,97,69,74,10900,6600,8800,1670,270,6.7,9,9,16.0,2896,9,999999999,80,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,100200,579,1409,285,121,54,99,13400,5200,11300,3050,250,7.7,9,9,16.0,7620,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,100100,631,1409,287,227,57,202,25000,5600,22400,5730,260,8.2,9,9,16.0,7620,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-7.2,43,100100,615,1409,279,242,112,192,26200,11200,21300,4600,270,7.7,8,8,16.0,1067,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-7.2,43,100100,534,1409,279,182,177,114,19700,17300,13100,2250,270,8.2,8,8,16.0,1463,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-7.2,41,100100,393,1409,281,88,32,79,9700,2800,8900,2180,270,8.8,8,8,16.0,1676,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,100100,202,1409,278,64,154,42,6900,9600,5500,750,260,9.3,8,8,16.0,1829,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,100200,20,622,288,2,0,2,0,0,0,0,270,10.3,10,10,16.0,2134,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-7.8,46,100300,0,0,258,0,0,0,0,0,0,0,280,9.3,3,3,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.7,52,100300,0,0,254,0,0,0,0,0,0,0,260,10.3,2,2,16.0,77777,9,999999999,89,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.2,54,100300,0,0,252,0,0,0,0,0,0,0,250,7.7,3,3,16.0,77777,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,100300,0,0,253,0,0,0,0,0,0,0,270,8.8,3,3,16.0,77777,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,100300,0,0,240,0,0,0,0,0,0,0,260,8.8,0,0,16.0,77777,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,100300,0,0,251,0,0,0,0,0,0,0,250,9.3,3,3,16.0,77777,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,6,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,100300,0,0,251,0,0,0,0,0,0,0,260,8.8,3,3,16.0,77777,9,999999999,100,0.0940,0,88,0.170,0.0,1.0 +1997,12,7,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.1,66,100300,0,0,249,0,0,0,0,0,0,0,260,8.8,3,3,16.0,77777,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.1,66,100300,0,0,249,0,0,0,0,0,0,0,260,9.3,4,3,16.0,77777,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.7,60,100300,0,0,257,0,0,0,0,0,0,0,260,8.8,7,6,16.0,7620,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-6.1,63,100300,0,0,278,0,0,0,0,0,0,0,260,7.2,10,10,16.0,3048,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,100400,0,0,280,0,0,0,0,0,0,0,260,8.2,10,10,16.0,2438,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.1,60,100400,0,0,257,0,0,0,0,0,0,0,260,9.8,5,5,16.0,7620,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-6.1,57,100500,0,0,265,0,0,0,0,0,0,0,270,7.2,8,7,16.0,7620,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-5.6,62,100500,84,1233,273,20,25,18,2200,1200,2100,370,260,7.7,10,9,16.0,7620,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,100600,291,1409,265,147,341,76,15100,26000,9700,1410,260,7.2,10,5,16.0,77777,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,100600,461,1409,266,281,654,67,29600,59600,10000,1300,270,7.7,3,3,16.0,7620,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,100600,576,1409,281,299,261,192,31500,25900,20800,4220,280,6.7,8,8,16.0,1524,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,100500,628,1409,287,299,72,266,32600,7200,29400,6940,300,7.2,10,9,16.0,1128,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,100500,613,1409,299,130,0,130,15000,0,15000,5410,310,11.3,10,10,16.0,1128,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-5.0,46,100600,533,1409,288,259,290,149,27600,28200,16800,3100,300,7.7,8,8,16.0,2438,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-5.0,48,100600,392,1409,292,107,38,97,11800,3400,10900,2580,320,10.3,10,9,16.0,1311,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-5.0,48,100700,202,1409,286,71,147,50,7500,9100,6200,930,300,7.2,8,8,16.0,1433,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-4.4,48,100800,20,623,289,7,23,6,0,0,0,0,300,7.7,8,8,16.0,1433,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-4.4,48,100800,0,0,289,0,0,0,0,0,0,0,300,9.3,9,8,16.0,1433,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-4.4,48,100900,0,0,295,0,0,0,0,0,0,0,280,7.2,9,9,16.0,1676,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,101000,0,0,293,0,0,0,0,0,0,0,290,8.8,9,9,16.0,1829,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,101000,0,0,301,0,0,0,0,0,0,0,280,7.2,10,10,16.0,1524,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.9,51,101100,0,0,304,0,0,0,0,0,0,0,280,7.7,10,10,16.0,1463,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101100,0,0,290,0,0,0,0,0,0,0,290,6.2,8,8,16.0,1280,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,7,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101100,0,0,290,0,0,0,0,0,0,0,290,7.7,8,8,16.0,1341,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101100,0,0,280,0,0,0,0,0,0,0,280,7.2,5,5,16.0,1219,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.9,53,101100,0,0,272,0,0,0,0,0,0,0,280,6.2,3,3,16.0,77777,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,101200,0,0,273,0,0,0,0,0,0,0,280,5.7,4,4,16.0,77777,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,101200,0,0,273,0,0,0,0,0,0,0,270,5.2,4,4,16.0,77777,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101200,0,0,305,0,0,0,0,0,0,0,290,6.2,10,10,16.0,1097,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101300,0,0,288,0,0,0,0,0,0,0,300,7.7,8,8,16.0,1097,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101400,0,0,272,0,0,0,0,0,0,0,310,7.2,3,3,16.0,77777,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101400,81,1210,290,38,44,35,4100,2000,3900,720,310,6.7,8,8,16.0,975,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101500,288,1410,293,78,154,46,8500,11800,6100,810,310,8.2,8,8,16.0,1006,9,999999999,80,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,101600,458,1410,285,257,378,134,27200,35100,15700,2740,310,7.7,5,5,16.0,77777,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,101600,574,1410,289,293,480,98,30600,45700,12000,1930,310,8.8,5,5,16.0,77777,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.3,46,101500,626,1410,286,294,480,81,31400,47000,10500,1710,300,7.2,4,4,16.0,77777,9,999999999,89,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-2.8,48,101500,612,1410,287,355,528,126,38100,51700,15500,2490,310,6.7,4,4,16.0,1158,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-3.3,46,101500,532,1410,286,303,491,118,32100,46500,14500,2270,310,8.2,4,4,16.0,77777,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-3.9,45,101500,391,1410,282,238,631,63,24800,54600,9600,1180,300,7.2,3,3,16.0,77777,9,999999999,100,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-4.4,45,101500,202,1410,267,101,518,27,10400,36800,5100,540,320,5.2,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-4.4,48,101600,20,623,263,6,99,3,0,0,0,0,320,5.7,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,101700,0,0,259,0,0,0,0,0,0,0,320,4.1,0,0,16.0,77777,9,999999999,110,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,101700,0,0,267,0,0,0,0,0,0,0,300,5.7,2,2,16.0,77777,9,999999999,120,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.9,57,101800,0,0,257,0,0,0,0,0,0,0,300,3.6,0,0,16.0,77777,9,999999999,120,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-4.4,57,101800,0,0,255,0,0,0,0,0,0,0,310,4.6,0,0,16.0,77777,9,999999999,120,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,101800,0,0,248,0,0,0,0,0,0,0,350,2.6,0,0,16.0,77777,9,999999999,129,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,101800,0,0,248,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,129,0.0930,0,88,0.170,0.0,1.0 +1997,12,8,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,101700,0,0,248,0,0,0,0,0,0,0,10,2.6,0,0,16.0,7620,9,999999999,129,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-4.4,73,101700,0,0,247,0,0,0,0,0,0,0,0,0.0,1,1,14.4,7620,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101800,0,0,247,0,0,0,0,0,0,0,20,1.5,2,1,16.0,7620,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-4.4,76,101800,0,0,249,0,0,0,0,0,0,0,0,0.0,2,2,16.0,7620,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101700,0,0,246,0,0,0,0,0,0,0,360,2.1,2,1,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101700,0,0,243,0,0,0,0,0,0,0,10,3.1,0,0,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101700,0,0,249,0,0,0,0,0,0,0,10,2.6,2,2,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-3.9,79,101700,0,0,249,0,0,0,0,0,0,0,20,3.1,3,2,16.0,7620,9,999999999,160,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-3.9,76,101700,78,1210,251,27,163,16,2800,7900,2300,290,20,2.6,3,2,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,101800,285,1410,260,140,400,60,14300,30400,8100,1050,20,2.6,6,4,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.8,70,101700,455,1410,265,205,415,71,21500,37600,9300,1360,40,2.6,5,4,16.0,7010,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101700,571,1410,271,363,679,88,38200,64900,11800,1760,0,0.0,4,4,16.0,7010,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101600,624,1410,290,277,287,150,30000,29100,17100,3140,230,1.5,9,9,16.0,7010,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,101500,610,1410,293,249,137,189,27000,13700,21000,4510,0,0.0,9,9,16.0,7010,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,101500,531,1410,295,131,76,102,14600,7400,11800,2360,250,1.5,9,9,16.0,7010,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.7,63,101500,391,1410,295,147,83,124,16100,7500,14000,3110,210,2.1,9,9,16.0,7620,9,999999999,150,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101500,201,1410,300,56,22,53,6100,1600,5900,1270,0,0.0,9,9,16.0,4267,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101500,20,623,295,3,0,3,0,0,0,0,20,2.6,9,9,16.0,3353,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101500,0,0,278,0,0,0,0,0,0,0,20,3.1,7,6,16.0,7620,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,101500,0,0,281,0,0,0,0,0,0,0,40,2.1,8,8,16.0,7620,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101500,0,0,290,0,0,0,0,0,0,0,50,2.1,9,9,16.0,3048,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101500,0,0,298,0,0,0,0,0,0,0,50,2.1,10,10,16.0,2896,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101500,0,0,298,0,0,0,0,0,0,0,0,0.0,10,10,16.0,2743,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101500,0,0,298,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1402,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,9,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101400,0,0,298,0,0,0,0,0,0,0,40,1.5,10,10,16.0,1341,9,999999999,139,0.0930,0,88,0.170,0.0,1.0 +1997,12,10,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101400,0,0,298,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1219,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101400,0,0,284,0,0,0,0,0,0,0,0,0.0,8,8,16.0,3658,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101400,0,0,298,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1280,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101300,0,0,298,0,0,0,0,0,0,0,50,1.5,10,10,16.0,1829,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101200,0,0,300,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1829,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,101200,0,0,299,0,0,0,0,0,0,0,50,2.6,10,10,16.0,1676,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101300,0,0,301,0,0,0,0,0,0,0,70,1.5,10,10,16.0,1676,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101200,75,1187,293,16,41,13,1800,1500,1700,210,50,2.1,9,9,16.0,1676,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,101300,282,1411,303,46,0,46,5300,0,5300,1760,0,0.0,10,10,16.0,1676,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,101300,452,1411,306,85,0,85,9800,0,9800,3400,60,2.6,10,10,14.4,1524,9,999999999,129,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101200,569,1411,308,142,0,142,16200,0,16200,5550,60,2.6,10,10,12.8,3353,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.0,64,101000,622,1411,307,126,0,126,14600,0,14600,5320,60,3.1,10,10,12.9,600,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,0.0,73,100900,609,1411,306,123,0,123,14300,0,14300,5170,30,4.1,10,10,11.2,640,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,100800,530,1411,297,104,0,104,12000,0,12000,4260,30,3.1,10,10,8.0,488,9,999999999,120,0.0920,0,88,0.170,1.0,1.0 +1997,12,10,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100700,390,1411,298,59,0,59,6900,0,6900,2400,50,5.2,10,10,6.4,213,9,999999999,120,0.0920,0,88,0.170,1.0,1.0 +1997,12,10,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,100700,201,1411,298,25,0,25,2900,0,2900,970,60,5.7,10,10,6.4,213,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100500,20,623,298,2,0,2,0,0,0,0,40,6.2,10,10,8.0,213,9,999999999,120,0.0920,0,88,0.170,2.0,1.0 +1997,12,10,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100500,0,0,298,0,0,0,0,0,0,0,40,6.2,10,10,8.0,213,9,999999999,120,0.0920,0,88,0.170,1.0,1.0 +1997,12,10,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,2.2,100,100600,0,0,298,0,0,0,0,0,0,0,40,5.2,10,10,11.2,274,9,999999999,120,0.0920,0,88,0.170,2.0,1.0 +1997,12,10,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100600,0,0,298,0,0,0,0,0,0,0,40,6.2,10,10,14.4,213,9,999999999,120,0.0920,0,88,0.170,1.0,1.0 +1997,12,10,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100500,0,0,298,0,0,0,0,0,0,0,40,7.2,10,10,12.8,274,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100500,0,0,298,0,0,0,0,0,0,0,40,6.2,10,10,16.0,274,9,999999999,120,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.7,96,100600,0,0,298,0,0,0,0,0,0,0,50,7.2,10,10,16.0,274,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,10,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,100600,0,0,297,0,0,0,0,0,0,0,10,5.2,10,10,11.2,274,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,100700,0,0,291,0,0,0,0,0,0,0,360,5.2,10,10,9.6,335,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,100700,0,0,294,0,0,0,0,0,0,0,10,4.6,10,10,14.4,366,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,100900,0,0,294,0,0,0,0,0,0,0,10,5.2,10,10,16.0,305,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,100900,0,0,294,0,0,0,0,0,0,0,10,5.2,10,10,16.0,366,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101100,0,0,294,0,0,0,0,0,0,0,30,4.1,10,10,16.0,427,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101200,0,0,294,0,0,0,0,0,0,0,20,3.6,10,10,16.0,427,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,101300,0,0,294,0,0,0,0,0,0,0,40,4.6,10,10,12.8,396,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,101400,73,1164,294,10,0,10,1200,0,1200,380,40,4.6,10,10,11.2,366,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101500,279,1411,291,34,0,34,4000,0,4000,1360,30,4.6,10,10,16.0,366,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,101600,450,1411,294,62,0,62,7300,0,7300,2620,40,4.6,10,10,16.0,305,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,101600,566,1411,293,101,0,101,11800,0,11800,4280,60,5.2,10,10,16.0,427,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.1,81,101600,620,1411,293,96,0,96,11400,0,11400,4260,50,4.6,10,10,16.0,366,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,101700,607,1411,292,111,0,111,13000,0,13000,4760,40,4.6,10,10,16.0,488,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101700,529,1411,288,92,0,92,10700,0,10700,3860,50,3.6,10,10,16.0,610,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101800,390,1411,288,60,0,60,7000,0,7000,2430,30,4.1,10,10,16.0,610,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,101800,202,1411,288,33,0,33,3800,0,3800,1220,40,5.2,10,10,16.0,610,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,101900,21,623,288,2,0,2,0,0,0,0,40,4.6,10,10,14.4,549,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.8,76,102000,0,0,286,0,0,0,0,0,0,0,30,2.6,10,10,16.0,549,9,999999999,110,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.7,83,102000,0,0,287,0,0,0,0,0,0,0,50,3.1,10,10,9.6,579,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.7,83,102000,0,0,287,0,0,0,0,0,0,0,40,3.1,10,10,14.4,732,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,102000,0,0,288,0,0,0,0,0,0,0,50,2.6,10,10,16.0,853,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,102000,0,0,288,0,0,0,0,0,0,0,60,2.1,10,10,16.0,853,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.2,77,102000,0,0,289,0,0,0,0,0,0,0,40,2.6,10,10,16.0,823,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,11,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.7,77,102000,0,0,292,0,0,0,0,0,0,0,20,2.1,10,10,14.4,640,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-1.1,87,101900,0,0,288,0,0,0,0,0,0,0,20,3.6,10,10,4.0,335,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.1,84,101900,0,0,290,0,0,0,0,0,0,0,10,3.6,10,10,16.0,732,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.1,81,101900,0,0,293,0,0,0,0,0,0,0,20,3.6,10,10,16.0,853,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101800,0,0,291,0,0,0,0,0,0,0,10,4.1,10,10,11.2,732,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,101700,0,0,291,0,0,0,0,0,0,0,20,4.1,10,10,11.2,701,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101700,0,0,294,0,0,0,0,0,0,0,30,4.6,10,10,14.4,762,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101700,0,0,294,0,0,0,0,0,0,0,20,3.6,10,10,14.4,640,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101700,70,1141,297,12,0,12,1400,0,1400,450,10,3.1,10,10,12.8,579,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101700,276,1411,297,48,0,48,5500,0,5500,1810,20,3.6,10,10,12.8,518,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101600,447,1411,300,49,0,49,5900,0,5900,2140,10,2.6,10,10,12.8,183,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101600,564,1411,303,67,0,67,8100,0,8100,3030,330,3.6,10,10,6.4,183,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101600,618,1411,303,76,0,76,9200,0,9200,3490,350,3.6,10,10,11.2,183,9,999999999,100,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101500,606,1411,303,106,0,106,12400,0,12400,4580,320,3.6,10,10,6.4,427,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,101400,528,1411,306,73,0,73,8700,0,8700,3190,340,3.1,10,10,12.8,274,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,2.2,82,101400,390,1411,302,101,50,87,11100,4400,9800,2360,320,2.1,9,9,12.8,1311,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,101400,202,1411,302,49,12,47,5400,200,5400,1590,300,5.7,9,9,14.4,488,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,101400,21,623,290,3,0,3,0,0,0,0,270,4.6,8,8,16.0,853,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101400,0,0,279,0,0,0,0,0,0,0,280,4.1,5,5,16.0,77777,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101400,0,0,272,0,0,0,0,0,0,0,280,6.2,2,2,16.0,77777,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.0,82,101400,0,0,270,0,0,0,0,0,0,0,280,3.6,3,3,16.0,77777,9,999999999,89,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101400,0,0,258,0,0,0,0,0,0,0,300,4.1,0,0,16.0,77777,9,999999999,80,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101400,0,0,269,0,0,0,0,0,0,0,280,4.6,3,3,16.0,77777,9,999999999,80,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,101400,0,0,283,0,0,0,0,0,0,0,270,4.6,8,8,16.0,1097,9,999999999,80,0.0920,0,88,0.170,0.0,1.0 +1997,12,12,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,101400,0,0,300,0,0,0,0,0,0,0,270,4.6,10,10,16.0,914,9,999999999,80,0.0920,0,88,0.170,0.0,1.0 +1997,12,13,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,101300,0,0,297,0,0,0,0,0,0,0,280,4.6,10,10,16.0,914,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,101300,0,0,293,0,0,0,0,0,0,0,270,6.2,10,10,16.0,853,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,101400,0,0,293,0,0,0,0,0,0,0,270,5.2,10,10,16.0,853,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.9,64,101300,0,0,276,0,0,0,0,0,0,0,290,4.6,8,8,16.0,853,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,101300,0,0,275,0,0,0,0,0,0,0,310,5.7,8,8,16.0,853,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,101300,0,0,275,0,0,0,0,0,0,0,300,5.2,8,8,16.0,914,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,101300,0,0,272,0,0,0,0,0,0,0,270,3.6,8,8,16.0,1036,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,101300,68,1118,273,18,53,15,2000,1900,1900,250,250,5.2,8,8,16.0,1036,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,101400,273,1412,262,152,490,57,15500,36700,8300,1000,260,6.7,5,5,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-4.4,59,101300,445,1412,267,279,687,62,28600,61800,9000,1180,280,6.2,5,5,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.2,-4.8,53,101300,562,1412,269,321,498,122,34100,47800,14900,2370,270,5.2,4,4,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.6,49,101100,617,1412,266,355,645,73,37300,62200,10000,1540,260,7.7,3,3,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.1,45,101100,605,1412,268,291,527,65,31500,51600,9300,1380,250,6.2,3,3,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.0,50,101000,528,1412,290,184,101,146,20100,9800,16400,3380,250,6.2,10,9,16.0,3048,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101000,390,1412,295,41,0,41,4900,0,4900,1760,270,8.2,10,10,16.0,3048,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-6.1,47,101000,202,1412,286,50,22,46,5400,1600,5200,1140,280,8.2,10,9,16.0,3658,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.6,51,101000,21,623,285,3,17,3,0,0,0,0,280,6.2,9,9,16.0,3658,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.6,51,101000,0,0,271,0,0,0,0,0,0,0,280,5.7,7,6,16.0,3658,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101100,0,0,295,0,0,0,0,0,0,0,260,7.2,10,10,16.0,3658,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101000,0,0,295,0,0,0,0,0,0,0,280,6.7,10,10,16.0,3048,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101000,0,0,295,0,0,0,0,0,0,0,270,6.7,10,10,16.0,3048,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,101000,0,0,288,0,0,0,0,0,0,0,270,5.7,9,9,16.0,4267,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-4.4,55,101000,0,0,296,0,0,0,0,0,0,0,260,6.2,10,10,16.0,1250,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,13,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-5.0,54,101000,0,0,293,0,0,0,0,0,0,0,290,7.2,10,10,16.0,1189,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.7,46,101000,0,0,291,0,0,0,0,0,0,0,280,7.7,10,10,16.0,1250,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.7,48,101000,0,0,250,0,0,0,0,0,0,0,280,5.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.7,48,101000,0,0,250,0,0,0,0,0,0,0,280,6.2,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.1,55,100900,0,0,247,0,0,0,0,0,0,0,270,5.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-6.1,55,101000,0,0,247,0,0,0,0,0,0,0,270,5.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.6,58,101000,0,0,247,0,0,0,0,0,0,0,260,7.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,101100,0,0,246,0,0,0,0,0,0,0,260,7.2,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,101100,66,1118,248,21,138,13,2300,6500,1900,240,280,6.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.0,56,101100,270,1412,252,141,510,43,14600,38700,7200,790,280,7.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.0,50,101100,442,1412,258,274,689,58,28300,62100,8800,1140,270,7.7,0,0,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-5.6,42,101000,560,1412,275,357,635,105,37000,59800,13200,2030,270,9.3,3,3,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-5.6,41,100900,616,1412,277,397,650,114,41300,62400,14000,2260,280,8.8,3,3,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-5.6,39,100900,604,1412,282,374,622,108,39000,59600,13400,2140,290,10.3,4,4,16.0,1524,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-3.3,53,101000,527,1412,278,257,392,111,27400,37100,13500,2120,310,10.3,4,4,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-7.2,37,101100,390,1412,276,222,361,122,23300,31500,14500,2490,300,10.3,4,4,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-9.4,33,101200,203,1412,267,83,315,38,8500,20900,5500,680,310,9.3,3,3,16.0,77777,9,999999999,69,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-11.7,30,101300,21,624,258,4,32,3,0,0,0,0,310,9.3,3,3,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-11.1,33,101500,0,0,246,0,0,0,0,0,0,0,310,8.8,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-12.8,32,101400,0,0,239,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-16.1,24,101500,0,0,234,0,0,0,0,0,0,0,310,7.2,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-16.7,24,101600,0,0,231,0,0,0,0,0,0,0,310,6.2,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-16.7,25,101600,0,0,229,0,0,0,0,0,0,0,300,7.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-17.2,25,101700,0,0,227,0,0,0,0,0,0,0,300,5.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,14,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-17.2,25,101800,0,0,227,0,0,0,0,0,0,0,300,7.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-16.7,28,101900,0,0,226,0,0,0,0,0,0,0,290,7.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-13.3,38,102000,0,0,229,0,0,0,0,0,0,0,310,8.2,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.1,46,101900,0,0,231,0,0,0,0,0,0,0,310,7.7,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-10.6,51,101900,0,0,229,0,0,0,0,0,0,0,340,5.2,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-10.0,54,101900,0,0,230,0,0,0,0,0,0,0,330,6.2,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-10.0,56,102000,0,0,228,0,0,0,0,0,0,0,360,3.6,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-10.0,59,101900,0,0,226,0,0,0,0,0,0,0,330,2.6,0,0,16.0,77777,9,999999999,80,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-8.9,56,102000,64,1094,247,21,122,14,2300,5700,1900,260,340,2.1,5,5,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.9,49,102100,268,1412,249,134,482,43,14000,36400,7000,790,360,2.1,3,3,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-8.9,47,102100,440,1412,251,265,597,79,27400,53200,10800,1470,0,0.0,3,3,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,102000,559,1412,245,377,800,61,40000,76200,9700,1310,290,2.6,0,0,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-6.7,48,101900,614,1412,250,425,828,65,45300,80200,10200,1430,220,5.7,0,0,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-6.7,46,101800,604,1412,252,416,822,64,44200,79400,10100,1400,230,7.2,0,0,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-5.6,47,101800,527,1412,258,350,781,58,37000,73600,9300,1230,250,6.7,0,0,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-6.1,44,101700,391,1412,259,236,683,47,24600,60000,7900,960,230,6.2,0,0,16.0,77777,9,999999999,89,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-5.0,48,101700,204,1412,260,99,460,32,9900,32500,5200,590,230,6.7,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,101700,22,647,259,6,71,3,0,0,0,0,230,6.7,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101800,0,0,258,0,0,0,0,0,0,0,230,7.2,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,258,0,0,0,0,0,0,0,230,8.2,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,258,0,0,0,0,0,0,0,220,5.7,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,258,0,0,0,0,0,0,0,230,6.7,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,258,0,0,0,0,0,0,0,240,7.2,0,0,16.0,77777,9,999999999,100,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,0,0,258,0,0,0,0,0,0,0,240,7.7,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,15,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,101800,0,0,257,0,0,0,0,0,0,0,240,5.7,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,101700,0,0,253,0,0,0,0,0,0,0,250,4.6,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,101800,0,0,249,0,0,0,0,0,0,0,220,3.1,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-3.9,72,101800,0,0,245,0,0,0,0,0,0,0,230,4.6,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.2,83,101800,0,0,246,0,0,0,0,0,0,0,230,4.1,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-2.2,80,101800,0,0,249,0,0,0,0,0,0,0,260,2.6,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-2.8,79,101800,0,0,246,0,0,0,0,0,0,0,230,3.6,0,0,16.0,77777,9,999999999,110,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-2.8,83,101800,0,0,244,0,0,0,0,0,0,0,220,3.1,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.7,77,101900,62,1071,253,15,22,14,1700,1000,1700,290,220,4.1,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-1.1,67,101900,265,1412,264,111,260,63,11600,19000,8100,1150,220,3.6,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101900,438,1412,267,233,453,93,24800,40600,12100,1730,230,4.1,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.8,51,101800,557,1412,269,330,551,113,34000,51600,13600,2140,230,4.6,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-3.9,42,101700,613,1412,274,379,590,122,39100,56400,14500,2380,230,4.6,0,0,16.0,77777,9,999999999,120,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-4.4,37,101600,603,1412,278,370,583,120,38100,55500,14300,2330,230,5.7,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.3,38,101500,527,1412,283,303,522,108,32400,49400,13800,2060,230,5.2,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-3.9,35,101500,391,1412,285,196,402,85,20700,34600,11100,1570,240,5.2,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.8,42,101400,205,1412,280,76,178,51,8100,11100,6500,950,230,3.6,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-3.3,44,101400,22,647,275,3,4,3,0,0,0,0,210,2.1,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101400,0,0,267,0,0,0,0,0,0,0,200,2.6,0,0,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.8,49,101400,0,0,280,0,0,0,0,0,0,0,220,3.6,2,2,16.0,77777,9,999999999,129,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-1.7,61,101400,0,0,271,0,0,0,0,0,0,0,220,4.1,1,1,16.0,77777,9,999999999,139,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101400,0,0,273,0,0,0,0,0,0,0,240,3.6,1,1,16.0,77777,9,999999999,139,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101400,0,0,268,0,0,0,0,0,0,0,220,4.1,0,0,16.0,77777,9,999999999,139,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.2,58,101300,0,0,265,0,0,0,0,0,0,0,230,3.6,0,0,16.0,77777,9,999999999,139,0.0910,0,88,0.170,0.0,1.0 +1997,12,16,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101200,0,0,261,0,0,0,0,0,0,0,230,4.1,0,0,16.0,77777,9,999999999,139,0.0910,0,88,0.170,0.0,1.0 +1997,12,17,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101200,0,0,258,0,0,0,0,0,0,0,210,3.1,0,0,16.0,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,101200,0,0,257,0,0,0,0,0,0,0,240,3.1,0,0,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,101200,0,0,254,0,0,0,0,0,0,0,200,3.1,0,0,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,101100,0,0,253,0,0,0,0,0,0,0,250,3.1,0,0,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,101000,0,0,254,0,0,0,0,0,0,0,220,2.1,0,0,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.7,80,101000,0,0,256,0,0,0,0,0,0,0,250,2.6,1,1,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101000,0,0,260,0,0,0,0,0,0,0,250,2.1,1,1,16.0,77777,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101100,60,1048,264,21,201,10,2400,10800,1700,230,270,2.6,1,1,16.0,7620,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,101100,263,1413,268,142,592,32,14800,46300,6100,660,260,2.6,0,0,16.0,7620,9,999999999,150,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101100,436,1413,278,276,755,43,29300,68400,8000,1010,220,3.1,0,0,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-4.4,33,101000,556,1413,290,365,801,50,38600,75800,8700,1200,270,2.6,1,1,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-6.7,24,101000,612,1413,294,395,785,54,41700,75300,8900,1300,310,4.6,1,1,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-5.0,28,100900,603,1413,296,396,805,53,41900,77000,8900,1280,310,3.6,1,1,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-3.9,31,100900,528,1413,297,337,773,48,35700,72500,8400,1150,280,5.2,1,1,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,12.2,-3.3,33,100900,392,1413,292,238,714,40,25200,63200,7600,930,330,5.7,0,0,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-3.9,36,101000,206,1413,292,101,410,41,10300,27300,6300,720,320,6.2,2,2,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-2.2,45,101100,23,648,292,7,64,4,0,0,0,0,320,6.7,6,3,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101100,0,0,290,0,0,0,0,0,0,0,320,4.6,6,3,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-2.2,48,101200,0,0,288,0,0,0,0,0,0,0,330,5.7,6,3,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.8,49,101200,0,0,280,0,0,0,0,0,0,0,330,6.2,5,2,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101300,0,0,276,0,0,0,0,0,0,0,340,3.6,3,2,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101300,0,0,264,0,0,0,0,0,0,0,340,4.6,0,0,16.0,7620,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101400,0,0,262,0,0,0,0,0,0,0,340,4.6,0,0,16.0,7620,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,17,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,101400,0,0,256,0,0,0,0,0,0,0,340,3.1,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.3,65,101400,0,0,253,0,0,0,0,0,0,0,340,3.1,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.9,64,101500,0,0,251,0,0,0,0,0,0,0,350,2.6,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-3.3,67,101500,0,0,252,0,0,0,0,0,0,0,350,2.1,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,101500,0,0,249,0,0,0,0,0,0,0,340,3.6,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,101500,0,0,248,0,0,0,0,0,0,0,350,3.1,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.9,69,101600,0,0,247,0,0,0,0,0,0,0,340,3.1,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.9,69,101600,0,0,247,0,0,0,0,0,0,0,340,3.6,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.3,70,101700,58,1048,249,19,154,11,2100,7100,1700,210,330,3.1,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101800,261,1413,258,137,541,37,14000,41800,6200,710,340,4.1,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,101900,435,1413,262,271,715,51,28400,64500,8400,1050,330,4.1,0,0,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-3.9,49,101800,554,1413,266,372,793,61,39400,75400,9600,1300,10,5.2,0,0,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-4.4,45,101700,612,1413,279,411,604,149,43200,59000,17600,2990,360,3.1,5,3,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-5.0,40,101700,603,1413,280,363,559,124,37400,53100,14600,2390,360,3.1,5,2,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-4.4,40,101600,528,1413,290,242,293,132,25900,28500,15200,2680,260,3.1,8,5,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-2.2,54,101700,393,1413,269,232,664,48,24200,58400,7900,970,240,4.6,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101700,207,1413,268,100,458,33,10400,31000,5800,610,230,4.1,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101700,23,671,258,6,72,3,0,0,0,0,230,5.2,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-3.3,60,101800,0,0,258,0,0,0,0,0,0,0,240,4.6,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.7,71,101800,0,0,257,0,0,0,0,0,0,0,220,3.1,0,0,16.0,77777,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,101800,0,0,260,0,0,0,0,0,0,0,220,4.6,0,0,16.0,77777,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-0.6,78,101800,0,0,258,0,0,0,0,0,0,0,230,4.6,1,0,16.0,77777,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,101800,0,0,271,0,0,0,0,0,0,0,230,5.2,7,5,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,101700,0,0,268,0,0,0,0,0,0,0,220,3.6,7,4,16.0,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,18,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,101700,0,0,271,0,0,0,0,0,0,0,240,4.6,8,4,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,101600,0,0,279,0,0,0,0,0,0,0,240,4.1,9,7,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-1.1,75,101700,0,0,279,0,0,0,0,0,0,0,240,5.2,8,7,16.0,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,101700,0,0,285,0,0,0,0,0,0,0,230,5.2,9,8,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,101600,0,0,274,0,0,0,0,0,0,0,230,5.7,6,6,16.0,3658,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101600,0,0,277,0,0,0,0,0,0,0,230,6.2,6,6,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101600,0,0,276,0,0,0,0,0,0,0,230,6.7,7,6,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,101600,0,0,277,0,0,0,0,0,0,0,240,4.6,7,6,16.0,3353,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101600,57,1025,281,17,79,13,1900,3000,1800,220,240,4.6,7,7,14.4,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.7,58,101600,259,1413,282,150,567,46,15500,42000,7700,830,230,4.1,4,4,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,-1.1,59,101600,433,1413,279,268,637,73,27900,56600,10400,1370,220,5.2,3,2,14.4,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,-1.1,53,101500,553,1413,311,163,86,129,18000,8500,14600,3010,230,5.2,9,9,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,101400,611,1413,304,275,190,193,29900,19000,21600,4610,230,8.2,8,7,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.1,45,101300,603,1413,321,345,203,258,36700,20000,28100,6150,230,5.7,10,9,16.0,7010,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,-2.2,40,101300,529,1413,322,231,201,155,25100,19500,17700,3590,260,8.2,10,9,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,-1.7,43,101300,394,1413,308,196,307,111,20800,26900,13200,2220,260,5.7,7,7,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-1.1,47,101300,208,1413,318,63,32,58,6900,2400,6500,1380,270,5.7,9,9,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,101400,24,671,318,4,17,4,0,0,0,0,270,7.2,9,9,16.0,7620,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,101400,0,0,293,0,0,0,0,0,0,0,260,7.7,3,3,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,-0.6,49,101400,0,0,301,0,0,0,0,0,0,0,270,6.7,5,5,16.0,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.1,55,101500,0,0,291,0,0,0,0,0,0,0,250,4.1,5,5,16.0,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101400,0,0,290,0,0,0,0,0,0,0,280,5.2,3,3,16.0,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.2,56,101400,0,0,283,0,0,0,0,0,0,0,240,5.2,5,5,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,1.7,83,101400,0,0,271,0,0,0,0,0,0,0,240,5.2,1,1,16.0,77777,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,19,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.1,73,101400,0,0,289,0,0,0,0,0,0,0,230,6.2,8,6,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,101400,0,0,291,0,0,0,0,0,0,0,230,5.7,8,7,16.0,4267,9,999999999,139,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.7,76,101400,0,0,293,0,0,0,0,0,0,0,230,6.2,8,7,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,1.7,79,101400,0,0,302,0,0,0,0,0,0,0,250,4.1,9,9,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,1.1,73,101400,0,0,292,0,0,0,0,0,0,0,260,3.1,8,7,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,0.0,67,101400,0,0,275,0,0,0,0,0,0,0,330,2.6,2,1,16.0,4267,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-0.6,72,101400,0,0,267,0,0,0,0,0,0,0,330,2.6,2,1,16.0,77777,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,101500,0,0,260,0,0,0,0,0,0,0,260,2.6,1,1,16.0,77777,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101400,55,1025,256,20,195,9,2200,10400,1600,210,220,1.5,0,0,9.6,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,1.7,73,101400,257,1413,273,136,578,31,14200,44900,6000,640,240,2.1,1,0,11.2,7620,9,999999999,129,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101400,432,1413,281,274,756,43,29000,68300,8100,1000,290,2.1,0,0,12.8,77777,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,101300,552,1413,298,350,630,104,36300,59100,13100,2000,230,2.6,4,4,14.4,7620,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,101200,611,1413,311,292,145,229,31300,14400,25100,5470,240,2.1,8,8,16.0,3048,9,999999999,120,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,1.1,56,101100,603,1413,314,230,178,153,25200,17800,17600,3640,240,3.6,8,8,14.4,3353,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,1.1,54,101100,529,1413,316,212,121,166,22900,11700,18500,3840,340,5.2,8,8,14.4,3353,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101200,395,1413,324,78,0,78,8900,0,8900,3010,340,4.6,10,10,16.0,1158,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,0.6,60,101300,210,1413,321,36,0,36,4100,0,4100,1320,330,6.2,10,10,16.0,1219,9,999999999,110,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101300,25,695,315,3,0,3,0,0,0,0,310,6.2,10,10,16.0,1219,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101400,0,0,300,0,0,0,0,0,0,0,310,6.2,8,8,16.0,2743,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-1.1,61,101500,0,0,284,0,0,0,0,0,0,0,310,6.2,5,5,16.0,77777,9,999999999,100,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101600,0,0,276,0,0,0,0,0,0,0,320,6.2,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,101600,0,0,276,0,0,0,0,0,0,0,320,6.2,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,101700,0,0,273,0,0,0,0,0,0,0,330,5.2,3,3,16.0,77777,9,999999999,89,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101800,0,0,272,0,0,0,0,0,0,0,340,5.2,3,3,16.0,77777,9,999999999,80,0.0900,0,88,0.170,0.0,1.0 +1997,12,20,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-5.0,52,101800,0,0,269,0,0,0,0,0,0,0,360,4.1,4,4,16.0,77777,9,999999999,80,0.0900,0,88,0.170,0.0,1.0 +1997,12,21,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-7.8,42,101800,0,0,262,0,0,0,0,0,0,0,340,7.7,3,3,16.0,77777,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-7.8,44,102000,0,0,260,0,0,0,0,0,0,0,340,6.7,3,3,16.0,77777,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.3,42,102100,0,0,260,0,0,0,0,0,0,0,350,5.2,3,3,16.0,77777,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.2,50,102100,0,0,257,0,0,0,0,0,0,0,30,3.6,3,3,16.0,77777,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-6.7,57,102200,0,0,255,0,0,0,0,0,0,0,20,4.1,4,4,16.0,77777,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.8,52,102300,0,0,254,0,0,0,0,0,0,0,10,4.1,4,4,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,102300,0,0,249,0,0,0,0,0,0,0,360,4.6,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-7.8,54,102400,54,1001,250,16,99,10,1700,4500,1400,190,20,2.6,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-7.8,52,102500,255,1414,252,133,455,51,13600,33200,7600,900,360,5.2,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-8.3,47,102600,430,1414,254,259,547,92,26400,47900,11800,1650,350,6.2,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.3,44,102500,551,1414,258,258,338,125,27200,32300,14500,2430,10,5.2,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.9,40,102500,611,1414,259,399,610,135,40900,57900,15800,2570,330,5.2,3,3,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-10.0,35,102500,603,1414,249,415,806,71,43600,77500,10400,1490,320,5.7,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-10.6,32,102500,530,1414,251,352,764,65,36700,71700,9700,1330,360,4.6,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-11.7,29,102500,396,1414,250,239,663,53,24600,58100,8300,1030,340,5.7,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-12.2,29,102500,211,1414,247,102,436,36,10500,29700,6000,650,360,4.1,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-11.7,32,102600,26,695,244,6,62,4,0,0,0,0,10,2.6,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-11.1,34,102700,0,0,244,0,0,0,0,0,0,0,10,1.5,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-10.0,45,102700,0,0,237,0,0,0,0,0,0,0,40,1.5,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-9.4,45,102800,0,0,240,0,0,0,0,0,0,0,10,3.6,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.1,42,102800,0,0,235,0,0,0,0,0,0,0,20,3.1,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-12.2,40,102800,0,0,232,0,0,0,0,0,0,0,10,3.1,0,0,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-13.3,36,102900,0,0,235,0,0,0,0,0,0,0,20,3.6,1,1,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,21,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.2,46,102900,0,0,234,0,0,0,0,0,0,0,360,3.1,3,2,16.0,77777,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-12.8,44,102900,0,0,235,0,0,0,0,0,0,0,340,3.1,5,3,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.8,42,102900,0,0,237,0,0,0,0,0,0,0,360,3.6,8,3,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-12.8,42,102900,0,0,237,0,0,0,0,0,0,0,10,3.1,7,3,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.3,-13.3,42,102900,0,0,237,0,0,0,0,0,0,0,10,3.6,5,4,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102800,0,0,235,0,0,0,0,0,0,0,20,4.1,6,4,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-3.9,-12.8,46,102900,0,0,233,0,0,0,0,0,0,0,20,2.6,4,3,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-11.7,56,102900,0,0,230,0,0,0,0,0,0,0,40,2.1,4,3,16.0,7620,9,999999999,50,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-11.7,53,103000,53,1001,234,14,58,11,1600,2200,1500,190,360,2.1,5,4,16.0,7620,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-11.1,49,103000,254,1414,236,116,316,59,12100,22500,8000,1070,20,2.6,5,2,16.0,7620,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-11.1,46,103000,429,1414,241,199,350,92,21000,31100,11500,1710,30,5.7,4,3,16.0,7620,9,999999999,60,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-10.0,47,103000,551,1414,252,325,489,134,34100,46600,15800,2620,50,3.6,7,6,16.0,7620,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-10.0,41,102800,610,1414,258,310,374,148,32600,36500,16800,2970,30,2.1,8,6,16.0,7010,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-10.0,41,102800,604,1414,279,145,0,145,16600,0,16600,5810,0,0.0,10,10,16.0,7010,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-10.0,39,102600,531,1414,281,122,0,122,13900,0,13900,4800,80,4.6,10,10,16.0,7010,9,999999999,69,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.3,44,102600,398,1414,262,159,98,131,17100,8700,14600,2910,70,3.1,8,5,16.0,4267,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.6,55,102600,213,1414,264,96,187,68,10000,11900,8200,1340,60,2.6,7,5,16.0,4267,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,102500,27,719,292,3,0,3,0,0,0,0,50,3.1,10,10,16.0,1981,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,102400,0,0,292,0,0,0,0,0,0,0,60,4.6,10,10,14.4,2743,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.6,53,102400,0,0,290,0,0,0,0,0,0,0,20,3.6,10,10,16.0,1829,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.0,-2.0,73,102300,0,0,293,0,0,0,0,0,0,0,50,3.6,10,10,14.5,810,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,102200,0,0,293,0,0,0,0,0,0,0,50,4.6,10,10,14.4,762,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,102100,0,0,296,0,0,0,0,0,0,0,60,5.2,10,10,16.0,701,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,22,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.6,89,102000,0,0,297,0,0,0,0,0,0,0,60,5.2,10,10,11.2,610,9,999999999,100,0.0890,0,88,0.170,1.0,1.0 +1997,12,22,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101700,0,0,300,0,0,0,0,0,0,0,80,5.7,10,10,11.2,1158,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,23,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,101600,0,0,306,0,0,0,0,0,0,0,80,7.2,10,10,8.0,853,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,23,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,101400,0,0,306,0,0,0,0,0,0,0,80,8.8,10,10,9.6,335,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,101300,0,0,306,0,0,0,0,0,0,0,70,9.3,10,10,9.6,274,9,999999999,110,0.0890,0,88,0.170,2.0,1.0 +1997,12,23,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.8,93,101100,0,0,306,0,0,0,0,0,0,0,50,8.2,10,10,8.0,274,9,999999999,120,0.0890,0,88,0.170,1.0,1.0 +1997,12,23,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,2.2,96,101100,0,0,301,0,0,0,0,0,0,0,360,6.2,10,10,6.4,213,9,999999999,120,0.0890,0,88,0.170,5.0,1.0 +1997,12,23,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101000,0,0,303,0,0,0,0,0,0,0,20,9.3,10,10,8.0,244,9,999999999,120,0.0890,0,88,0.170,1.0,1.0 +1997,12,23,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101100,0,0,297,0,0,0,0,0,0,0,360,9.8,10,10,9.6,244,9,999999999,129,0.0890,0,88,0.170,2.0,1.0 +1997,12,23,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,101000,52,978,297,6,0,6,700,0,700,240,20,12.4,10,10,9.6,244,9,999999999,129,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,101000,252,1414,286,132,185,99,14000,13600,11600,2120,10,8.8,8,8,16.0,1402,9,999999999,129,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,1.7,89,101100,428,1414,303,63,0,63,7400,0,7400,2610,360,7.7,10,10,16.0,366,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.7,86,101100,550,1414,305,105,0,105,12200,0,12200,4360,360,7.2,10,10,16.0,427,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,1.1,82,101000,611,1414,305,120,0,120,14000,0,14000,5070,330,7.2,10,10,16.0,457,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101100,604,1414,301,119,0,119,13800,0,13800,5010,330,6.7,10,10,16.0,1006,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101100,532,1414,301,101,0,101,11700,0,11700,4170,330,6.2,10,10,16.0,945,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101100,399,1414,301,69,0,69,8000,0,8000,2750,340,5.7,10,10,16.0,853,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101200,215,1414,301,31,0,31,3600,0,3600,1180,330,4.6,10,10,16.0,762,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101300,28,719,301,3,0,3,0,0,0,0,340,3.6,10,10,16.0,610,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101400,0,0,304,0,0,0,0,0,0,0,320,5.2,10,10,16.0,762,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101400,0,0,304,0,0,0,0,0,0,0,320,5.7,10,10,16.0,579,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101400,0,0,275,0,0,0,0,0,0,0,350,4.1,4,4,16.0,77777,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,0.6,82,101500,0,0,287,0,0,0,0,0,0,0,340,4.1,8,8,16.0,2286,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101500,0,0,277,0,0,0,0,0,0,0,330,3.1,4,4,16.0,77777,9,999999999,120,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.6,79,101600,0,0,277,0,0,0,0,0,0,0,300,4.1,4,4,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,23,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101600,0,0,274,0,0,0,0,0,0,0,300,4.6,3,3,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101600,0,0,274,0,0,0,0,0,0,0,310,5.2,3,3,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,0.0,82,101600,0,0,270,0,0,0,0,0,0,0,290,3.1,3,3,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101700,0,0,275,0,0,0,0,0,0,0,300,4.1,4,4,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,101800,0,0,275,0,0,0,0,0,0,0,310,5.7,5,5,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101800,0,0,272,0,0,0,0,0,0,0,310,4.1,4,4,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,101900,0,0,285,0,0,0,0,0,0,0,300,3.6,8,8,16.0,1097,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,102000,0,0,277,0,0,0,0,0,0,0,30,3.6,6,6,16.0,1158,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-0.6,81,102100,51,978,269,14,44,12,1600,1400,1500,200,20,3.1,4,4,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-0.6,75,102200,251,1414,276,77,103,59,8500,7700,7100,1260,30,2.6,9,5,16.0,77777,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.7,66,102300,427,1414,277,174,72,153,19100,6600,17100,3770,20,5.2,5,5,16.0,4267,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.2,61,102200,550,1414,295,144,58,121,15800,5500,13600,3550,10,2.1,10,9,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-2.8,58,102200,611,1414,294,111,50,90,12300,4800,10300,2860,0,0.0,10,9,16.0,1036,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,102100,605,1414,297,323,45,303,34700,4700,32700,8450,330,2.6,9,9,16.0,1036,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,-2.8,55,102200,534,1414,290,194,104,154,21100,10100,17200,3570,350,2.1,8,8,16.0,1036,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,102100,401,1414,275,142,158,97,15200,14000,11200,1880,100,1.5,6,4,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,102100,217,1414,274,88,223,54,9100,14700,6900,980,180,3.1,6,4,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,102100,29,742,268,7,32,6,900,1000,800,100,160,2.1,7,3,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,102100,0,0,270,0,0,0,0,0,0,0,110,2.1,9,4,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-1.7,74,102000,0,0,270,0,0,0,0,0,0,0,90,2.6,9,5,16.0,7620,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.1,72,102100,0,0,277,0,0,0,0,0,0,0,130,2.1,10,6,16.0,5182,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,102000,0,0,277,0,0,0,0,0,0,0,130,3.1,9,6,16.0,4572,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-1.1,69,101900,0,0,288,0,0,0,0,0,0,0,130,3.1,10,8,16.0,4267,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,0.0,76,101900,0,0,303,0,0,0,0,0,0,0,90,2.6,10,10,16.0,792,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,24,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,101700,0,0,303,0,0,0,0,0,0,0,80,3.1,10,10,12.8,792,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,25,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,101500,0,0,312,0,0,0,0,0,0,0,110,5.7,10,10,14.4,2134,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,101400,0,0,316,0,0,0,0,0,0,0,90,4.6,10,10,8.0,549,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,25,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,101200,0,0,319,0,0,0,0,0,0,0,80,6.2,10,10,6.4,183,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,25,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.0,7.0,93,100900,0,0,330,0,0,0,0,0,0,0,100,8.7,10,10,1.6,90,9,999999999,110,0.0890,0,88,0.170,3.0,1.0 +1997,12,25,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,7.8,100,100800,0,0,330,0,0,0,0,0,0,0,100,8.2,10,10,3.2,122,9,999999999,110,0.0890,0,88,0.170,3.0,1.0 +1997,12,25,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,7.8,97,100600,0,0,332,0,0,0,0,0,0,0,90,8.8,10,10,9.6,122,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,25,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,8.3,96,100500,0,0,335,0,0,0,0,0,0,0,110,6.7,10,10,4.8,122,9,999999999,110,0.0890,0,88,0.170,2.0,1.0 +1997,12,25,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,100300,50,955,338,4,0,4,500,0,500,160,130,5.2,10,10,3.2,122,9,999999999,110,0.0890,0,88,0.170,1.0,1.0 +1997,12,25,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.6,10.0,96,100300,250,1414,345,29,0,29,3400,0,3400,1160,140,3.6,10,10,3.6,91,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,10.0,100,100300,427,1414,343,57,0,57,6700,0,6700,2400,250,2.1,10,10,0.3,0,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,8.3,100,100300,550,1414,332,78,0,78,9300,0,9300,3420,320,6.2,10,10,2.4,91,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.9,97,100200,611,1414,338,88,0,88,10500,0,10500,3930,290,5.2,10,10,2.4,91,9,999999999,110,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,8.3,93,100200,606,1414,338,105,0,105,12300,0,12300,4540,270,6.2,10,10,16.0,274,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,7.8,86,100200,535,1414,324,230,309,113,24500,29300,13300,2160,270,6.2,8,8,16.0,274,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,6.7,80,100300,403,1414,309,167,331,73,18000,28900,9700,1320,280,5.2,4,4,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,5.0,74,100400,219,1414,302,110,425,44,11200,29100,6700,770,260,6.7,3,3,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,4.4,71,100500,30,743,301,9,78,6,1000,3200,900,120,270,6.2,3,3,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,3.9,86,100600,0,0,275,0,0,0,0,0,0,0,240,3.6,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,4.4,73,100700,0,0,287,0,0,0,0,0,0,0,260,4.6,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.8,4.4,79,100800,0,0,282,0,0,0,0,0,0,0,260,5.2,0,0,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,3.9,80,100800,0,0,279,0,0,0,0,0,0,0,260,6.2,0,0,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.9,82,100800,0,0,289,0,0,0,0,0,0,0,230,6.2,3,3,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,3.9,82,100800,0,0,277,0,0,0,0,0,0,0,250,5.2,0,0,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,25,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,3.3,89,100800,0,0,282,0,0,0,0,0,0,0,220,4.1,3,3,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,100900,0,0,278,0,0,0,0,0,0,0,240,4.1,5,5,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,100800,0,0,315,0,0,0,0,0,0,0,250,3.6,10,10,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,100800,0,0,321,0,0,0,0,0,0,0,220,5.7,10,10,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,4.4,92,100800,0,0,316,0,0,0,0,0,0,0,240,3.1,10,10,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,3.9,89,100800,0,0,306,0,0,0,0,0,0,0,250,3.6,9,9,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,4.4,89,100900,0,0,318,0,0,0,0,0,0,0,220,4.1,10,10,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,4.4,85,101000,0,0,321,0,0,0,0,0,0,0,250,4.6,10,10,16.0,853,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,2.2,73,101000,49,955,303,11,52,8,1200,1900,1100,130,250,6.2,8,8,16.0,1829,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,0.6,65,101100,249,1414,291,118,444,39,12200,32600,6400,720,260,6.7,5,5,16.0,77777,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,1.1,60,101100,426,1414,298,255,620,68,26600,55000,9900,1290,250,7.2,5,5,16.0,77777,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,0.6,56,101000,550,1414,298,330,521,127,34800,49700,15400,2470,250,8.2,4,4,16.0,77777,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,9.4,0.0,52,101000,612,1414,312,279,259,166,29800,26100,18500,3540,260,8.2,8,8,16.0,1219,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,10.0,0.0,50,101000,607,1414,315,202,110,155,22300,11000,17500,3690,270,7.7,8,8,16.0,1341,9,999999999,80,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.9,-1.1,49,101000,537,1414,309,237,28,227,25800,2500,24900,6900,280,5.7,8,8,16.0,1463,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-1.7,48,101100,405,1414,306,133,88,108,14500,7900,12300,2400,300,9.3,8,8,16.0,1402,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,8.3,-0.6,53,101100,222,1414,307,75,143,52,7900,9400,6400,960,270,5.7,8,8,16.0,1402,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.7,52,101200,31,766,288,8,72,5,900,3000,800,100,260,8.8,4,4,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-0.6,59,101200,0,0,285,0,0,0,0,0,0,0,260,6.2,3,3,16.0,77777,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-0.6,57,101300,0,0,291,0,0,0,0,0,0,0,270,5.2,6,5,16.0,1372,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,7.2,-1.7,52,101300,0,0,301,0,0,0,0,0,0,0,260,7.7,8,8,16.0,1372,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.7,-2.2,52,101300,0,0,298,0,0,0,0,0,0,0,270,6.7,8,8,16.0,1494,9,999999999,89,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,-2.8,53,101300,0,0,280,0,0,0,0,0,0,0,270,6.2,4,4,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-3.3,55,101300,0,0,262,0,0,0,0,0,0,0,250,5.2,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,26,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101300,0,0,261,0,0,0,0,0,0,0,250,4.6,0,0,16.0,77777,9,999999999,100,0.0890,0,88,0.170,0.0,1.0 +1997,12,27,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.2,63,101300,0,0,266,0,0,0,0,0,0,0,270,3.6,2,1,16.0,7620,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,101200,0,0,271,0,0,0,0,0,0,0,300,4.6,4,3,16.0,7620,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-4.4,52,101200,0,0,272,0,0,0,0,0,0,0,280,4.1,6,4,16.0,7620,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101200,0,0,276,0,0,0,0,0,0,0,260,3.6,9,6,16.0,3962,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.3,57,101200,0,0,292,0,0,0,0,0,0,0,280,2.1,10,9,16.0,1463,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-3.9,55,101100,0,0,291,0,0,0,0,0,0,0,300,3.6,10,9,16.0,3048,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,-4.4,51,101200,0,0,301,0,0,0,0,0,0,0,340,2.1,10,10,16.0,2591,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101200,48,955,300,7,0,7,800,0,800,270,300,3.6,10,10,16.0,914,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,0.0,85,101300,248,1415,296,36,0,36,4200,0,4200,1390,240,2.1,10,10,12.8,549,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101200,426,1415,294,58,0,58,6900,0,6900,2430,320,1.5,10,10,11.2,335,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,101100,550,1415,294,83,0,83,9800,0,9800,3600,0,0.0,10,10,4.8,335,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,100900,613,1415,295,80,0,80,9600,0,9600,3630,0,0.0,10,10,4.0,183,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,100700,609,1415,295,95,0,95,11200,0,11200,4190,20,3.1,10,10,4.0,244,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,100600,539,1415,292,80,0,80,9500,0,9500,3460,40,3.6,10,10,4.0,244,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,100500,407,1415,292,55,0,55,6500,0,6500,2290,360,4.6,10,10,4.0,244,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,1.1,96,100500,224,1415,295,28,0,28,3300,0,3300,1090,10,6.2,10,10,4.0,244,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.0,1.0,93,100400,33,790,296,3,0,3,400,0,400,120,10,5.7,10,10,12.9,360,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,100200,0,0,294,0,0,0,0,0,0,0,10,7.2,10,10,14.4,366,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,100200,0,0,294,0,0,0,0,0,0,0,10,6.7,10,10,14.4,2286,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.6,96,100300,0,0,292,0,0,0,0,0,0,0,10,5.7,10,10,3.2,396,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100400,0,0,289,0,0,0,0,0,0,0,10,6.7,10,10,2.4,213,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100300,0,0,289,0,0,0,0,0,0,0,360,8.8,10,10,3.2,274,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100300,0,0,289,0,0,0,0,0,0,0,360,7.2,10,10,3.2,579,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,27,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,0.0,96,100200,0,0,289,0,0,0,0,0,0,0,350,6.2,10,10,6.4,488,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-1.1,84,100200,0,0,282,0,0,0,0,0,0,0,340,6.2,10,9,12.8,3048,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.7,77,100200,0,0,284,0,0,0,0,0,0,0,340,5.2,9,9,16.0,2591,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,100300,0,0,292,0,0,0,0,0,0,0,350,6.2,10,10,16.0,3353,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,100400,0,0,288,0,0,0,0,0,0,0,350,6.2,10,10,16.0,3353,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-3.9,67,100400,0,0,273,0,0,0,0,0,0,0,340,6.2,8,8,16.0,1829,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-4.4,64,100600,0,0,263,0,0,0,0,0,0,0,350,7.7,5,5,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.0,63,100700,0,0,257,0,0,0,0,0,0,0,340,5.2,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.6,60,100800,48,931,256,14,106,8,1500,4800,1200,160,340,6.2,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-5.0,61,100900,248,1415,259,121,402,51,12400,28900,7300,890,350,6.7,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,101000,425,1415,251,266,722,49,27900,64900,8300,1020,340,5.7,0,0,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-3.9,59,101100,550,1415,266,315,543,104,32600,50900,12700,1990,310,7.2,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-5.6,53,101000,613,1415,266,396,622,126,40800,59300,15000,2440,330,7.2,5,5,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-6.7,45,101100,610,1415,265,377,676,85,40000,65600,11500,1760,330,6.7,3,3,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-6.7,43,101100,540,1415,270,315,463,138,32900,43900,16000,2700,310,8.2,4,4,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-7.2,44,101200,410,1415,263,246,582,77,25300,50600,10600,1410,310,6.2,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-8.3,39,101300,227,1415,264,110,458,36,11400,32300,6200,660,290,4.1,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.3,42,101300,34,790,260,10,82,6,1100,3500,900,120,340,2.6,3,3,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-8.9,40,101400,0,0,253,0,0,0,0,0,0,0,20,2.1,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.3,44,101500,0,0,255,0,0,0,0,0,0,0,350,2.6,2,2,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-8.9,41,101600,0,0,251,0,0,0,0,0,0,0,360,2.1,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.8,48,101600,0,0,245,0,0,0,0,0,0,0,360,2.1,1,0,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-7.2,52,101700,0,0,249,0,0,0,0,0,0,0,30,2.1,1,1,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-6.7,62,101700,0,0,246,0,0,0,0,0,0,0,70,2.6,3,2,16.0,7620,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,28,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.2,-6.1,72,101800,0,0,243,0,0,0,0,0,0,0,70,2.6,3,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-6.7,72,101700,0,0,240,0,0,0,0,0,0,0,60,3.1,3,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.2,63,101700,0,0,244,0,0,0,0,0,0,0,60,2.6,3,2,16.0,7620,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-7.2,69,101700,0,0,244,0,0,0,0,0,0,0,10,1.5,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-7.2,63,101700,0,0,265,0,0,0,0,0,0,0,0,0.0,9,9,16.0,1067,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.0,-4.4,69,101700,0,0,282,0,0,0,0,0,0,0,300,2.1,10,10,16.0,1128,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-5.0,63,101700,0,0,284,0,0,0,0,0,0,0,0,0.0,10,10,16.0,1311,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.9,69,101700,0,0,285,0,0,0,0,0,0,0,80,1.5,10,10,16.0,1189,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-3.3,73,101600,47,931,286,6,0,6,700,0,700,230,60,3.1,10,10,16.0,1006,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-2.8,73,101700,247,1415,275,73,43,65,7900,3400,7300,1590,80,1.5,10,8,16.0,1524,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.8,65,101600,425,1415,296,88,0,88,10100,0,10100,3400,60,2.1,10,10,16.0,1402,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.8,63,101400,551,1415,298,118,0,118,13600,0,13600,4770,30,2.1,10,10,16.0,1402,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,-2.8,60,101200,614,1415,300,134,0,134,15500,0,15500,5530,50,4.6,10,10,16.0,1341,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-2.2,66,101000,612,1415,298,133,0,133,15300,0,15300,5490,40,4.1,10,10,16.0,1158,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,-1.7,69,100800,543,1415,299,116,0,116,13300,0,13300,4670,30,6.2,10,10,16.0,884,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,2.2,89,100700,412,1415,306,85,0,85,9700,0,9700,3270,50,5.2,10,10,16.0,457,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,100500,230,1415,313,36,0,36,4200,0,4200,1360,60,5.2,10,10,6.4,274,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,29,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100200,36,813,319,3,0,3,400,0,400,120,60,9.8,10,10,9.6,213,9,999999999,100,0.0880,0,88,0.170,2.0,1.0 +1997,12,29,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,6.1,5.6,97,100000,0,0,319,0,0,0,0,0,0,0,50,10.3,10,10,11.2,274,9,999999999,100,0.0880,0,88,0.170,2.0,1.0 +1997,12,29,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.6,5.0,96,99700,0,0,316,0,0,0,0,0,0,0,40,8.2,10,10,8.0,305,9,999999999,100,0.0880,0,88,0.170,2.0,1.0 +1997,12,29,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,99400,0,0,313,0,0,0,0,0,0,0,30,11.3,10,10,6.4,305,9,999999999,100,0.0880,0,88,0.170,8.0,1.0 +1997,12,29,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,98800,0,0,310,0,0,0,0,0,0,0,30,14.9,10,10,6.4,305,9,999999999,110,0.0880,0,88,0.170,4.0,1.0 +1997,12,29,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,98300,0,0,310,0,0,0,0,0,0,0,40,14.4,10,10,6.4,366,9,999999999,110,0.0880,0,88,0.170,3.0,1.0 +1997,12,29,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,3.9,97,97900,0,0,310,0,0,0,0,0,0,0,50,13.9,10,10,8.0,396,9,999999999,110,0.0880,0,88,0.170,3.0,1.0 +1997,12,29,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,97900,0,0,313,0,0,0,0,0,0,0,320,8.2,10,10,9.6,213,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,98000,0,0,313,0,0,0,0,0,0,0,310,7.2,10,10,16.0,213,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.8,97,98100,0,0,289,0,0,0,0,0,0,0,220,2.6,8,8,16.0,1097,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.3,2.2,92,98100,0,0,303,0,0,0,0,0,0,0,220,7.2,10,10,16.0,366,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,3.9,3.3,96,98100,0,0,307,0,0,0,0,0,0,0,220,5.2,10,10,12.8,335,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,5.0,4.4,96,98100,0,0,313,0,0,0,0,0,0,0,210,10.8,10,10,12.8,213,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,4.4,2.8,89,98000,0,0,309,0,0,0,0,0,0,0,220,11.3,10,10,16.0,488,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.7,92,98100,0,0,300,0,0,0,0,0,0,0,220,11.8,10,10,14.4,305,9,999999999,139,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,1.1,89,98200,47,931,300,6,0,6,700,0,700,230,220,13.9,10,10,16.0,396,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,98200,247,1415,297,29,0,29,3400,0,3400,1150,220,12.4,10,10,14.4,396,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,1.1,92,98300,426,1415,297,58,0,58,6900,0,6900,2430,230,14.4,10,10,16.0,396,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.6,92,98200,552,1415,294,83,0,83,9800,0,9800,3600,230,14.4,10,10,3.2,396,9,999999999,129,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,98200,616,1415,294,115,0,115,13400,0,13400,4920,240,12.4,10,10,9.6,549,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,0.0,88,98300,613,1415,286,130,48,109,14300,4600,12300,3400,240,14.9,9,9,14.4,640,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,98500,545,1415,293,98,0,98,11400,0,11400,4110,230,14.9,10,10,14.4,701,9,999999999,120,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-1.1,81,98700,415,1415,293,67,0,67,7800,0,7800,2720,240,16.5,10,10,14.4,610,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,0.0,92,98800,233,1415,291,34,0,34,4000,0,4000,1300,250,11.3,10,10,4.0,579,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-0.6,84,99000,37,837,293,5,0,5,600,0,600,200,250,10.3,10,10,14.4,732,9,999999999,110,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-2.2,74,99100,0,0,292,0,0,0,0,0,0,0,250,9.8,10,10,16.0,2591,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.8,-2.2,68,99300,0,0,296,0,0,0,0,0,0,0,240,11.3,10,10,16.0,3962,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.2,71,99400,0,0,272,0,0,0,0,0,0,0,230,9.8,7,6,16.0,77777,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-2.8,68,99500,0,0,279,0,0,0,0,0,0,0,240,10.8,9,8,16.0,6706,9,999999999,100,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,2.2,-3.9,62,99700,0,0,284,0,0,0,0,0,0,0,240,10.8,9,9,16.0,3962,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-4.4,61,99800,0,0,264,0,0,0,0,0,0,0,250,11.3,4,4,16.0,77777,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,30,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.7,-5.0,58,99800,0,0,275,0,0,0,0,0,0,0,250,11.3,8,8,16.0,1829,9,999999999,89,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,1,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,1.1,-7.2,50,99900,0,0,284,0,0,0,0,0,0,0,260,10.3,10,10,16.0,1981,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,2,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,0.6,-8.3,47,100000,0,0,258,0,0,0,0,0,0,0,260,10.3,5,5,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,3,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-8.3,52,100100,0,0,251,0,0,0,0,0,0,0,280,8.8,4,4,16.0,77777,9,999999999,80,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,4,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-8.9,51,100100,0,0,251,0,0,0,0,0,0,0,260,8.8,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,5,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-9.4,49,100300,0,0,259,0,0,0,0,0,0,0,260,8.2,8,8,16.0,1524,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,6,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.0,49,100400,0,0,246,0,0,0,0,0,0,0,250,10.3,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,7,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,100500,0,0,247,0,0,0,0,0,0,0,260,10.3,5,5,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,8,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-10.6,46,100600,46,931,245,12,67,8,1200,3000,1100,160,270,11.3,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,9,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-11.1,44,100800,246,1415,244,73,200,38,7900,14200,5400,660,250,11.3,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,10,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.7,40,100800,426,1415,244,203,400,83,21700,35500,11000,1520,270,9.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,11,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.7,40,100900,552,1415,246,318,523,114,34000,50000,14400,2190,240,11.3,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,12,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-0.6,-12.2,37,100900,617,1415,258,238,83,202,26100,8200,22600,5650,250,11.3,8,8,16.0,1341,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,13,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-11.7,40,101000,615,1415,246,345,577,94,36400,55900,12000,1920,300,10.3,4,4,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,14,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.1,-12.2,38,101100,547,1415,244,333,513,134,34900,48800,15900,2620,300,10.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,15,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-1.7,-13.9,34,101200,418,1415,240,207,462,70,21400,40600,9400,1310,310,8.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,16,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-2.8,-14.4,36,101400,236,1415,236,107,333,51,11200,22900,7300,920,310,8.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,17,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-4.4,-15.6,37,101600,39,861,229,8,34,7,1000,1200,900,120,300,8.2,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,18,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.0,-15.6,39,101900,0,0,227,0,0,0,0,0,0,0,310,8.2,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,19,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-5.6,-15.0,43,102000,0,0,225,0,0,0,0,0,0,0,300,7.7,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,6.0 +1997,12,31,20,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.1,-17.8,35,102100,0,0,219,0,0,0,0,0,0,0,330,8.2,2,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,21,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-6.7,-17.8,37,102200,0,0,219,0,0,0,0,0,0,0,320,8.8,3,3,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,22,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.2,-18.9,35,102300,0,0,215,0,0,0,0,0,0,0,310,12.4,2,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,23,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-7.8,-18.3,38,102400,0,0,213,0,0,0,0,0,0,0,310,8.8,2,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 +1997,12,31,24,0,?9?9?9?9E0?9?9?9?9?9?9?9?9?9?9?9?9?9?9?9*9*9?9?9?9,-8.3,-18.9,38,102500,0,0,211,0,0,0,0,0,0,0,320,9.3,2,2,16.0,77777,9,999999999,69,0.0880,0,88,0.170,0.0,1.0 From 26f692a2a0b93ef449d0f6c5a7dca9b3cac2fc73 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Fri, 14 Jul 2023 16:05:48 -0400 Subject: [PATCH 027/161] Initial Fix --- src/EnergyPlus/SimAirServingZones.cc | 22 +++++++++---------- src/EnergyPlus/SimAirServingZones.hh | 4 ++-- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 12 +++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index 51b4b832b28..a3c116bb78b 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2088,19 +2088,19 @@ void InitAirLoops(EnergyPlusData &state, bool const FirstHVACIteration) // TRUE for (int AirLoopNum = 1; AirLoopNum <= numPrimaryAirSys; ++AirLoopNum) { auto &thisPrimaryAirSys = state.dataAirSystemsData->PrimaryAirSystems(AirLoopNum); auto &thisAirToZoneNodeInfo = state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum); - state.dataSimAirServingZones->SumZoneDesFlow = 0.0; + //state.dataSimAirServingZones->SumZoneDesFlow = 0.0; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply = thisPrimaryAirSys.DesignVolFlowRate * state.dataEnvrn->StdRhoAir; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesReturnFrac = thisPrimaryAirSys.DesignReturnFlowFraction; - for (int ZoneInSysIndex = 1; ZoneInSysIndex <= thisAirToZoneNodeInfo.NumZonesCooled; ++ZoneInSysIndex) { - state.dataSimAirServingZones->TUInNode = thisAirToZoneNodeInfo.TermUnitCoolInletNodes(ZoneInSysIndex); - state.dataSimAirServingZones->SumZoneDesFlow += state.dataLoopNodes->Node(state.dataSimAirServingZones->TUInNode).MassFlowRateMax; - } - if (state.dataSimAirServingZones->SumZoneDesFlow > VerySmallMassFlow) { - state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = - state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply / state.dataSimAirServingZones->SumZoneDesFlow; - } else { - state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = 1.0; - } + //for (int ZoneInSysIndex = 1; ZoneInSysIndex <= thisAirToZoneNodeInfo.NumZonesCooled; ++ZoneInSysIndex) { + // state.dataSimAirServingZones->TUInNode = thisAirToZoneNodeInfo.TermUnitCoolInletNodes(ZoneInSysIndex); + // state.dataSimAirServingZones->SumZoneDesFlow += state.dataLoopNodes->Node(state.dataSimAirServingZones->TUInNode).MassFlowRateMax; + //} + //if (state.dataSimAirServingZones->SumZoneDesFlow > VerySmallMassFlow) { + // state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = + // state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply / state.dataSimAirServingZones->SumZoneDesFlow; + //} else { + // state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = 1.0; + //} } for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { diff --git a/src/EnergyPlus/SimAirServingZones.hh b/src/EnergyPlus/SimAirServingZones.hh index 3a476f92b3e..fb0a75dade2 100644 --- a/src/EnergyPlus/SimAirServingZones.hh +++ b/src/EnergyPlus/SimAirServingZones.hh @@ -237,7 +237,7 @@ struct SimAirServingZonesData : BaseGlobalStruct Real64 Vot = 0.0; // Required outdoor air intake at primary AHU per ASHRAE std 62.1 int TUInNode = 0; // inlet node number of a terminal unit - Real64 SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system + //Real64 SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s Real64 MassFlowSetToler; int salIterMax = 0; // Maximum of iteration counters across all air loops @@ -305,7 +305,7 @@ struct SimAirServingZonesData : BaseGlobalStruct this->Vot = 0.0; this->TUInNode = 0; // inlet node number of a terminal unit - this->SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system + //this->SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s this->salIterMax = 0; // Maximum of iteration counters across all air loops this->salIterTot = 0; // Aggregated number of iterations across all air loops diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index c70a8930724..3f959d69160 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -691,13 +691,13 @@ namespace ZoneAirLoopEquipmentManager { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; AirLoopNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirLoopNum; - if (AirLoopNum > 0) { - DesFlowRatio = state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio; - } else { - DesFlowRatio = 1.0; - } + //if (AirLoopNum > 0) { + // DesFlowRatio = state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio; + //} else { + // DesFlowRatio = 1.0; + //} MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * - state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax * DesFlowRatio, + state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail, 0.0); if (MassFlowRateMaxAvail > MassFlowRateUpStreamLeakMax) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; From 1a2071c5ef92e5dba1cf8c3670a71e20bd2fc357 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 18 Jul 2023 16:51:45 -0400 Subject: [PATCH 028/161] Cleanup and removed unused variables --- src/EnergyPlus/DataAirLoop.hh | 1 - src/EnergyPlus/SimAirServingZones.cc | 11 ----------- src/EnergyPlus/SimAirServingZones.hh | 2 -- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 10 ++-------- 4 files changed, 2 insertions(+), 22 deletions(-) diff --git a/src/EnergyPlus/DataAirLoop.hh b/src/EnergyPlus/DataAirLoop.hh index 760ee2b2874..172fc455a17 100644 --- a/src/EnergyPlus/DataAirLoop.hh +++ b/src/EnergyPlus/DataAirLoop.hh @@ -163,7 +163,6 @@ namespace DataAirLoop { // Members Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) - Real64 SysToZoneDesFlowRatio = 0.0; // System design flow divided by the sum of the zone design flows Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index a3c116bb78b..5e3e1493026 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2088,19 +2088,8 @@ void InitAirLoops(EnergyPlusData &state, bool const FirstHVACIteration) // TRUE for (int AirLoopNum = 1; AirLoopNum <= numPrimaryAirSys; ++AirLoopNum) { auto &thisPrimaryAirSys = state.dataAirSystemsData->PrimaryAirSystems(AirLoopNum); auto &thisAirToZoneNodeInfo = state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum); - //state.dataSimAirServingZones->SumZoneDesFlow = 0.0; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply = thisPrimaryAirSys.DesignVolFlowRate * state.dataEnvrn->StdRhoAir; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesReturnFrac = thisPrimaryAirSys.DesignReturnFlowFraction; - //for (int ZoneInSysIndex = 1; ZoneInSysIndex <= thisAirToZoneNodeInfo.NumZonesCooled; ++ZoneInSysIndex) { - // state.dataSimAirServingZones->TUInNode = thisAirToZoneNodeInfo.TermUnitCoolInletNodes(ZoneInSysIndex); - // state.dataSimAirServingZones->SumZoneDesFlow += state.dataLoopNodes->Node(state.dataSimAirServingZones->TUInNode).MassFlowRateMax; - //} - //if (state.dataSimAirServingZones->SumZoneDesFlow > VerySmallMassFlow) { - // state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = - // state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply / state.dataSimAirServingZones->SumZoneDesFlow; - //} else { - // state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = 1.0; - //} } for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { diff --git a/src/EnergyPlus/SimAirServingZones.hh b/src/EnergyPlus/SimAirServingZones.hh index fb0a75dade2..7fd6c5b8a68 100644 --- a/src/EnergyPlus/SimAirServingZones.hh +++ b/src/EnergyPlus/SimAirServingZones.hh @@ -237,7 +237,6 @@ struct SimAirServingZonesData : BaseGlobalStruct Real64 Vot = 0.0; // Required outdoor air intake at primary AHU per ASHRAE std 62.1 int TUInNode = 0; // inlet node number of a terminal unit - //Real64 SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s Real64 MassFlowSetToler; int salIterMax = 0; // Maximum of iteration counters across all air loops @@ -305,7 +304,6 @@ struct SimAirServingZonesData : BaseGlobalStruct this->Vot = 0.0; this->TUInNode = 0; // inlet node number of a terminal unit - //this->SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s this->salIterMax = 0; // Maximum of iteration counters across all air loops this->salIterTot = 0; // Aggregated number of iterations across all air loops diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 3f959d69160..20cee68bda2 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -669,11 +669,11 @@ namespace ZoneAirLoopEquipmentManager { int AirDistCompNum; int InNodeNum; // air distribution unit inlet node int OutNodeNum; // air distribution unit outlet node - int AirLoopNum(0); // index of air loop + //int AirLoopNum(0); // index of air loop Real64 MassFlowRateMaxAvail; // max avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateMinAvail; // min avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateUpStreamLeakMax; // max upstream leak flow rate [kg/s] - Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate + //Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) @@ -690,12 +690,6 @@ namespace ZoneAirLoopEquipmentManager { if (InNodeNum > 0) { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; - AirLoopNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirLoopNum; - //if (AirLoopNum > 0) { - // DesFlowRatio = state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio; - //} else { - // DesFlowRatio = 1.0; - //} MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail, 0.0); From 66834ed1cf98c76ccd4f16a6c0aeae7f6dc855f0 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Fri, 21 Jul 2023 10:00:09 -0400 Subject: [PATCH 029/161] Clang format and cleanup of unused variables --- src/EnergyPlus/DataAirLoop.hh | 38 +++++++++---------- src/EnergyPlus/SimAirServingZones.hh | 16 ++++---- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 2 - 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/EnergyPlus/DataAirLoop.hh b/src/EnergyPlus/DataAirLoop.hh index 172fc455a17..2b49d996f33 100644 --- a/src/EnergyPlus/DataAirLoop.hh +++ b/src/EnergyPlus/DataAirLoop.hh @@ -161,25 +161,25 @@ namespace DataAirLoop { struct AirLoopFlowData // Derived type for air loop flow information { // Members - Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] - Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) - Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager - Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] - Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] - Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step - Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] - Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] - Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] - Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust - Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] - Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] - Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] - Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] - Real64 FanPLR = 1.0; // Operating PLR of air loop fan - Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate - Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] - bool FlowError = false; // error flag for flow error message - Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum + Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] + Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) + Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager + Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] + Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] + Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step + Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] + Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] + Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] + Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust + Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] + Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] + Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] + Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] + Real64 FanPLR = 1.0; // Operating PLR of air loop fan + Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate + Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] + bool FlowError = false; // error flag for flow error message + Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum }; enum class ControllerKind diff --git a/src/EnergyPlus/SimAirServingZones.hh b/src/EnergyPlus/SimAirServingZones.hh index 7fd6c5b8a68..1ae772667ae 100644 --- a/src/EnergyPlus/SimAirServingZones.hh +++ b/src/EnergyPlus/SimAirServingZones.hh @@ -303,14 +303,14 @@ struct SimAirServingZonesData : BaseGlobalStruct this->Vou = 0.0; this->Vot = 0.0; - this->TUInNode = 0; // inlet node number of a terminal unit - this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s - this->salIterMax = 0; // Maximum of iteration counters across all air loops - this->salIterTot = 0; // Aggregated number of iterations across all air loops - this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops - this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop - this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop - this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations + this->TUInNode = 0; // inlet node number of a terminal unit + this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s + this->salIterMax = 0; // Maximum of iteration counters across all air loops + this->salIterTot = 0; // Aggregated number of iterations across all air loops + this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops + this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop + this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop + this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations this->AirLoopConvergedFlagSAL = false; this->DoWarmRestartFlagSAL = false; this->WarmRestartStatusSAL = DataHVACControllers::ControllerWarmRestart::None; diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 20cee68bda2..508c716844f 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -669,11 +669,9 @@ namespace ZoneAirLoopEquipmentManager { int AirDistCompNum; int InNodeNum; // air distribution unit inlet node int OutNodeNum; // air distribution unit outlet node - //int AirLoopNum(0); // index of air loop Real64 MassFlowRateMaxAvail; // max avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateMinAvail; // min avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateUpStreamLeakMax; // max upstream leak flow rate [kg/s] - //Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) From bffbea1dbd94eac57e3e0bd2ab157505bdeb0b5b Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Fri, 21 Jul 2023 10:02:07 -0400 Subject: [PATCH 030/161] More code cleanup --- src/EnergyPlus/SimAirServingZones.cc | 1 - src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index 5e3e1493026..cc7d6dbde08 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2087,7 +2087,6 @@ void InitAirLoops(EnergyPlusData &state, bool const FirstHVACIteration) // TRUE // calculate the ratio of air loop design flow to the sum of the zone design flows for (int AirLoopNum = 1; AirLoopNum <= numPrimaryAirSys; ++AirLoopNum) { auto &thisPrimaryAirSys = state.dataAirSystemsData->PrimaryAirSystems(AirLoopNum); - auto &thisAirToZoneNodeInfo = state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum); state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply = thisPrimaryAirSys.DesignVolFlowRate * state.dataEnvrn->StdRhoAir; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesReturnFrac = thisPrimaryAirSys.DesignReturnFlowFraction; } diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 508c716844f..cd33e395060 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -688,9 +688,8 @@ namespace ZoneAirLoopEquipmentManager { if (InNodeNum > 0) { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; - MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * - state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail, - 0.0); + MassFlowRateUpStreamLeakMax = + max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); if (MassFlowRateMaxAvail > MassFlowRateUpStreamLeakMax) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail = MassFlowRateMaxAvail - MassFlowRateUpStreamLeakMax; From bfd6ce7402c7add8cb0ab56fa4d2a95d8d7fd401 Mon Sep 17 00:00:00 2001 From: rraustad Date: Tue, 25 Jul 2023 16:22:00 -0400 Subject: [PATCH 031/161] Protect no heating coil case and update unit test --- src/EnergyPlus/UnitarySystem.cc | 47 +++++++------- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 78 +++++++++++++++++++++-- 2 files changed, 99 insertions(+), 26 deletions(-) diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 904a3eea405..fff6d05ffd1 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -8330,14 +8330,14 @@ namespace UnitarySystems { SupHeaterLoad, CompressorONFlag); Real64 CpAir = Psychrometrics::PsyCpAirFnW(state.dataLoopNodes->Node(this->CoolCoilInletNodeNum).HumRat); + Real64 heatCoildT = + (this->m_HeatCoilExists) + ? (state.dataLoopNodes->Node(this->HeatCoilOutletNodeNum).Temp - state.dataLoopNodes->Node(this->HeatCoilInletNodeNum).Temp) + : 0.0; Real64 CoolingOnlySensibleOutput = state.dataLoopNodes->Node(this->CoolCoilInletNodeNum).MassFlowRate * CpAir * - (state.dataLoopNodes->Node(this->NodeNumOfControlledZone).Temp - state.dataLoopNodes->Node(this->CoolCoilOutletNodeNum).Temp); - if (this->m_HeatCoilExists) { - CoolingOnlySensibleOutput -= - state.dataLoopNodes->Node(this->CoolCoilInletNodeNum).MassFlowRate * CpAir * - (state.dataLoopNodes->Node(this->HeatCoilOutletNodeNum).Temp - state.dataLoopNodes->Node(this->HeatCoilInletNodeNum).Temp); - } + ((state.dataLoopNodes->Node(this->NodeNumOfControlledZone).Temp - state.dataLoopNodes->Node(this->CoolCoilOutletNodeNum).Temp) - + heatCoildT); if (state.dataUnitarySystems->QToHeatSetPt < 0.0) { // Calculate the reheat coil load wrt the heating setpoint temperature. Reheat coil picks up // the entire excess sensible cooling (DX cooling coil and impact of outdoor air). @@ -8371,20 +8371,19 @@ namespace UnitarySystems { int constexpr MaxIter(100); // maximum number of iterations // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int SpeedNum; // multi-speed coil speed number - Real64 SensOutputOn; // sensible output at PLR = 1 [W] - Real64 LatOutputOn; // latent output at PLR = 1 [W] - Real64 TempLoad; // represents either a sensible or latent load [W] - Real64 TempSysOutput; // represents either a sensible or latent capacity [W] - Real64 TempSensOutput; // iterative sensible capacity [W] - Real64 TempLatOutput; // iterative latent capacity [W] - Real64 TempMinPLR; // iterative minimum PLR - Real64 TempMaxPLR; // iterative maximum PLR - Real64 CoolingOnlySensibleOutput; // use to calculate dehumidification induced heating [W] - Real64 CpAir; // specific heat of air [J/kg_C] - Real64 FullLoadAirOutletTemp; // saved full load outlet air temperature [C] - Real64 FullLoadAirOutletHumRat; // saved full load outlet air humidity ratio [kg/kg] - Real64 NoLoadOutletTemp; // outlet temp of system with coils off [C] + int SpeedNum; // multi-speed coil speed number + Real64 SensOutputOn; // sensible output at PLR = 1 [W] + Real64 LatOutputOn; // latent output at PLR = 1 [W] + Real64 TempLoad; // represents either a sensible or latent load [W] + Real64 TempSysOutput; // represents either a sensible or latent capacity [W] + Real64 TempSensOutput; // iterative sensible capacity [W] + Real64 TempLatOutput; // iterative latent capacity [W] + Real64 TempMinPLR; // iterative minimum PLR + Real64 TempMaxPLR; // iterative maximum PLR + Real64 CpAir; // specific heat of air [J/kg_C] + Real64 FullLoadAirOutletTemp; // saved full load outlet air temperature [C] + Real64 FullLoadAirOutletHumRat; // saved full load outlet air humidity ratio [kg/kg] + Real64 NoLoadOutletTemp; // outlet temp of system with coils off [C] std::string CompName = this->Name; int OutletNode = this->AirOutNode; @@ -9933,10 +9932,14 @@ namespace UnitarySystems { FullSensibleOutput = TempSensOutput; CpAir = Psychrometrics::PsyCpAirFnW(state.dataLoopNodes->Node(this->CoolCoilInletNodeNum).HumRat); - CoolingOnlySensibleOutput = + Real64 heatCoildT = + (this->m_HeatCoilExists) + ? (state.dataLoopNodes->Node(this->HeatCoilOutletNodeNum).Temp - state.dataLoopNodes->Node(this->HeatCoilInletNodeNum).Temp) + : 0.0; + Real64 CoolingOnlySensibleOutput = state.dataLoopNodes->Node(this->CoolCoilInletNodeNum).MassFlowRate * CpAir * ((state.dataLoopNodes->Node(this->NodeNumOfControlledZone).Temp - state.dataLoopNodes->Node(this->CoolCoilOutletNodeNum).Temp) - - (state.dataLoopNodes->Node(this->HeatCoilOutletNodeNum).Temp - state.dataLoopNodes->Node(this->HeatCoilInletNodeNum).Temp)); + heatCoildT); if (state.dataUnitarySystems->QToHeatSetPt < 0.0) { // Calculate the reheat coil load wrt the heating setpoint temperature. Reheat coil picks up // the entire excess sensible cooling (DX cooling coil and impact of outdoor air). diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index 71a713b1e63..81b800793f2 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -6047,7 +6047,7 @@ Curve:Biquadratic, state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired = 1000.0; // heating load state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputReqToCoolSP = 2000.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputReqToHeatSP = 1000.0; - state->dataZoneEnergyDemand->ZoneSysMoistureDemand(ControlZoneNum).RemainingOutputReqToDehumidSP = -0.00001; + state->dataZoneEnergyDemand->ZoneSysMoistureDemand(ControlZoneNum).RemainingOutputReqToDehumidSP = -0.0006; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).SequencedOutputRequired.allocate(1); state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).SequencedOutputRequiredToCoolingSP.allocate(1); @@ -6108,7 +6108,7 @@ Curve:Biquadratic, EXPECT_NEAR(state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired, thisSys->m_SensibleLoadMet, 0.01); // Watts EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, thisSys->MaxHeatAirMassFlow * thisSys->m_PartLoadFrac); // cycling fan EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, state->dataLoopNodes->Node(OutletNode).MassFlowRate); - EXPECT_DOUBLE_EQ(thisSys->m_MoistureLoadPredicted, 0.0); // dehumidification control type = none so MoistureLoad reset o 0 + EXPECT_DOUBLE_EQ(thisSys->m_MoistureLoadPredicted, 0.0); // dehumidification control type = none so MoistureLoad reset to 0 state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired = -1000.0; // cooling load state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).OutputRequiredToCoolingSP = -1000.0; @@ -6124,7 +6124,8 @@ Curve:Biquadratic, // set zone temperature state->dataLoopNodes->Node(ControlZoneNum).Temp = 24.0; // set zone temperature during cooling season used to determine system delivered capacity - state->dataEnvrn->OutDryBulbTemp = 35.0; // initialize weather + state->dataLoopNodes->Node(ControlZoneNum).HumRat = 0.01; // set zone humrat during cooling season used to determine system delivered capacity + state->dataEnvrn->OutDryBulbTemp = 35.0; // initialize weather state->dataEnvrn->OutHumRat = 0.1; state->dataEnvrn->OutBaroPress = 101325.0; state->dataEnvrn->OutWetBulbTemp = 30.0; @@ -6187,8 +6188,13 @@ Curve:Biquadratic, EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, thisSys->MaxCoolAirMassFlow * thisSys->m_PartLoadFrac); // cycling fan EXPECT_DOUBLE_EQ(state->dataLoopNodes->Node(InletNode).MassFlowRate, state->dataLoopNodes->Node(OutletNode).MassFlowRate); + state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired = 1000.0; // heating load + state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).OutputRequiredToCoolingSP = 2000.0; + state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).OutputRequiredToHeatingSP = 1000.0; // turn on dehumidification control and check that moisture load is < 0 + FirstHVACIteration = false; // heating coil calculations only happen when FirstHVACIteration = false thisSys->m_DehumidControlType_Num = UnitarySys::DehumCtrlType::CoolReheat; + thisSys->m_Humidistat = true; thisSys->m_RunOnLatentLoad = true; thisSys->simulate(*state, thisSys->Name, @@ -6202,7 +6208,71 @@ Curve:Biquadratic, ZoneEquipment, sensOut, latOut); - EXPECT_LT(thisSys->m_MoistureLoadPredicted, 0.0); // dehumidification control type = CoolReheat so MoistureLoad < 0 + // test model performance + EXPECT_NEAR(state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired, 1000.0, 0.0001); // Watts + EXPECT_NEAR(state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired, thisSys->m_SensibleLoadMet, 11.0); // Watts + // test simulate function return value for sysOutputRequired + EXPECT_NEAR(state->dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlZoneNum).RemainingOutputRequired, sensOut, 11.0); // Watts + Real64 HgAir = Psychrometrics::PsyHgAirFnWTdb(state->dataLoopNodes->Node(ControlZoneNum).HumRat, state->dataLoopNodes->Node(ControlZoneNum).Temp); + EXPECT_NEAR( + state->dataZoneEnergyDemand->ZoneSysMoistureDemand(ControlZoneNum).RemainingOutputReqToDehumidSP, -0.0006, 0.00001); // kg moisture per sec + EXPECT_NEAR(state->dataZoneEnergyDemand->ZoneSysMoistureDemand(ControlZoneNum).RemainingOutputReqToDehumidSP * HgAir, latOut, 55.0); // Watts + + // not sure why the above control is loose, i.e., 11 W on sensible and 55 W on latent. + EXPECT_NEAR(sensOut, 1010.6, 0.1); // Watts + EXPECT_NEAR(latOut, -1477.7, 0.1); // Watts + EXPECT_NEAR(state->dataUnitarySystems->QToHeatSetPt, 1000.0, 0.1); // heating load + EXPECT_NEAR(thisSys->m_MoistureLoadPredicted, -1467.1, 0.1); // dehumidification control type = CoolReheat so MoistureLoad < 0 + + // results using hand calcs + Real64 CpAir = Psychrometrics::PsyCpAirFnW(state->dataLoopNodes->Node(ControlZoneNum).HumRat); + Real64 DeliveredSensibleCapacity = state->dataLoopNodes->Node(thisSys->AirOutNode).MassFlowRate * CpAir * + (state->dataLoopNodes->Node(thisSys->AirOutNode).Temp - state->dataLoopNodes->Node(ControlZoneNum).Temp); + EXPECT_NEAR(DeliveredSensibleCapacity, 1010.6, 0.001); // actual delivered capacity + EXPECT_NEAR(DeliveredSensibleCapacity, thisSys->m_SensibleLoadMet, 0.001); // Watts - heating + + Real64 RoomDeltaW = state->dataLoopNodes->Node(thisSys->AirOutNode).HumRat - state->dataLoopNodes->Node(ControlZoneNum).HumRat; + Real64 OutDeltaW = state->dataLoopNodes->Node(thisSys->CoolCoilOutletNodeNum).HumRat - state->dataLoopNodes->Node(ControlZoneNum).HumRat; + Real64 OutMassFlow = state->dataLoopNodes->Node(thisSys->AirOutNode).MassFlowRate; + Real64 LatentOutput = OutDeltaW * OutMassFlow * HgAir; + EXPECT_NEAR(OutDeltaW, -0.0003193, 0.0000001); + EXPECT_NEAR(OutDeltaW, RoomDeltaW, 0.0000001); + EXPECT_NEAR(LatentOutput, -1477.1, 0.1); + + Real64 ExcessSensibleCapacity = + state->dataLoopNodes->Node(thisSys->AirOutNode).MassFlowRate * CpAir * + (state->dataLoopNodes->Node(thisSys->CoolCoilOutletNodeNum).Temp - state->dataLoopNodes->Node(ControlZoneNum).Temp); + EXPECT_NEAR(ExcessSensibleCapacity, -17268.1, 0.1); + EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_HeatingCoilIndex).HeatingCoilRate, 0.0, 0.1); + EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_SuppHeatCoilIndex).HeatingCoilRate, 18268.1, 0.1); + Real64 ReheatNeded = sensOut - ExcessSensibleCapacity; + EXPECT_NEAR(ReheatNeded, 18268.1, 11.0); // same 11 watt difference as above, is this error due to tolerance? + + // remove heating coil to test cooling only application + thisSys->m_HeatCoilExists = false; + thisSys->m_HeatingCoilIndex = 0; + thisSys->HeatCoilInletNodeNum = 0; + thisSys->HeatCoilOutletNodeNum = 0; + thisSys->simulate(*state, + thisSys->Name, + FirstHVACIteration, + AirLoopNum, + CompIndex, + HeatActive, + CoolActive, + ZoneOAUnitNum, + OAUCoilOutTemp, + ZoneEquipment, + sensOut, + latOut); + Real64 SaveDeliveredSensibleCapacity = DeliveredSensibleCapacity; + DeliveredSensibleCapacity = state->dataLoopNodes->Node(thisSys->AirOutNode).MassFlowRate * CpAir * + (state->dataLoopNodes->Node(thisSys->AirOutNode).Temp - state->dataLoopNodes->Node(ControlZoneNum).Temp); + // same answers as above, wihtout heating coil present, and no crash + EXPECT_NEAR(DeliveredSensibleCapacity, SaveDeliveredSensibleCapacity, 0.0001); // actual delivered capacity + EXPECT_NEAR(DeliveredSensibleCapacity, 1010.6, 0.001); // actual delivered capacity + EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_SuppHeatCoilIndex).HeatingCoilRate, 18268.1, 0.1); // actual reheat load to meet SP + EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_SuppHeatCoilIndex).HeatingCoilRate, 18268.1, 0.1); } TEST_F(EnergyPlusFixture, UnitarySystemModel_VSDXCoilSizing) From 9676b2b444c398b3b5ed700e2c24e068f002d8aa Mon Sep 17 00:00:00 2001 From: rraustad Date: Tue, 25 Jul 2023 16:24:50 -0400 Subject: [PATCH 032/161] small correction to unit test --- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index 81b800793f2..318a42032e2 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -6272,7 +6272,7 @@ Curve:Biquadratic, EXPECT_NEAR(DeliveredSensibleCapacity, SaveDeliveredSensibleCapacity, 0.0001); // actual delivered capacity EXPECT_NEAR(DeliveredSensibleCapacity, 1010.6, 0.001); // actual delivered capacity EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_SuppHeatCoilIndex).HeatingCoilRate, 18268.1, 0.1); // actual reheat load to meet SP - EXPECT_NEAR(state->dataHeatingCoils->HeatingCoil(thisSys->m_SuppHeatCoilIndex).HeatingCoilRate, 18268.1, 0.1); + EXPECT_NEAR(thisSys->m_MoistureLoadPredicted, -1467.1, 0.1); // dehumidification control type = CoolReheat so MoistureLoad < 0 } TEST_F(EnergyPlusFixture, UnitarySystemModel_VSDXCoilSizing) From 2e167dd02bc6cb68166ab4a1f74b767767e1ecab Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 8 Aug 2023 14:40:03 -0500 Subject: [PATCH 033/161] Address 10089 Review Comments Followed @energyarchmage suggestion and got rid of the if->continue. Changed unit test since the result in it was modified. --- src/EnergyPlus/HeatBalanceSurfaceManager.cc | 4 --- .../unit/HeatBalanceSurfaceManager.unit.cc | 28 +++++++++---------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/EnergyPlus/HeatBalanceSurfaceManager.cc b/src/EnergyPlus/HeatBalanceSurfaceManager.cc index 564ba448904..a11a54d62be 100644 --- a/src/EnergyPlus/HeatBalanceSurfaceManager.cc +++ b/src/EnergyPlus/HeatBalanceSurfaceManager.cc @@ -5176,10 +5176,6 @@ void UpdateThermalHistories(EnergyPlusData &state) state.dataHeatBalFanSys->CTFTuserConstPart(SurfNum); } - // Don't need to evaluate outside for partitions (so continue), - // but do need to do remaining calculations for interzone partitions. - if (surface.ExtBoundCond > 0 && surface.ExtBoundCond == SurfNum) continue; - // Set current outside flux: if (construct.SourceSinkPresent) { state.dataHeatBalSurf->SurfOutsideFluxHist(1)(SurfNum) = diff --git a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc index 67cd382aa35..6cf0e6baefc 100644 --- a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc @@ -8564,9 +8564,9 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_UpdateThermalHistoriesIZSurf state->dataConstruction->Construct.allocate(state->dataHeatBal->TotConstructs); state->dataHeatBal->AnyInternalHeatSourceInInput = false; state->dataHeatBal->SimpleCTFOnly = false; - + AllocateSurfaceHeatBalArrays(*state); // allocates a host of variables related to CTF calculations - + state->dataSurface->Surface(1).Class = DataSurfaces::SurfaceClass::Wall; state->dataSurface->Surface(1).HeatTransSurf = true; state->dataSurface->Surface(1).HeatTransferAlgorithm = DataSurfaces::HeatTransferModel::CTF; @@ -8586,14 +8586,14 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_UpdateThermalHistoriesIZSurf state->dataHeatBal->space(2).OpaqOrIntMassSurfaceLast = 2; state->dataHeatBal->space(2).HTSurfaceFirst = 2; state->dataHeatBal->space(2).HTSurfaceLast = 2; - + state->dataConstruction->Construct(1).NumCTFTerms = 2; state->dataConstruction->Construct(1).SourceSinkPresent = false; state->dataConstruction->Construct(1).NumHistories = 1; state->dataConstruction->Construct(1).CTFOutside[0] = 1.5; state->dataConstruction->Construct(1).CTFCross[0] = 1.5; state->dataConstruction->Construct(1).CTFInside[0] = 1.5; - + state->dataHeatBalSurf->SurfCurrNumHist(1) = 0; state->dataHeatBalSurf->SurfOutsideTempHist(1)(1) = 20.0; state->dataHeatBalSurf->SurfTempIn(1) = 10.0; @@ -8602,32 +8602,32 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_UpdateThermalHistoriesIZSurf state->dataHeatBalSurf->SurfOutsideTempHist(1)(2) = 10.0; state->dataHeatBalSurf->SurfTempIn(2) = 20.0; state->dataHeatBalSurf->SurfCTFConstInPart(2) = 0.0; - - // Test 1: Partition--outside should still be zero + + // Test 1: Partition--outside should have a non-zero value (interzone and regular partitions treated the same) state->dataSurface->Surface(1).ExtBoundCond = 1; state->dataSurface->Surface(2).ExtBoundCond = 2; - + UpdateThermalHistories(*state); // Test to make sure that the outside surface flux is being set properly for interzone surfaces - + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(1)); - EXPECT_EQ(0.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(1)); + EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(1)); EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(2)); - EXPECT_EQ(0.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(2)); - + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(2)); + // Test 2: Interzone Partition--outside should have a non-zero value state->dataSurface->Surface(1).ExtBoundCond = 2; state->dataSurface->Surface(2).ExtBoundCond = 1; state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux = 0.0; state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux = 0.0; - + UpdateThermalHistories(*state); // Test to make sure that the outside surface flux is being set properly for interzone surfaces - + EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(1)); EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(1)); EXPECT_EQ(-15.0, state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(2)); EXPECT_EQ(15.0, state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(2)); } - + TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_SurroundingSurfacesTempTest) { std::string_view constexpr idf_objects = R"IDF( From 3172adc1931c2c74cf90c9296aa48c702f07bb09 Mon Sep 17 00:00:00 2001 From: rraustad Date: Wed, 9 Aug 2023 19:44:12 -0400 Subject: [PATCH 034/161] Original code changes --- src/EnergyPlus/HVACHXAssistedCoolingCoil.cc | 6 ++++-- src/EnergyPlus/HeatRecovery.cc | 2 +- src/EnergyPlus/MixedAir.cc | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/HVACHXAssistedCoolingCoil.cc b/src/EnergyPlus/HVACHXAssistedCoolingCoil.cc index 8215ff6bd50..1fe40d32bf1 100644 --- a/src/EnergyPlus/HVACHXAssistedCoolingCoil.cc +++ b/src/EnergyPlus/HVACHXAssistedCoolingCoil.cc @@ -611,12 +611,14 @@ namespace HVACHXAssistedCoolingCoil { // Get the data for the Coil:Water:CoolingHeatExchangerAssisted objects CurrentModuleObject = "CoilSystem:Cooling:Water:HeatExchangerAssisted"; - for (HXAssistedCoilNum = NumHXAssistedDXCoils + 1; HXAssistedCoilNum <= NumHXAssistedWaterCoils; ++HXAssistedCoilNum) { + for (HXAssistedCoilNum = NumHXAssistedDXCoils + 1; HXAssistedCoilNum <= state.dataHVACAssistedCC->TotalNumHXAssistedCoils; + ++HXAssistedCoilNum) { + int thisWaterHXNum = HXAssistedCoilNum - NumHXAssistedDXCoils; auto &thisHXCoil = state.dataHVACAssistedCC->HXAssistedCoil(HXAssistedCoilNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, - HXAssistedCoilNum, + thisWaterHXNum, AlphArray, NumAlphas, NumArray, diff --git a/src/EnergyPlus/HeatRecovery.cc b/src/EnergyPlus/HeatRecovery.cc index 325b0777f10..5583f98f6e6 100644 --- a/src/EnergyPlus/HeatRecovery.cc +++ b/src/EnergyPlus/HeatRecovery.cc @@ -2612,7 +2612,7 @@ namespace HeatRecovery { HXPartLoadRatio = max(0.0, HXPartLoadRatio); HXPartLoadRatio = min(1.0, HXPartLoadRatio); - } else if (CompanionCoilIndex > 0) { + } else if (CompanionCoilIndex > 0 && !state.dataDXCoils->DXCoilPartLoadRatio.empty()) { // VS coil issue here? HXPartLoadRatio = state.dataDXCoils->DXCoilPartLoadRatio(CompanionCoilIndex); } diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index 18e8d96b765..00de037e27d 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -1050,8 +1050,6 @@ void GetOutsideAirSysInputs(EnergyPlusData &state) OASys.ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::UnitarySystemModel || OASys.ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::DXSystem) { OASys.ComponentIndex(CompNum) = CompNum; - OASys.compPointer[CompNum] = - UnitarySystems::UnitarySys::factory(state, DataHVACGlobals::UnitarySys_AnyCoilType, OASys.ComponentName(CompNum), false, 0); } else if (OASys.ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::Invalid) { std::string const thisComp = OASys.ComponentType(CompNum); if (thisComp == "HEATEXCHANGER:AIRTOAIR:SENSIBLEANDLATENT" || thisComp == "HEATEXCHANGER:DESICCANT:BALANCEDFLOW") { @@ -1094,6 +1092,19 @@ void GetOutsideAirSysInputs(EnergyPlusData &state) lNumericBlanks.deallocate(); state.dataMixedAir->GetOASysInputFlag = false; + + // once GetOASysInputFlag is set to false other calls to objects can occur without worry that GetOutsideAirSysInputs will be called again + // now get the pointer for UnitarySystem - doing this earlier can cause recursion which trips IntraObjUniquenessCheck warnings + for (int OASysNum = 1; OASysNum <= state.dataAirLoop->NumOASystems; ++OASysNum) { + for (int CompNum = 1; CompNum <= state.dataAirLoop->OutsideAirSys(OASysNum).NumComponents; ++CompNum) { + if (state.dataAirLoop->OutsideAirSys(OASysNum).ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::CoilSystemWater || + state.dataAirLoop->OutsideAirSys(OASysNum).ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::UnitarySystemModel || + state.dataAirLoop->OutsideAirSys(OASysNum).ComponentTypeEnum(CompNum) == SimAirServingZones::CompType::DXSystem) { + state.dataAirLoop->OutsideAirSys(OASysNum).compPointer[CompNum] = UnitarySystems::UnitarySys::factory( + state, DataHVACGlobals::UnitarySys_AnyCoilType, state.dataAirLoop->OutsideAirSys(OASysNum).ComponentName(CompNum), false, 0); + } + } + } } void GetOAControllerInputs(EnergyPlusData &state) From 33e0f1506e34c4b646998bfb7c3c104a7e33ba46 Mon Sep 17 00:00:00 2001 From: rraustad Date: Fri, 11 Aug 2023 11:49:17 -0400 Subject: [PATCH 035/161] Call correct coil model to avoid inaccurate data or crash --- src/EnergyPlus/HeatRecovery.cc | 37 +++++++++++++++++++++++----------- src/EnergyPlus/HeatRecovery.hh | 13 ++++++------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/EnergyPlus/HeatRecovery.cc b/src/EnergyPlus/HeatRecovery.cc index 5583f98f6e6..8aa9a200ba8 100644 --- a/src/EnergyPlus/HeatRecovery.cc +++ b/src/EnergyPlus/HeatRecovery.cc @@ -165,8 +165,8 @@ namespace HeatRecovery { } } - int CompanionCoilNum = present(CompanionCoilIndex) ? int(CompanionCoilIndex) : 0; // Index to companion cooling coil - int companionCoilType = present(CompanionCoilType_Num) ? int(CompanionCoilType_Num) : 0; + int CompanionCoilNum = present(CompanionCoilIndex) ? int(CompanionCoilIndex) : -1; // Index to companion cooling coil + int companionCoilType = present(CompanionCoilType_Num) ? int(CompanionCoilType_Num) : -1; bool HXUnitOn; // flag to enable heat exchanger if (present(HXUnitEnable)) { @@ -178,7 +178,7 @@ namespace HeatRecovery { } else { // HX is placed on a BRANCH, optional arguments are not passed in from SimAirServingZones. // HX will calculate its own part-load ratio if optional HXUnitEnable flag is not present - HXUnitOn = true; + HXUnitOn = (HXPartLoadRatio > 0.0); state.dataHeatRecovery->CalledFromParentObject = false; } @@ -199,8 +199,16 @@ namespace HeatRecovery { case DataHVACGlobals::HX_DESICCANT_BALANCED: Real64 PartLoadRatio = present(HXPartLoadRatio) ? Real64(HXPartLoadRatio) : 1.0; // Part load ratio requested of DX compressor bool RegInIsOANode = present(RegenInletIsOANode) && bool(RegenInletIsOANode); - thisExch.CalcDesiccantBalancedHeatExch( - state, HXUnitOn, FirstHVACIteration, FanOpMode, PartLoadRatio, CompanionCoilNum, RegInIsOANode, EconomizerFlag, HighHumCtrlFlag); + thisExch.CalcDesiccantBalancedHeatExch(state, + HXUnitOn, + FirstHVACIteration, + FanOpMode, + PartLoadRatio, + CompanionCoilNum, + companionCoilType, + RegInIsOANode, + EconomizerFlag, + HighHumCtrlFlag); break; } @@ -1494,10 +1502,9 @@ namespace HeatRecovery { } } - if ((((CompanionCoilType_Num == DataHVACGlobals::CoilDX_CoolingSingleSpeed) || - (CompanionCoilType_Num == DataHVACGlobals::Coil_CoolingAirToAirVariableSpeed)) && - (CompanionCoilIndex > 0)) || - ((CompanionCoilType_Num == DataHVACGlobals::CoilDX_Cooling) && (CompanionCoilIndex > -1))) { + if ((CompanionCoilIndex > -1) && ((CompanionCoilType_Num == DataHVACGlobals::CoilDX_CoolingSingleSpeed) || + (CompanionCoilType_Num == DataHVACGlobals::Coil_CoolingAirToAirVariableSpeed) || + (CompanionCoilType_Num == DataHVACGlobals::CoilDX_Cooling))) { if (CompanionCoilType_Num == DataHVACGlobals::CoilDX_CoolingSingleSpeed || CompanionCoilType_Num == DataHVACGlobals::CoilDX_CoolingTwoStageWHumControl) { @@ -2386,6 +2393,7 @@ namespace HeatRecovery { int const FanOpMode, // Supply air fan operating mode (1=cycling, 2=constant) Real64 const PartLoadRatio, // Part load ratio requested of DX compressor int const CompanionCoilIndex, // index of companion cooling coil + int const CompanionCoilType, // type of cooling coil bool const RegenInletIsOANode, // Flag to determine if regen side inlet is OANode, if so this air stream cycles ObjexxFCL::Optional_bool_const EconomizerFlag, // economizer flag pass by air loop or OA sys ObjexxFCL::Optional_bool_const HighHumCtrlFlag // high humidity control flag passed by airloop or OA sys @@ -2612,9 +2620,14 @@ namespace HeatRecovery { HXPartLoadRatio = max(0.0, HXPartLoadRatio); HXPartLoadRatio = min(1.0, HXPartLoadRatio); - } else if (CompanionCoilIndex > 0 && !state.dataDXCoils->DXCoilPartLoadRatio.empty()) { - // VS coil issue here? - HXPartLoadRatio = state.dataDXCoils->DXCoilPartLoadRatio(CompanionCoilIndex); + } else if (CompanionCoilType > 0 && CompanionCoilIndex > -1) { + if (CompanionCoilType == DataHVACGlobals::CoilDX_Cooling) { + HXPartLoadRatio = state.dataCoilCooingDX->coilCoolingDXs[CompanionCoilIndex].partLoadRatioReport; + } else if (CompanionCoilType == DataHVACGlobals::Coil_CoolingAirToAirVariableSpeed) { + HXPartLoadRatio = state.dataVariableSpeedCoils->VarSpeedCoil(CompanionCoilIndex).PartLoadRatio; + } else { + HXPartLoadRatio = state.dataDXCoils->DXCoilPartLoadRatio(CompanionCoilIndex); + } } Real64 constexpr lowerLimit = 1.e-5; diff --git a/src/EnergyPlus/HeatRecovery.hh b/src/EnergyPlus/HeatRecovery.hh index 0a21ebe7b04..285fa5161f2 100644 --- a/src/EnergyPlus/HeatRecovery.hh +++ b/src/EnergyPlus/HeatRecovery.hh @@ -222,12 +222,13 @@ namespace HeatRecovery { void CalcDesiccantBalancedHeatExch(EnergyPlusData &state, - bool HXUnitOn, // flag to simulate heat exchager heat recovery - bool FirstHVACIteration, // First HVAC iteration flag - int FanOpMode, // Supply air fan operating mode (1=cycling, 2=constant) - Real64 PartLoadRatio, // Part load ratio requested of DX compressor - int CompanionCoilIndex, // index of companion cooling coil - bool RegenInletIsOANode, // Flag to determine if regen side inlet is OANode, if so this air stream cycles + bool HXUnitOn, // flag to simulate heat exchager heat recovery + bool FirstHVACIteration, // First HVAC iteration flag + int FanOpMode, // Supply air fan operating mode (1=cycling, 2=constant) + Real64 PartLoadRatio, // Part load ratio requested of DX compressor + int CompanionCoilIndex, // index of companion cooling coil + int CompanionCoilType, // type of cooling coil + bool RegenInletIsOANode, // Flag to determine if regen side inlet is OANode, if so this air stream cycles ObjexxFCL::Optional_bool_const EconomizerFlag = _, // economizer flag pass by air loop or OA sys ObjexxFCL::Optional_bool_const HighHumCtrlFlag = _ // high humidity control flag passed by airloop or OA sys ); From fa1607effb2cd68f5467bc44168e1f198c7f2cf0 Mon Sep 17 00:00:00 2001 From: rraustad Date: Fri, 11 Aug 2023 13:14:19 -0400 Subject: [PATCH 036/161] Correct CI failure by protecting optional argument --- src/EnergyPlus/HeatRecovery.cc | 6 +++++- src/EnergyPlus/HeatRecovery.hh | 14 +++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/EnergyPlus/HeatRecovery.cc b/src/EnergyPlus/HeatRecovery.cc index 8aa9a200ba8..932a77b036f 100644 --- a/src/EnergyPlus/HeatRecovery.cc +++ b/src/EnergyPlus/HeatRecovery.cc @@ -178,7 +178,11 @@ namespace HeatRecovery { } else { // HX is placed on a BRANCH, optional arguments are not passed in from SimAirServingZones. // HX will calculate its own part-load ratio if optional HXUnitEnable flag is not present - HXUnitOn = (HXPartLoadRatio > 0.0); + if (present(HXPartLoadRatio)) { + HXUnitOn = (HXPartLoadRatio > 0.0); + } else { + HXUnitOn = true; + } state.dataHeatRecovery->CalledFromParentObject = false; } diff --git a/src/EnergyPlus/HeatRecovery.hh b/src/EnergyPlus/HeatRecovery.hh index 285fa5161f2..267b5a88d3a 100644 --- a/src/EnergyPlus/HeatRecovery.hh +++ b/src/EnergyPlus/HeatRecovery.hh @@ -222,13 +222,13 @@ namespace HeatRecovery { void CalcDesiccantBalancedHeatExch(EnergyPlusData &state, - bool HXUnitOn, // flag to simulate heat exchager heat recovery - bool FirstHVACIteration, // First HVAC iteration flag - int FanOpMode, // Supply air fan operating mode (1=cycling, 2=constant) - Real64 PartLoadRatio, // Part load ratio requested of DX compressor - int CompanionCoilIndex, // index of companion cooling coil - int CompanionCoilType, // type of cooling coil - bool RegenInletIsOANode, // Flag to determine if regen side inlet is OANode, if so this air stream cycles + bool HXUnitOn, // flag to simulate heat exchager heat recovery + bool FirstHVACIteration, // First HVAC iteration flag + int FanOpMode, // Supply air fan operating mode (1=cycling, 2=constant) + Real64 PartLoadRatio, // Part load ratio requested of DX compressor + int CompanionCoilIndex, // index of companion cooling coil + int CompanionCoilType, // type of cooling coil + bool RegenInletIsOANode, // Flag to determine if regen side inlet is OANode, if so this air stream cycles ObjexxFCL::Optional_bool_const EconomizerFlag = _, // economizer flag pass by air loop or OA sys ObjexxFCL::Optional_bool_const HighHumCtrlFlag = _ // high humidity control flag passed by airloop or OA sys ); From 91a321bd7c86b384579bbd4fbe1dd352414d2a3f Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 16 Aug 2023 07:55:13 -0400 Subject: [PATCH 037/161] bug fixes to issues #9642 and #9589 --- src/EnergyPlus/OutputProcessor.cc | 80 ++--------- src/EnergyPlus/OutputProcessor.hh | 2 - src/EnergyPlus/OutputReportTabular.cc | 4 +- src/EnergyPlus/SimulationManager.cc | 1 - tst/EnergyPlus/unit/OutputProcessor.unit.cc | 147 -------------------- 5 files changed, 10 insertions(+), 224 deletions(-) diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 0af70d89a6e..6900f1c912c 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -2105,7 +2105,9 @@ namespace OutputProcessor { // SUBROUTINE INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN April 2001 - // MODIFIED na + // MODIFIED August 2023 by Karen Walkerman + // to update only if the simulation is not in warmup + // as bug fix to issue 9589 // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: @@ -2117,6 +2119,11 @@ namespace OutputProcessor { // from calling program. // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + + if (state.dataGlobal->WarmupFlag) { + return; + } + auto &op = state.dataOutputProcessor; if (!op->MeterValue.allocated()) { @@ -2200,77 +2207,6 @@ namespace OutputProcessor { } } - void ResetAccumulationWhenWarmupComplete(EnergyPlusData &state) - { - // SUBROUTINE INFORMATION: - // AUTHOR Jason Glazer - // DATE WRITTEN June 2015 - // MODIFIED na - // RE-ENGINEERED na - - // PURPOSE OF THIS SUBROUTINE: - // Resets the accumulating meter values. Needed after warmup period is over to - // reset the totals on meters so that they are not accumulated over the warmup period - - // METHODOLOGY EMPLOYED: - // Cycle through the meters and reset all accumulating values - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - auto &op = state.dataOutputProcessor; - - for (auto &m : op->EnergyMeters) { - m.HRValue = 0.0; - - m.DYValue = 0.0; - m.DYMaxVal = MaxSetValue; - m.DYMaxValDate = 0; - m.DYMinVal = MinSetValue; - m.DYMinValDate = 0; - - m.MNValue = 0.0; - m.MNMaxVal = MaxSetValue; - m.MNMaxValDate = 0; - m.MNMinVal = MinSetValue; - m.MNMinValDate = 0; - - m.YRValue = 0.0; - m.YRMaxVal = MaxSetValue; - m.YRMaxValDate = 0; - m.YRMinVal = MinSetValue; - m.YRMinValDate = 0; - - m.SMValue = 0.0; - m.SMMaxVal = MaxSetValue; - m.SMMaxValDate = 0; - m.SMMinVal = MinSetValue; - m.SMMinValDate = 0; - - m.FinYrSMValue = 0.0; - m.FinYrSMMaxVal = MaxSetValue; - m.FinYrSMMaxValDate = 0; - m.FinYrSMMinVal = MinSetValue; - m.FinYrSMMinValDate = 0; - } - - for (int Loop = 1; Loop <= op->NumOfRVariable; ++Loop) { - auto &rVar = op->RVariableTypes(Loop).VarPtr; - if (rVar.frequency == ReportingFrequency::Monthly || rVar.frequency == ReportingFrequency::Yearly || - rVar.frequency == ReportingFrequency::Simulation) { - rVar.StoreValue = 0.0; - rVar.NumStored = 0; - } - } - - for (int Loop = 1; Loop <= op->NumOfIVariable; ++Loop) { - auto &iVar = op->IVariableTypes(Loop).VarPtr; - if (iVar.frequency == ReportingFrequency::Monthly || iVar.frequency == ReportingFrequency::Yearly || - iVar.frequency == ReportingFrequency::Simulation) { - iVar.StoreValue = 0; - iVar.NumStored = 0; - } - } - } - void ReportTSMeters(EnergyPlusData &state, Real64 const StartMinute, // Start Minute for TimeStep Real64 const EndMinute, // End Minute for TimeStep diff --git a/src/EnergyPlus/OutputProcessor.hh b/src/EnergyPlus/OutputProcessor.hh index ba32aed671c..86dee19feec 100644 --- a/src/EnergyPlus/OutputProcessor.hh +++ b/src/EnergyPlus/OutputProcessor.hh @@ -655,8 +655,6 @@ namespace OutputProcessor { void UpdateMeters(EnergyPlusData &state, int TimeStamp); // Current TimeStamp (for max/min) - void ResetAccumulationWhenWarmupComplete(EnergyPlusData &state); - void ReportTSMeters(EnergyPlusData &state, Real64 StartMinute, // Start Minute for TimeStep Real64 EndMinute, // End Minute for TimeStep diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 78798f7a909..cb1612fde1e 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -16471,8 +16471,8 @@ void OutputCompLoadSummary(EnergyPlusData &state, if (kind == OutputType::AirLoop) { tableBody(1, 9) = RealToStr(curCompLoad.mixAirTemp, 2); // mixed air temperature - not for zone or facility } - tableBody(1, 10) = RealToStr(curCompLoad.mainFanAirFlow, 2); // main fan air flow - tableBody(1, 11) = RealToStr(curCompLoad.outsideAirFlow, 2); // outside air flow + tableBody(1, 10) = RealToStr(curCompLoad.mainFanAirFlow, 4); // main fan air flow + tableBody(1, 11) = RealToStr(curCompLoad.outsideAirFlow, 4); // outside air flow tableBody(1, 12) = RealToStr(curCompLoad.designPeakLoad, 2); // design peak load tableBody(1, 13) = RealToStr(curCompLoad.diffDesignPeak, 2); // difference between Design and Peak Load tableBody(1, 14) = RealToStr(curCompLoad.peakDesSensLoad, 2); // Peak Design Sensible Load diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index 4d51da78544..f0afb94f945 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -434,7 +434,6 @@ namespace SimulationManager { } static constexpr std::string_view Format_700("Environment:WarmupDays,{:3}\n"); print(state.files.eio, Format_700, state.dataReportFlag->NumOfWarmupDays); - OutputProcessor::ResetAccumulationWhenWarmupComplete(state); } else if (state.dataReportFlag->DisplayPerfSimulationFlag) { if (state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodWeather) { DisplayString(state, "Continuing Simulation at " + state.dataEnvrn->CurMnDyYr + " for " + state.dataEnvrn->EnvironmentName); diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index ed6a2cedd04..cab5fba4dcc 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -5277,153 +5277,6 @@ namespace OutputProcessor { "\n")); } - TEST_F(EnergyPlusFixture, OutputProcessor_ResetAccumulationWhenWarmupComplete) - { - std::string const idf_objects = delimited_string({ - "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,detailed;", - "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,detailed;", - "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,runperiod;", - "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,hourly;", - }); - - ASSERT_TRUE(process_idf(idf_objects)); - - // Setup so that UpdateDataandReport can be called. - state->dataGlobal->DayOfSim = 365; - state->dataGlobal->DayOfSimChr = "365"; - state->dataEnvrn->Month = 12; - state->dataEnvrn->DayOfMonth = 31; - state->dataEnvrn->DSTIndicator = 0; - state->dataEnvrn->DayOfWeek = 3; - state->dataEnvrn->HolidayIndex = 0; - state->dataGlobal->HourOfDay = 24; - state->dataGlobal->NumOfDayInEnvrn = 365; - state->dataGlobal->MinutesPerTimeStep = 10; - - if (state->dataGlobal->TimeStep == state->dataGlobal->NumOfTimeStepInHour) { - state->dataGlobal->EndHourFlag = true; - if (state->dataGlobal->HourOfDay == 24) { - state->dataGlobal->EndDayFlag = true; - if ((!state->dataGlobal->WarmupFlag) && (state->dataGlobal->DayOfSim == state->dataGlobal->NumOfDayInEnvrn)) { - state->dataGlobal->EndEnvrnFlag = true; - } - } - } - - if (state->dataEnvrn->DayOfMonth == state->dataWeatherManager->EndDayOfMonth(state->dataEnvrn->Month)) { - state->dataEnvrn->EndMonthFlag = true; - } - // OutputProcessor::TimeValue.allocate(2); - auto timeStep = 1.0 / 6; - SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); - SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); - - state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).CurMinute = 10; - state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).CurMinute = 10; - - state->dataGlobal->WarmupFlag = true; - - ReportOutputFileHeaders(*state); - - GetReportVariableInput(*state); - Array1D PurchAir; // Used to specify purchased air parameters - PurchAir.allocate(1); - SetupOutputVariable(*state, - "Zone Ideal Loads Supply Air Total Heating Energy", - OutputProcessor::Unit::J, - PurchAir(1).TotHeatEnergy, - OutputProcessor::SOVTimeStepType::System, - OutputProcessor::SOVStoreType::Summed, - PurchAir(1).Name, - {}, - "DISTRICTHEATING", - "Heating", - {}, - "System"); - - PurchAir(1).TotHeatEnergy = 1.1; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 1.3; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 1.5; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 1.7; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 1.9; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 2.2; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - state->dataGlobal->WarmupFlag = false; - - PurchAir(1).TotHeatEnergy = 2.4; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep - - compare_eso_stream(delimited_string( - { - "1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]", - "2,8,Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],Hour[],StartMinute[],EndMinute[],DayType", - "3,5,Cumulative Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],DayType ! When Daily Report Variables " - "Requested", - "4,2,Cumulative Days of Simulation[],Month[] ! When Monthly Report Variables Requested", - "5,1,Cumulative Days of Simulation[] ! When Run Period Report Variables Requested", - "6,1,Calendar Year of Simulation[] ! When Annual Report Variables Requested", - "7,1,,Zone Ideal Loads Supply Air Total Heating Energy [J] !Each Call", - "56,11,,Zone Ideal Loads Supply Air Total Heating Energy [J] !RunPeriod [Value,Min,Month,Day,Hour,Minute,Max,Month,Day,Hour,Minute]", - "2,365,12,31, 0,24,10.00,20.00,Tuesday", - "7,1.1", - "2,365,12,31, 0,24,20.00,30.00,Tuesday", - "7,1.3", - "2,365,12,31, 0,24,30.00,40.00,Tuesday", - "7,1.5", - "2,365,12,31, 0,24,40.00,50.00,Tuesday", - "7,1.7", - "2,365,12,31, 0,24,50.00,60.00,Tuesday", - "7,1.9", - "2,365,12,31, 0,24,60.00,70.00,Tuesday", - "7,2.2", - "5,365", - "56,9.7,1.1,12,31,24,20,2.2,12,31,24,70", - }, - "\n")); - - ResetAccumulationWhenWarmupComplete(*state); - - PurchAir(1).TotHeatEnergy = 100.0; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 200.0; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - - PurchAir(1).TotHeatEnergy = 300.0; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep - - compare_eso_stream(delimited_string( - { - "2,365,12,31, 0,24, 0.00,10.00,Tuesday", - "7,100.0", - "2,365,12,31, 0,24,10.00,20.00,Tuesday", - "7,200.0", - "5,365", - "56,300.0,100.0,12,31,24,10,200.0,12,31,24,20", - }, - "\n")); - } TEST_F(EnergyPlusFixture, OutputProcessor_GenOutputVariablesAuditReport) { std::string const idf_objects = delimited_string({ From 26bd493388d489c7f4b4389f3ebec4c10337ae92 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 17 Aug 2023 09:14:04 -0500 Subject: [PATCH 038/161] UFAD code clarification Made the code consistent with the documentation which corrected an oversight in the way that convective energy was summed for a particular UFAD sizing. Also corrected a bug in an initialization. This should resolve the issue. --- src/EnergyPlus/UFADManager.cc | 87 +++++++++++++++++------------------ src/EnergyPlus/UFADManager.hh | 2 + 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/EnergyPlus/UFADManager.cc b/src/EnergyPlus/UFADManager.cc index c8159bb98b8..f62d4679182 100644 --- a/src/EnergyPlus/UFADManager.cc +++ b/src/EnergyPlus/UFADManager.cc @@ -226,12 +226,6 @@ namespace RoomAir { using DataSizing::AutoSize; - Real64 ZoneElecConv(0.0); // zone elec equip design convective gain [W] - Real64 ZoneGasConv(0.0); // zone gas equip design convective gain [W] - Real64 ZoneOthEqConv(0.0); // zone other equip design convective gain [W] - Real64 ZoneHWEqConv(0.0); // zone hot water equip design convective gain [W] - Real64 ZoneSteamEqConv(0.0); // zone steam equip design convective gain [W] - // This is for both UFADInt and UFADExt auto &zoneU = state.dataRoomAir->ZoneUFAD(state.dataRoomAir->ZoneUFADPtr(ZoneNum)); @@ -329,45 +323,8 @@ namespace RoomAir { } if (zoneU.PowerPerPlume == Constant::AutoCalculate) { - Real64 NumberOfPlumes = (NumberOfOccupants > 0.0) ? NumberOfOccupants : 1.0; - - ZoneElecConv = 0.0; - for (auto const &zoneElectric : state.dataHeatBal->ZoneElectric) { - if (zoneElectric.ZonePtr == ZoneNum) { - // Is the behavior for Exterior UFAD supposed to be different than for Interior UFAD? - ZoneElecConv += - (model == RoomAirModel::UFADExt) ? zoneElectric.DesignLevel : (zoneElectric.DesignLevel * zoneElectric.FractionConvected); - } - } - ZoneGasConv = 0.0; - for (auto const &zoneGas : state.dataHeatBal->ZoneGas) { - if (zoneGas.ZonePtr == ZoneNum) { - ZoneGasConv += (model == RoomAirModel::UFADExt) ? zoneGas.DesignLevel : (zoneGas.DesignLevel * zoneGas.FractionConvected); - } - } - ZoneOthEqConv = 0.0; - for (auto const &zoneOtherEq : state.dataHeatBal->ZoneOtherEq) { - if (zoneOtherEq.ZonePtr == ZoneNum) { - ZoneOthEqConv += - (model == RoomAirModel::UFADExt) ? zoneOtherEq.DesignLevel : (zoneOtherEq.DesignLevel * zoneOtherEq.FractionConvected); - } - } - ZoneHWEqConv = 0.0; - for (auto const &zoneHWEq : state.dataHeatBal->ZoneHWEq) { - if (zoneHWEq.ZonePtr == ZoneNum) { - ZoneHWEqConv += (model == RoomAirModel::UFADExt) ? zoneHWEq.DesignLevel : (zoneHWEq.DesignLevel * zoneHWEq.FractionConvected); - } - } - for (auto const &zoneSteamEq : state.dataHeatBal->ZoneSteamEq) { - ZoneSteamEqConv = 0.0; // I'm 99.72% sure this is a bug. - if (zoneSteamEq.ZonePtr == ZoneNum) { - ZoneSteamEqConv += - (model == RoomAirModel::UFADExt) ? zoneSteamEq.DesignLevel : (zoneSteamEq.DesignLevel * zoneSteamEq.FractionConvected); - } - } - zoneU.PowerPerPlume = - (NumberOfOccupants * 73.0 + ZoneElecConv + ZoneGasConv + ZoneOthEqConv + ZoneHWEqConv + ZoneSteamEqConv) / NumberOfPlumes; + zoneU.PowerPerPlume = sumUFADConvGainPerPlume(state, ZoneNum, NumberOfOccupants); BaseSizer::reportSizerOutput(state, cCMO, zoneU.ZoneName, "Power per plume [W]", zoneU.PowerPerPlume); @@ -384,6 +341,48 @@ namespace RoomAir { } } + Real64 sumUFADConvGainPerPlume(EnergyPlusData &state, int const zoneNum, Real64 const numOccupants) + { + Real64 zoneElecConv(0.0); // zone elec equip design convective gain [W] + for (auto const &zoneElectric : state.dataHeatBal->ZoneElectric) { + if (zoneElectric.ZonePtr == zoneNum) { + zoneElecConv += zoneElectric.DesignLevel * zoneElectric.FractionConvected; + } + } + + Real64 zoneGasConv(0.0); // zone gas equip design convective gain [W] + for (auto const &zoneGas : state.dataHeatBal->ZoneGas) { + if (zoneGas.ZonePtr == zoneNum) { + zoneGasConv += zoneGas.DesignLevel * zoneGas.FractionConvected; + } + } + + Real64 zoneOthEqConv(0.0); // zone other equip design convective gain [W] + for (auto const &zoneOtherEq : state.dataHeatBal->ZoneOtherEq) { + if (zoneOtherEq.ZonePtr == zoneNum) { + zoneOthEqConv += zoneOtherEq.DesignLevel * zoneOtherEq.FractionConvected; + } + } + + Real64 zoneHWEqConv(0.0); // zone hot water equip design convective gain [W] + for (auto const &zoneHWEq : state.dataHeatBal->ZoneHWEq) { + if (zoneHWEq.ZonePtr == zoneNum) { + zoneHWEqConv += zoneHWEq.DesignLevel * zoneHWEq.FractionConvected; + } + } + + Real64 zoneSteamEqConv(0.0); // zone steam equip design convective gain [W] + for (auto const &zoneSteamEq : state.dataHeatBal->ZoneSteamEq) { + if (zoneSteamEq.ZonePtr == zoneNum) { + zoneSteamEqConv += zoneSteamEq.DesignLevel * zoneSteamEq.FractionConvected; + } + } + + Real64 numPlumes = (numOccupants > 0.0) ? numOccupants : 1.0; + + return (numOccupants * 73.0 + zoneElecConv + zoneGasConv + zoneOthEqConv + zoneHWEqConv + zoneSteamEqConv) / numPlumes; + } + void HcUFAD(EnergyPlusData &state, int const ZoneNum, Real64 const FractionHeight, UFADConvCoef &ufadCC) { diff --git a/src/EnergyPlus/UFADManager.hh b/src/EnergyPlus/UFADManager.hh index 634f0620b14..a0ed2d8455c 100644 --- a/src/EnergyPlus/UFADManager.hh +++ b/src/EnergyPlus/UFADManager.hh @@ -88,6 +88,8 @@ namespace RoomAir { RoomAir::RoomAirModel const ZoneModelType // type of zone model; UCSDUFI = 6 ); + Real64 sumUFADConvGainPerPlume(EnergyPlusData &state, int const zoneNum, Real64 const numOccupants); + void HcUFAD(EnergyPlusData &state, int const ZoneNum, Real64 const FractionHeight, UFADConvCoef &ufadCC); void CalcUFADInt(EnergyPlusData &state, int const ZoneNum); // index number for the specified zone From cf7938676598e00d1e9c91745a7a87afd238f20d Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Thu, 17 Aug 2023 17:47:17 -0700 Subject: [PATCH 039/161] Fixing compressor spd calc with capped load, TU capacity not limited --- src/EnergyPlus/DXCoils.cc | 1 + src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index 130eb4964ec..f86108fde18 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -17209,6 +17209,7 @@ void CalcVRFHeatingCoil_FluidTCtrl(EnergyPlusData &state, state.dataDXCoils->DXCoil(thisDXCoil.CompanionUpstreamDXCoil).CoolingCoilRuntimeFraction)); } + OutletAirEnthalpy = min(OutletAirEnthalpy, FullLoadOutAirEnth); thisDXCoil.OutletAirTemp = OutletAirTemp; thisDXCoil.OutletAirHumRat = OutletAirHumRat; thisDXCoil.OutletAirEnthalpy = OutletAirEnthalpy; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 58ea7468487..c923cd65c49 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -11444,7 +11444,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // Required load is beyond the max system capacity Q_h_TU_PL = CompEvaporatingCAPSpdMax; - TU_HeatingLoad = CompEvaporatingCAPSpdMax; + // TU_HeatingLoad = CompEvaporatingCAPSpdMax; this->TUHeatingLoad = TU_HeatingLoad; h_IU_cond_out = GetSatEnthalpyRefrig( state, From 856ff6108d79aca8126550af901f0d9bf45bcde5 Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Thu, 17 Aug 2023 18:04:41 -0700 Subject: [PATCH 040/161] add test idfs to CMakeLists.txt --- testfiles/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index eb011e5a580..1e656abc972 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -666,6 +666,7 @@ add_simulation_test(IDF_FILE VSHeatPumpWaterHeater.idf EPW_FILE USA_FL_Miami.Int add_simulation_test(IDF_FILE VSHeatPumpWaterToAirEquationFit.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE VSWaterHeaterHeatPumpStratifiedTank.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) add_simulation_test(IDF_FILE VaryingLocationAndOrientation.idf EPW_FILE USA_CO_Golden-NREL.724666_TMY3.epw) +add_simulation_test(IDF_FILE US+SF+CZ4A+hp+crawlspace+IECC_2006_VRF.idf EPW_FILE USA_NY_New.York-John.F.Kennedy.Intl.AP.744860_TMY3.epw) add_simulation_test(IDF_FILE VariableRefrigerantFlow_5Zone.idf EPW_FILE USA_FL_Miami.Intl.AP.722020_TMY3.epw) add_simulation_test(IDF_FILE VariableRefrigerantFlow_5Zone_wAirloop.idf EPW_FILE USA_FL_Miami.Intl.AP.722020_TMY3.epw) add_simulation_test(IDF_FILE VariableRefrigerantFlow_FluidTCtrl_5Zone.idf EPW_FILE USA_FL_Miami.Intl.AP.722020_TMY3.epw) From 43612eb0698c9d72eb66bd5f9922d888692fae52 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 18 Aug 2023 13:34:16 -0500 Subject: [PATCH 041/161] UFAD Fix Unit Test Unit test of the new subroutine that calculates convective gain per plume. This was a new file so this impacted CMakeList.txt as well. --- tst/EnergyPlus/unit/CMakeLists.txt | 1 + tst/EnergyPlus/unit/UFADManager.unit.cc | 157 ++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 tst/EnergyPlus/unit/UFADManager.unit.cc diff --git a/tst/EnergyPlus/unit/CMakeLists.txt b/tst/EnergyPlus/unit/CMakeLists.txt index f291923a758..fc089dca9a0 100644 --- a/tst/EnergyPlus/unit/CMakeLists.txt +++ b/tst/EnergyPlus/unit/CMakeLists.txt @@ -232,6 +232,7 @@ set(test_src TranspiredCollector.unit.cc UnitHeater.unit.cc UnitVentilator.unit.cc + UFADManager.unit.cc UnitaryHybridAirConditioner.unit.cc UnitarySystem.unit.cc UtilityRoutines.unit.cc diff --git a/tst/EnergyPlus/unit/UFADManager.unit.cc b/tst/EnergyPlus/unit/UFADManager.unit.cc new file mode 100644 index 00000000000..9bbc8dab276 --- /dev/null +++ b/tst/EnergyPlus/unit/UFADManager.unit.cc @@ -0,0 +1,157 @@ +// EnergyPlus, Copyright (c) 1996-2023, The Board of Trustees of the University of Illinois, +// The Regents of the University of California, through Lawrence Berkeley National Laboratory +// (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge +// National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other +// contributors. All rights reserved. +// +// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the +// U.S. Government consequently retains certain rights. As such, the U.S. Government has been +// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, +// worldwide license in the Software to reproduce, distribute copies to the public, prepare +// derivative works, and perform publicly and display publicly, and to permit others to do so. +// +// Redistribution and use in source and binary forms, with or without modification, are permitted +// provided that the following conditions are met: +// +// (1) Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// (2) Redistributions in binary form must reproduce the above copyright notice, this list of +// conditions and the following disclaimer in the documentation and/or other materials +// provided with the distribution. +// +// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, +// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific prior +// +// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form +// without changes from the version obtained under this License, or (ii) Licensee makes a +// reference solely to the software portion of its product, Licensee must refer to the +// software as "EnergyPlus version X" software, where "X" is the version number Licensee +// obtained under this License and may not use a different name for the software. Except as +// specifically required in this Section (4), Licensee shall not use in a company name, a +// product name, in advertising, publicity, or other promotional activities any name, trade +// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly +// similar designation, without the U.S. Department of Energy's prior written consent. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +// EnergyPlus::Pumps Unit Tests + +// Google Test Headers +#include + +// EnergyPlus Headers +#include +#include +#include + +#include "Fixtures/EnergyPlusFixture.hh" + +namespace EnergyPlus { + +TEST_F(EnergyPlusFixture, UFADManagerTest_sumUFADConvGainPerPlume) +{ + auto &dataHB = state->dataHeatBal; + dataHB->ZoneElectric.allocate(5); + dataHB->ZoneGas.allocate(5); + dataHB->ZoneOtherEq.allocate(5); + dataHB->ZoneHWEq.allocate(5); + dataHB->ZoneSteamEq.allocate(5); + + // Set-up data for various tests + dataHB->ZoneElectric(1).DesignLevel = 11.0; + dataHB->ZoneElectric(2).DesignLevel = 12.0; + dataHB->ZoneElectric(3).DesignLevel = 13.0; + dataHB->ZoneElectric(4).DesignLevel = 14.0; + dataHB->ZoneElectric(5).DesignLevel = 15.0; + dataHB->ZoneElectric(1).FractionConvected = 0.11; + dataHB->ZoneElectric(2).FractionConvected = 0.21; + dataHB->ZoneElectric(3).FractionConvected = 0.31; + dataHB->ZoneElectric(4).FractionConvected = 0.41; + dataHB->ZoneElectric(5).FractionConvected = 0.51; + dataHB->ZoneElectric(1).ZonePtr = 1; + dataHB->ZoneElectric(2).ZonePtr = 1; + dataHB->ZoneElectric(3).ZonePtr = 2; + dataHB->ZoneElectric(4).ZonePtr = 2; + dataHB->ZoneElectric(5).ZonePtr = 3; + dataHB->ZoneGas(1).DesignLevel = 21.0; + dataHB->ZoneGas(2).DesignLevel = 22.0; + dataHB->ZoneGas(3).DesignLevel = 23.0; + dataHB->ZoneGas(4).DesignLevel = 24.0; + dataHB->ZoneGas(5).DesignLevel = 25.0; + dataHB->ZoneGas(1).FractionConvected = 0.12; + dataHB->ZoneGas(2).FractionConvected = 0.22; + dataHB->ZoneGas(3).FractionConvected = 0.32; + dataHB->ZoneGas(4).FractionConvected = 0.42; + dataHB->ZoneGas(5).FractionConvected = 0.52; + dataHB->ZoneGas(1).ZonePtr = 1; + dataHB->ZoneGas(2).ZonePtr = 2; + dataHB->ZoneGas(3).ZonePtr = 3; + dataHB->ZoneGas(4).ZonePtr = 1; + dataHB->ZoneGas(5).ZonePtr = 2; + dataHB->ZoneOtherEq(1).DesignLevel = 31.0; + dataHB->ZoneOtherEq(2).DesignLevel = 32.0; + dataHB->ZoneOtherEq(3).DesignLevel = 33.0; + dataHB->ZoneOtherEq(4).DesignLevel = 34.0; + dataHB->ZoneOtherEq(5).DesignLevel = 35.0; + dataHB->ZoneOtherEq(1).FractionConvected = 0.13; + dataHB->ZoneOtherEq(2).FractionConvected = 0.23; + dataHB->ZoneOtherEq(3).FractionConvected = 0.33; + dataHB->ZoneOtherEq(4).FractionConvected = 0.43; + dataHB->ZoneOtherEq(5).FractionConvected = 0.53; + dataHB->ZoneOtherEq(1).ZonePtr = 3; + dataHB->ZoneOtherEq(2).ZonePtr = 3; + dataHB->ZoneOtherEq(3).ZonePtr = 4; + dataHB->ZoneOtherEq(4).ZonePtr = 4; + dataHB->ZoneOtherEq(5).ZonePtr = 5; + dataHB->ZoneHWEq(1).DesignLevel = 41.0; + dataHB->ZoneHWEq(2).DesignLevel = 42.0; + dataHB->ZoneHWEq(3).DesignLevel = 43.0; + dataHB->ZoneHWEq(4).DesignLevel = 44.0; + dataHB->ZoneHWEq(5).DesignLevel = 45.0; + dataHB->ZoneHWEq(1).FractionConvected = 0.14; + dataHB->ZoneHWEq(2).FractionConvected = 0.24; + dataHB->ZoneHWEq(3).FractionConvected = 0.34; + dataHB->ZoneHWEq(4).FractionConvected = 0.44; + dataHB->ZoneHWEq(5).FractionConvected = 0.54; + dataHB->ZoneHWEq(1).ZonePtr = 5; + dataHB->ZoneHWEq(2).ZonePtr = 5; + dataHB->ZoneHWEq(3).ZonePtr = 6; + dataHB->ZoneHWEq(4).ZonePtr = 6; + dataHB->ZoneHWEq(5).ZonePtr = 7; + dataHB->ZoneSteamEq(1).DesignLevel = 51.0; + dataHB->ZoneSteamEq(2).DesignLevel = 52.0; + dataHB->ZoneSteamEq(3).DesignLevel = 53.0; + dataHB->ZoneSteamEq(4).DesignLevel = 54.0; + dataHB->ZoneSteamEq(5).DesignLevel = 55.0; + dataHB->ZoneSteamEq(1).FractionConvected = 0.15; + dataHB->ZoneSteamEq(2).FractionConvected = 0.25; + dataHB->ZoneSteamEq(3).FractionConvected = 0.35; + dataHB->ZoneSteamEq(4).FractionConvected = 0.45; + dataHB->ZoneSteamEq(5).FractionConvected = 0.55; + dataHB->ZoneSteamEq(1).ZonePtr = 7; + dataHB->ZoneSteamEq(2).ZonePtr = 7; + dataHB->ZoneSteamEq(3).ZonePtr = 8; + dataHB->ZoneSteamEq(4).ZonePtr = 8; + dataHB->ZoneSteamEq(5).ZonePtr = 8; + Real64 constexpr numOccupants = 10.0; + std::vector expectedAnswer = {74.633, 75.761, 75.64, 75.551, 76.437, 76.398, 77.495, 80.31}; + Real64 constexpr allowedTolerance = 0.00001; + + // Tests 1 - 8: testNum is used for the zone number which grabs different data and each has a different answer + for (int testNum = 1; testNum <= 8; ++testNum) { + Real64 actualAnswer = RoomAir::sumUFADConvGainPerPlume(*state, testNum, numOccupants); + EXPECT_NEAR(actualAnswer, expectedAnswer[testNum - 1], allowedTolerance); + } +} + +} // namespace EnergyPlus From b0e33542a84c0b8226540d737fdb0d1c22f737a3 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 18 Aug 2023 13:34:41 -0500 Subject: [PATCH 042/161] Update UFADManager.unit.cc --- tst/EnergyPlus/unit/UFADManager.unit.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/tst/EnergyPlus/unit/UFADManager.unit.cc b/tst/EnergyPlus/unit/UFADManager.unit.cc index 9bbc8dab276..b54c496106e 100644 --- a/tst/EnergyPlus/unit/UFADManager.unit.cc +++ b/tst/EnergyPlus/unit/UFADManager.unit.cc @@ -23,6 +23,7 @@ // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, // the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be // used to endorse or promote products derived from this software without specific prior +// written permission. // // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form // without changes from the version obtained under this License, or (ii) Licensee makes a From 998a719688bbcadc55c3d48cfc209324f210021c Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Fri, 18 Aug 2023 15:37:40 -0400 Subject: [PATCH 043/161] developping new test for UpdateMeters --- src/EnergyPlus/OutputProcessor.cc | 4 +- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 162 ++++++++++++++++++++ 2 files changed, 163 insertions(+), 3 deletions(-) diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 6900f1c912c..d8acd597294 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -2105,9 +2105,7 @@ namespace OutputProcessor { // SUBROUTINE INFORMATION: // AUTHOR Linda Lawrie // DATE WRITTEN April 2001 - // MODIFIED August 2023 by Karen Walkerman - // to update only if the simulation is not in warmup - // as bug fix to issue 9589 + // MODIFIED na // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index cab5fba4dcc..cb6660e9ec7 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -67,6 +67,7 @@ #include #include #include +#include using namespace EnergyPlus::PurchasedAirManager; using namespace EnergyPlus::WeatherManager; @@ -5277,6 +5278,167 @@ namespace OutputProcessor { "\n")); } + TEST_F(EnergyPlusFixture, OutputProcessor_UpdateMeters) + { + std::string const idf_objects = delimited_string({ + "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,detailed;", + "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,detailed;", + "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,runperiod;", + "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,hourly;", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + // Setup so that UpdateDataandReport can be called. + state->dataGlobal->DayOfSim = 365; + state->dataGlobal->DayOfSimChr = "365"; + state->dataEnvrn->Month = 12; + state->dataEnvrn->DayOfMonth = 31; + state->dataEnvrn->DSTIndicator = 0; + state->dataEnvrn->DayOfWeek = 3; + state->dataEnvrn->HolidayIndex = 0; + state->dataGlobal->HourOfDay = 24; + state->dataGlobal->NumOfDayInEnvrn = 365; + state->dataGlobal->MinutesPerTimeStep = 10; + + if (state->dataGlobal->TimeStep == state->dataGlobal->NumOfTimeStepInHour) { + state->dataGlobal->EndHourFlag = true; + if (state->dataGlobal->HourOfDay == 24) { + state->dataGlobal->EndDayFlag = true; + if ((!state->dataGlobal->WarmupFlag) && (state->dataGlobal->DayOfSim == state->dataGlobal->NumOfDayInEnvrn)) { + state->dataGlobal->EndEnvrnFlag = true; + } + } + } + + if (state->dataEnvrn->DayOfMonth == state->dataWeatherManager->EndDayOfMonth(state->dataEnvrn->Month)) { + state->dataEnvrn->EndMonthFlag = true; + } + // OutputProcessor::TimeValue.allocate(2); + auto timeStep = 1.0 / 6; + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); + + state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).CurMinute = 10; + state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).CurMinute = 10; + + int MDHM; // Month,Day,Hour,Minute + General::EncodeMonDayHrMin(MDHM, state->dataEnvrn->Month, state->dataEnvrn->DayOfMonth, state->dataGlobal->HourOfDay, 10); + + state->dataGlobal->WarmupFlag = true; + + ReportOutputFileHeaders(*state); + + GetReportVariableInput(*state); + Array1D PurchAir; // Used to specify purchased air parameters + PurchAir.allocate(1); + SetupOutputVariable(*state, + "Zone Ideal Loads Supply Air Total Heating Energy", + OutputProcessor::Unit::J, + PurchAir(1).TotHeatEnergy, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Summed, + PurchAir(1).Name, + {}, + "DISTRICTHEATING", + "Heating", + {}, + "System"); + + PurchAir(1).TotHeatEnergy = 1.1; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 1.3; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 1.5; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 1.7; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 1.9; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 2.2; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + state->dataGlobal->WarmupFlag = false; + + PurchAir(1).TotHeatEnergy = 2.4; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep + auto const stream_str = state->files.eso.get_output(); + auto const x = 5; + compare_eso_stream(delimited_string( + { + "1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]", + "2,8,Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],Hour[],StartMinute[],EndMinute[],DayType", + "3,5,Cumulative Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],DayType ! When Daily Report Variables " + "Requested", + "4,2,Cumulative Days of Simulation[],Month[] ! When Monthly Report Variables Requested", + "5,1,Cumulative Days of Simulation[] ! When Run Period Report Variables Requested", + "6,1,Calendar Year of Simulation[] ! When Annual Report Variables Requested", + "7,1,,Zone Ideal Loads Supply Air Total Heating Energy [J] !Each Call", + "56,11,,Zone Ideal Loads Supply Air Total Heating Energy [J] !RunPeriod [Value,Min,Month,Day,Hour,Minute,Max,Month,Day,Hour,Minute]", + "2,365,12,31, 0,24,10.00,20.00,Tuesday", + "7,1.1", + "2,365,12,31, 0,24,20.00,30.00,Tuesday", + "7,1.3", + "2,365,12,31, 0,24,30.00,40.00,Tuesday", + "7,1.5", + "2,365,12,31, 0,24,40.00,50.00,Tuesday", + "7,1.7", + "2,365,12,31, 0,24,50.00,60.00,Tuesday", + "7,1.9", + "2,365,12,31, 0,24,60.00,70.00,Tuesday", + "7,2.2", + "5,365", + "56,9.7,1.1,12,31,24,20,2.2,12,31,24,70", + }, + "\n")); + + PurchAir(1).TotHeatEnergy = 100.0; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 200.0; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + + PurchAir(1).TotHeatEnergy = 300.0; + UpdateMeters(&state, MDHM); + //UpdateMeterReporting(*state); + //UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep + + auto const x = 5; + compare_eso_stream(delimited_string( + { + "2,365,12,31, 0,24, 0.00,10.00,Tuesday", + "7,100.0", + "2,365,12,31, 0,24,10.00,20.00,Tuesday", + "7,200.0", + "5,365", + "56,300.0,100.0,12,31,24,10,200.0,12,31,24,20", + }, + "\n")); + } + TEST_F(EnergyPlusFixture, OutputProcessor_GenOutputVariablesAuditReport) { std::string const idf_objects = delimited_string({ From 76ea89ab9074e84c1215fad5b13998209c858e8e Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Fri, 18 Aug 2023 16:43:06 -0400 Subject: [PATCH 044/161] working on unit test --- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 85 ++++++++++----------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index cb6660e9ec7..4af69738a4a 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -5346,43 +5346,51 @@ namespace OutputProcessor { "System"); PurchAir(1).TotHeatEnergy = 1.1; - UpdateMeters(&state, MDHM); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); //UpdateMeterReporting(*state); //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + //UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.3; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.5; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.7; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.9; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 2.2; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); state->dataGlobal->WarmupFlag = false; PurchAir(1).TotHeatEnergy = 2.4; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); + auto const stream_str = state->files.eso.get_output(); - auto const x = 5; + int x = 5; compare_eso_stream(delimited_string( { "1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]", @@ -5394,39 +5402,28 @@ namespace OutputProcessor { "6,1,Calendar Year of Simulation[] ! When Annual Report Variables Requested", "7,1,,Zone Ideal Loads Supply Air Total Heating Energy [J] !Each Call", "56,11,,Zone Ideal Loads Supply Air Total Heating Energy [J] !RunPeriod [Value,Min,Month,Day,Hour,Minute,Max,Month,Day,Hour,Minute]", - "2,365,12,31, 0,24,10.00,20.00,Tuesday", - "7,1.1", - "2,365,12,31, 0,24,20.00,30.00,Tuesday", - "7,1.3", - "2,365,12,31, 0,24,30.00,40.00,Tuesday", - "7,1.5", - "2,365,12,31, 0,24,40.00,50.00,Tuesday", - "7,1.7", - "2,365,12,31, 0,24,50.00,60.00,Tuesday", - "7,1.9", - "2,365,12,31, 0,24,60.00,70.00,Tuesday", - "7,2.2", - "5,365", - "56,9.7,1.1,12,31,24,20,2.2,12,31,24,70", }, "\n")); PurchAir(1).TotHeatEnergy = 100.0; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 200.0; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 300.0; - UpdateMeters(&state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // zone timestep + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + // UpdateMeterReporting(*state); + // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + // UpdateMeters(*state, MDHM); - auto const x = 5; + x = 5; compare_eso_stream(delimited_string( { "2,365,12,31, 0,24, 0.00,10.00,Tuesday", From 92af95cbe14bc95edae58836ba5355d5e2bda180 Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Mon, 21 Aug 2023 17:03:05 -0700 Subject: [PATCH 045/161] Directly limit capacity by moving MaxHeatCap chunk up front --- src/EnergyPlus/DXCoils.cc | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index 15b668421ff..a7e032965ea 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -17168,6 +17168,16 @@ void CalcVRFHeatingCoil_FluidTCtrl(EnergyPlusData &state, (PartLoadRatio > 0.0) && (OutdoorDryBulb > thisDXCoil.MinOATCompressor)) { TotCap = thisDXCoil.RatedTotCap(Mode); + HeatingCapacityMultiplier = 1.0; + // Modify total heating capacity based on defrost heating capacity multiplier + // MaxHeatCap passed from parent object VRF Condenser and is used to limit capacity of TU's to that available from condenser + if (present(MaxHeatCap)) { + TotCapAdj = min(MaxHeatCap, TotCap * HeatingCapacityMultiplier); + TotCap = min(MaxHeatCap, TotCap); + } else { + TotCapAdj = TotCap * HeatingCapacityMultiplier; + } + QCoilReq = PartLoadRatio * TotCap; if (PartLoadRatio == 0.0) { AirMassFlowMin = state.dataHVACVarRefFlow->OACompOffMassFlow; @@ -17207,19 +17217,9 @@ void CalcVRFHeatingCoil_FluidTCtrl(EnergyPlusData &state, // Initializing defrost adjustment factors LoadDueToDefrost = 0.0; - HeatingCapacityMultiplier = 1.0; FractionalDefrostTime = 0.0; InputPowerMultiplier = 1.0; - // Modify total heating capacity based on defrost heating capacity multiplier - // MaxHeatCap passed from parent object VRF Condenser and is used to limit capacity of TU's to that available from condenser - if (present(MaxHeatCap)) { - TotCapAdj = min(MaxHeatCap, TotCap * HeatingCapacityMultiplier); - TotCap = min(MaxHeatCap, TotCap); - } else { - TotCapAdj = TotCap * HeatingCapacityMultiplier; - } - // Calculate full load outlet conditions FullLoadOutAirEnth = InletAirEnthalpy + TotCapAdj / AirMassFlow; FullLoadOutAirHumRat = InletAirHumRat; @@ -17312,7 +17312,6 @@ void CalcVRFHeatingCoil_FluidTCtrl(EnergyPlusData &state, state.dataDXCoils->DXCoil(thisDXCoil.CompanionUpstreamDXCoil).CoolingCoilRuntimeFraction)); } - OutletAirEnthalpy = min(OutletAirEnthalpy, FullLoadOutAirEnth); thisDXCoil.OutletAirTemp = OutletAirTemp; thisDXCoil.OutletAirHumRat = OutletAirHumRat; thisDXCoil.OutletAirEnthalpy = OutletAirEnthalpy; From 05973a0a707a2329807fdeacb33557d21192cbed Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Tue, 22 Aug 2023 10:13:51 -0400 Subject: [PATCH 046/161] working on unit test --- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index 4af69738a4a..f9a5e3a43c3 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -5346,37 +5346,38 @@ namespace OutputProcessor { "System"); PurchAir(1).TotHeatEnergy = 1.1; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeterReporting(*state); + UpdateMeters(*state, MDHM); //UpdateMeterReporting(*state); //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); //UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.3; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.5; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.7; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.9; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 2.2; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); @@ -5384,7 +5385,7 @@ namespace OutputProcessor { state->dataGlobal->WarmupFlag = false; PurchAir(1).TotHeatEnergy = 2.4; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); @@ -5406,19 +5407,19 @@ namespace OutputProcessor { "\n")); PurchAir(1).TotHeatEnergy = 100.0; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 200.0; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 300.0; - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + UpdateMeters(*state, MDHM); // UpdateMeterReporting(*state); // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); // UpdateMeters(*state, MDHM); From 63772bce1228c639508f60daddcaf8cc795e26aa Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Wed, 23 Aug 2023 07:59:59 -0400 Subject: [PATCH 047/161] working on unit test --- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 58 ++++++++++----------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index f9a5e3a43c3..715ab8bb117 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -5347,47 +5347,39 @@ namespace OutputProcessor { PurchAir(1).TotHeatEnergy = 1.1; UpdateMeterReporting(*state); - UpdateMeters(*state, MDHM); - //UpdateMeterReporting(*state); - //UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); //UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.3; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); - // UpdateMeters(*state, MDHM); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + //UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.5; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.7; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 1.9; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 2.2; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); state->dataGlobal->WarmupFlag = false; PurchAir(1).TotHeatEnergy = 2.4; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); auto const stream_str = state->files.eso.get_output(); @@ -5403,25 +5395,29 @@ namespace OutputProcessor { "6,1,Calendar Year of Simulation[] ! When Annual Report Variables Requested", "7,1,,Zone Ideal Loads Supply Air Total Heating Energy [J] !Each Call", "56,11,,Zone Ideal Loads Supply Air Total Heating Energy [J] !RunPeriod [Value,Min,Month,Day,Hour,Minute,Max,Month,Day,Hour,Minute]", + "5,365", + "5,365", + "5,365", + "5,365", + "5,365", + "5,365", + "5,365", }, "\n")); PurchAir(1).TotHeatEnergy = 100.0; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 200.0; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); PurchAir(1).TotHeatEnergy = 300.0; - UpdateMeters(*state, MDHM); - // UpdateMeterReporting(*state); - // UpdateDataandReport(*state, OutputProcessor::TimeStepType::System); + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); // UpdateMeters(*state, MDHM); x = 5; From 6bd505dd9739317b8b2d8461d2e550d997085bd4 Mon Sep 17 00:00:00 2001 From: Mark Lemay Date: Wed, 23 Aug 2023 12:16:21 -0400 Subject: [PATCH 048/161] escape objectName for xml --- src/EnergyPlus/OutputReportTabular.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 78798f7a909..cfd7b32dc93 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -16640,7 +16640,7 @@ void WriteReportHeaders(EnergyPlusData &state, tbl_stream << "prevReportName << ">\n"; // close the last element if it was used. } tbl_stream << "<" << ConvertToElementTag(modifiedReportName) << ">\n"; - tbl_stream << " " << objectName << "\n"; + tbl_stream << " " << ConvertToEscaped(objectName) << "\n"; ort->prevReportName = ConvertToElementTag(modifiedReportName); // save the name for next time } } From 3337909625796e1abb2600e5226c002b0f4bc37d Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Thu, 24 Aug 2023 08:51:04 -0400 Subject: [PATCH 049/161] generated UpdateMeters test --- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 122 +++++--------------- 1 file changed, 26 insertions(+), 96 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index 715ab8bb117..d131f75b357 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -5281,15 +5281,11 @@ namespace OutputProcessor { TEST_F(EnergyPlusFixture, OutputProcessor_UpdateMeters) { std::string const idf_objects = delimited_string({ - "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,detailed;", - "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,detailed;", - "Output:Variable,*,Zone Ideal Loads Supply Air Total Heating Energy,runperiod;", - "Output:Meter:MeterFileOnly,DistrictHeating:HVAC,hourly;", + "Output:Meter,Electricity:Facility,timestep;", }); ASSERT_TRUE(process_idf(idf_objects)); - // Setup so that UpdateDataandReport can be called. state->dataGlobal->DayOfSim = 365; state->dataGlobal->DayOfSimChr = "365"; state->dataEnvrn->Month = 12; @@ -5314,123 +5310,57 @@ namespace OutputProcessor { if (state->dataEnvrn->DayOfMonth == state->dataWeatherManager->EndDayOfMonth(state->dataEnvrn->Month)) { state->dataEnvrn->EndMonthFlag = true; } + // OutputProcessor::TimeValue.allocate(2); + auto timeStep = 1.0 / 6; + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); - state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).CurMinute = 10; - state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).CurMinute = 10; - - int MDHM; // Month,Day,Hour,Minute - General::EncodeMonDayHrMin(MDHM, state->dataEnvrn->Month, state->dataEnvrn->DayOfMonth, state->dataGlobal->HourOfDay, 10); - - state->dataGlobal->WarmupFlag = true; - - ReportOutputFileHeaders(*state); + state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).CurMinute = 50; + state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).CurMinute = 50; GetReportVariableInput(*state); - Array1D PurchAir; // Used to specify purchased air parameters - PurchAir.allocate(1); + Real64 light_consumption = 999; SetupOutputVariable(*state, - "Zone Ideal Loads Supply Air Total Heating Energy", + "Lights Electricity Energy", OutputProcessor::Unit::J, - PurchAir(1).TotHeatEnergy, - OutputProcessor::SOVTimeStepType::System, + light_consumption, + OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, - PurchAir(1).Name, - {}, - "DISTRICTHEATING", - "Heating", + "SPACE1-1 LIGHTS 1", {}, - "System"); - - PurchAir(1).TotHeatEnergy = 1.1; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - //UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 1.3; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - //UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 1.5; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 1.7; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 1.9; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 2.2; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - state->dataGlobal->WarmupFlag = false; - - PurchAir(1).TotHeatEnergy = 2.4; + "Electricity", + "InteriorLights", + "GeneralLights", + "Building", + "SPACE1-1", + 1, + 1); + state->dataGlobal->WarmupFlag = true; UpdateMeterReporting(*state); UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - auto const stream_str = state->files.eso.get_output(); - int x = 5; compare_eso_stream(delimited_string( { - "1,5,Environment Title[],Latitude[deg],Longitude[deg],Time Zone[],Elevation[m]", - "2,8,Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],Hour[],StartMinute[],EndMinute[],DayType", - "3,5,Cumulative Day of Simulation[],Month[],Day of Month[],DST Indicator[1=yes 0=no],DayType ! When Daily Report Variables " - "Requested", - "4,2,Cumulative Days of Simulation[],Month[] ! When Monthly Report Variables Requested", - "5,1,Cumulative Days of Simulation[] ! When Run Period Report Variables Requested", - "6,1,Calendar Year of Simulation[] ! When Annual Report Variables Requested", - "7,1,,Zone Ideal Loads Supply Air Total Heating Energy [J] !Each Call", - "56,11,,Zone Ideal Loads Supply Air Total Heating Energy [J] !RunPeriod [Value,Min,Month,Day,Hour,Minute,Max,Month,Day,Hour,Minute]", - "5,365", - "5,365", - "5,365", - "5,365", - "5,365", - "5,365", - "5,365", + "2,1,Electricity:Facility [J] !TimeStep", + ",365,12,31, 0,24,50.00,60.00,Tuesday", + "2,0.0", }, "\n")); - PurchAir(1).TotHeatEnergy = 100.0; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 200.0; - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - - PurchAir(1).TotHeatEnergy = 300.0; + state->dataGlobal->WarmupFlag = false; UpdateMeterReporting(*state); UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - // UpdateMeters(*state, MDHM); - x = 5; compare_eso_stream(delimited_string( { - "2,365,12,31, 0,24, 0.00,10.00,Tuesday", - "7,100.0", - "2,365,12,31, 0,24,10.00,20.00,Tuesday", - "7,200.0", - "5,365", - "56,300.0,100.0,12,31,24,10,200.0,12,31,24,20", + ",365,12,31, 0,24, 0.00,10.00,Tuesday", + "2,999.0", }, "\n")); + } TEST_F(EnergyPlusFixture, OutputProcessor_GenOutputVariablesAuditReport) From cebd1ba4bac611efdff9ef2b0d5e5e19abd9076a Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Thu, 24 Aug 2023 12:54:53 -0500 Subject: [PATCH 050/161] Consolidate ZoneSizingData --- src/EnergyPlus/DataSizing.hh | 360 ++++++++++--------------- src/EnergyPlus/General.cc | 20 ++ src/EnergyPlus/General.hh | 3 + src/EnergyPlus/ZoneEquipmentManager.cc | 24 +- 4 files changed, 181 insertions(+), 226 deletions(-) diff --git a/src/EnergyPlus/DataSizing.hh b/src/EnergyPlus/DataSizing.hh index d84fef2dbf6..d66b6f73a75 100644 --- a/src/EnergyPlus/DataSizing.hh +++ b/src/EnergyPlus/DataSizing.hh @@ -339,146 +339,66 @@ namespace DataSizing { ZoneSizing zoneSizingMethod = ZoneSizing::Invalid; // load to sizing on: sensible, latent, sensibleandlatent, sensibleonlynolatent }; - struct ZoneSizingData + // based on ZoneSizingData but only member variables that are actually used by terminal unit sizing + struct TermUnitZoneSizingCommonData { - // Members - std::string ZoneName; // name of a zone - std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit) - only assigned for TermUnitFinalZoneSizing - std::string CoolDesDay; // name of a cooling design day - std::string HeatDesDay; // name of a heating design day - int ZnCoolDgnSAMethod = 0; // choice of how to get zone cooling design air temperature; - // 1 = specify supply air temperature, 2 = calculate from the temperature difference - int ZnHeatDgnSAMethod = 0; // choice of how to get zone heating design air temperature; - // 1 = specify supply air temperature, 2 = calculate from the temperature difference - Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C] - Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C] - Real64 CoolDesTempDiff = 0.0; // zone design cooling supply air temperature difference [deltaC] - Real64 HeatDesTempDiff = 0.0; // zone design heating supply air temperature difference [deltaC] - Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir] - Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir] - int ZoneAirDistributionIndex = 0; // index to DesignSpecification:ZoneAirDistribution object - int ZoneDesignSpecOAIndex = 0; // index to DesignSpecification:OutdoorAir object - Real64 DesOAFlowPPer = 0.0; // design outside air flow per person in zone [m3/s] (average for zone across spaces) - Real64 DesOAFlowPerArea = 0.0; // design outside air flow per zone area [m3/s / m2] (average for zone across spaces) - AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone cooling design air flow rates; - // 0 = calc from des day simulation; 1 = m3/s per zone, user input; 2 = apply limits to air flow rate from DD calc - Real64 InpDesCoolAirFlow = 0.0; // design zone supply air flow rate [m3/s] - Real64 DesCoolMinAirFlowPerArea = 0.0; // design cooling minimum air flow rate per zone area [m3/s / m2] - Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s] - Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction - // (of the cooling design air flow rate) - AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone heating design air flow rates; - // 1 = calc from des day simulation; 2 = m3/s per zone, user input - // 3 = apply limits to air flow rate from DD calc - Real64 InpDesHeatAirFlow = 0.0; // design zone heating supply air flow rate [m3/s] - Real64 DesHeatMaxAirFlowPerArea = 0.0; // design heating maximum air flow rate per zone area [m3/s / m2] - Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s] - Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction - // (of the cooling design air flow rate) - Real64 HeatSizingFactor = 0.0; // the zone heating sizing ratio - Real64 CoolSizingFactor = 0.0; // the zone cooling sizing ratio - bool AccountForDOAS = false; // False: do nothing; True: calculate the effect of a DOA system on the zone sizing arrays - DOASControl DOASControlStrategy = DOASControl::Invalid; // 0=neutral ventilation air; 1=neutral dehumidified ventilation air, 2 = cooled air; - // 3=supply cold ventilation air - Real64 DOASLowSetpoint = 0.0; // Dedicated Outside Air Low Setpoint for Design [C] - Real64 DOASHighSetpoint = 0.0; // Dedicated Outside Air High Setpoint for Design [C] - int ZoneNum = 0; // index into the Zone data array (in DataHeatBalance) - Real64 DesHeatMassFlow = 0.0; // zone design heating air mass flow rate [kg/s] - Real64 DesHeatMassFlowNoOA = 0.0; // zone design heating air mass flow rate without applying MinOA as a limit [kg/s] - Real64 DesHeatOAFlowFrac = 0.0; // zone design heating OA air volume fraction [-] - bool EMSOverrideDesHeatMassOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesHeatMassFlow = 0.0; // Value EMS directing to use for Design Heating air mass flow [kg/s] - Real64 DesCoolMassFlow = 0.0; // zone design cooling air mass flow rate [kg/s] - Real64 DesCoolMassFlowNoOA = 0.0; // zone design cooling air mass flow rate without applying MinOA as a limit [kg/s] - Real64 DesCoolOAFlowFrac = 0.0; // zone design cooling OA air volume fraction [-] - bool EMSOverrideDesCoolMassOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesCoolMassFlow = 0.0; // Value EMS directing to use for Design Cooling air mass flow [kg/s] - Real64 DesHeatLoad = 0.0; // zone design heating load including sizing factor and scaled to match airflow sizing [W] - Real64 NonAirSysDesHeatLoad = 0.0; // base zone design heating load including sizing factor [W] - bool EMSOverrideDesHeatLoadOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesHeatLoad = 0.0; // Value EMS directing to use for zone design heating load [W] - Real64 DesCoolLoad = 0.0; // zone design cooling load including sizing factor and scaled to match airflow sizing [W] - Real64 NonAirSysDesCoolLoad = 0.0; // base zone design cooling load including sizing factor [W] - bool EMSOverrideDesCoolLoadOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesCoolLoad = 0.0; // Value EMS directing to use for zone design cooling load [W] - Real64 DesHeatDens = 0.0; // zone design heating air density [kg/m3] - Real64 DesCoolDens = 0.0; // zone design cooling air density [kg/m3] + std::string ZoneName; // name of a zone + std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit) - only assigned for TermUnitFinalZoneSizing + Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C] + Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C] + Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir] + Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir] + Real64 DesOAFlowPPer = 0.0; // design outside air flow per person in zone [m3/s] (average for zone across spaces) + Real64 DesOAFlowPerArea = 0.0; // design outside air flow per zone area [m3/s / m2] (average for zone across spaces) + Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s] + Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction (of the cooling design air flow rate) + Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s] + Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction (of the cooling design air flow rate) + int ZoneNum = 0; // index into the Zone data array (in DataHeatBalance) + Real64 DesHeatMassFlow = 0.0; // zone design heating air mass flow rate [kg/s] + Real64 DesHeatMassFlowNoOA = 0.0; // zone design heating air mass flow rate without applying MinOA as a limit [kg/s] + Real64 DesHeatOAFlowFrac = 0.0; // zone design heating OA air volume fraction [-] + Real64 DesCoolMassFlow = 0.0; // zone design cooling air mass flow rate [kg/s] + Real64 DesCoolMassFlowNoOA = 0.0; // zone design cooling air mass flow rate without applying MinOA as a limit [kg/s] + Real64 DesCoolOAFlowFrac = 0.0; // zone design cooling OA air volume fraction [-] + Real64 DesHeatLoad = 0.0; // zone design heating load including sizing factor and scaled to match airflow sizing [W] + Real64 NonAirSysDesHeatLoad = 0.0; // base zone design heating load including sizing factor [W] + Real64 DesCoolLoad = 0.0; // zone design cooling load including sizing factor and scaled to match airflow sizing [W] + Real64 NonAirSysDesCoolLoad = 0.0; // base zone design cooling load including sizing factor [W] Real64 DesHeatVolFlow = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing [m3/s] Real64 DesHeatVolFlowNoOA = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing // without MinOA limit [m3/s] Real64 NonAirSysDesHeatVolFlow = 0.0; // base zone design heating air volume flow rate including sizing factor [m3/s] - bool EMSOverrideDesHeatVolOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesHeatVolFlow = 0.0; // Value EMS directing to use for Design Heating air volume flow [m3/s] Real64 DesCoolVolFlow = 0.0; // zone design cooling air volume flow rate [m3/s] Real64 DesCoolVolFlowNoOA = 0.0; // zone design cooling air volume flow rate without applying MinOA as a limit [m3/s] Real64 NonAirSysDesCoolVolFlow = 0.0; // base zone design cooling air volume flow rate including sizing factor [m3/s] - bool EMSOverrideDesCoolVolOn = false; // true if EMS is acting on this structure - Real64 EMSValueDesCoolVolFlow = 0.0; // Value EMS directing to use for Design cooling air volume flow [m3/s] Real64 DesHeatVolFlowMax = 0.0; // zone design heating maximum air volume flow rate [m3/s] Real64 DesCoolVolFlowMin = 0.0; // zone design cooling minimum air volume flow rate [m3/s] - Real64 DesHeatCoilInTemp = 0.0; // zone heating coil design air inlet temperature [C] - Real64 DesCoolCoilInTemp = 0.0; // zone cooling coil design air inlet temperature [C] - Real64 DesHeatCoilInHumRat = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg] - Real64 DesCoolCoilInHumRat = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg] Real64 DesHeatCoilInTempTU = 0.0; // zone heating coil design air inlet temperature (supply air)([C] Real64 DesCoolCoilInTempTU = 0.0; // zone cooling coil design air inlet temperature (supply air)[C] Real64 DesHeatCoilInHumRatTU = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg] Real64 DesCoolCoilInHumRatTU = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg] - Real64 HeatMassFlow = 0.0; // current zone heating air mass flow rate (HVAC time step) - Real64 CoolMassFlow = 0.0; // current zone cooling air mass flow rate (HVAC time step) - Real64 HeatLoad = 0.0; // current zone heating load (HVAC time step) - Real64 CoolLoad = 0.0; // current zone heating load (HVAC time step) - Real64 HeatZoneTemp = 0.0; // current zone temperature (heating, time step) - Real64 HeatOutTemp = 0.0; // current outdoor temperature (heating, time step) - Real64 HeatZoneRetTemp = 0.0; // current zone return temperature (heating, time step) - Real64 HeatTstatTemp = 0.0; // current zone thermostat temperature (heating, time step) - Real64 CoolZoneTemp = 0.0; // current zone temperature (cooling, time step) - Real64 CoolOutTemp = 0.0; // current Outdoor temperature (cooling, time step) - Real64 CoolZoneRetTemp = 0.0; // current zone return temperature (cooling, time step) - Real64 CoolTstatTemp = 0.0; // current zone thermostat temperature (cooling, time step) - Real64 HeatZoneHumRat = 0.0; // current zone humidity ratio (heating, time step) - Real64 CoolZoneHumRat = 0.0; // current zone humidity ratio (cooling, time step) - Real64 HeatOutHumRat = 0.0; // current outdoor humidity ratio (heating, time step) - Real64 CoolOutHumRat = 0.0; // current outdoor humidity ratio (cooling, time step) Real64 ZoneTempAtHeatPeak = 0.0; // zone temp at max heating [C] Real64 ZoneRetTempAtHeatPeak = 0.0; // zone return temp at max heating [C] - Real64 OutTempAtHeatPeak = 0.0; // outdoor temperature at max heating [C] Real64 ZoneTempAtCoolPeak = 0.0; // zone temp at max cooling [C] Real64 ZoneRetTempAtCoolPeak = 0.0; // zone return temp at max cooling [C] - Real64 OutTempAtCoolPeak = 0.0; // outdoor temperature at max cooling [C] Real64 ZoneHumRatAtHeatPeak = 0.0; // zone humidity ratio at max heating [kg/kg] Real64 ZoneHumRatAtCoolPeak = 0.0; // zone humidity ratio at max cooling [kg/kg] - Real64 OutHumRatAtHeatPeak = 0.0; // outdoor humidity at max heating [kg/kg] - Real64 OutHumRatAtCoolPeak = 0.0; // outdoor humidity at max cooling [kg/kg] int TimeStepNumAtHeatMax = 0; // time step number (in day) at Heating peak int TimeStepNumAtCoolMax = 0; // time step number (in day) at cooling peak int HeatDDNum = 0; // design day index of design day causing heating peak int CoolDDNum = 0; // design day index of design day causing cooling peak - std::string cHeatDDDate; // date of design day causing heating peak - std::string cCoolDDDate; // date of design day causing cooling peak Real64 MinOA = 0.0; // design minimum outside air in m3/s Real64 DesCoolMinAirFlow2 = 0.0; // design cooling minimum air flow rate [m3/s] derived from DesCoolMinAirFlowPerArea Real64 DesHeatMaxAirFlow2 = 0.0; // design heating maximum air flow rate [m3/s] derived from DesHeatMaxAirFlowPerArea - Array1D HeatFlowSeq; // daily sequence of zone heating air mass flow rate (zone time step) [kg/s] - Array1D HeatFlowSeqNoOA; // daily sequence of zone heating air mass flow rate (zone time step) without MinOA limit [kg/s] - Array1D CoolFlowSeq; // daily sequence of zone cooling air mass flow rate (zone time step) [kg/s] - Array1D CoolFlowSeqNoOA; // daily sequence of zone cooling air mass flow rate (zone time step) without MinOA limit [kg/s] - Array1D HeatLoadSeq; // daily sequence of zone heating load (zone time step) - Array1D CoolLoadSeq; // daily sequence of zone cooling load (zone time step) - Array1D HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step) - Array1D HeatOutTempSeq; // daily sequence of outdoor temperatures (heating, zone time step) - Array1D HeatZoneRetTempSeq; // daily sequence of zone return temperatures (heating, zone time step) - Array1D HeatTstatTempSeq; // daily sequence of zone thermostat temperatures (heating, zone time step) - Array1D DesHeatSetPtSeq; // daily sequence of indoor set point temperatures (zone time step) - Array1D CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step) - Array1D CoolOutTempSeq; // daily sequence of outdoor temperatures (cooling, zone time step) - Array1D CoolZoneRetTempSeq; // daily sequence of zone return temperatures (cooling, zone time step) - Array1D CoolTstatTempSeq; // daily sequence of zone thermostat temperatures (cooling, zone time step) - Array1D DesCoolSetPtSeq; // daily sequence of indoor set point temperatures (zone time step) - Array1D HeatZoneHumRatSeq; // daily sequence of zone humidity ratios (heating, zone time step) - Array1D CoolZoneHumRatSeq; // daily sequence of zone humidity ratios (cooling, zone time step) - Array1D HeatOutHumRatSeq; // daily sequence of outdoor humidity ratios (heating, zone time step) - Array1D CoolOutHumRatSeq; // daily sequence of outdoor humidity ratios (cooling, zone time step) + EPVector HeatFlowSeq; // daily sequence of zone heating air mass flow rate (zone time step) [kg/s] + EPVector HeatFlowSeqNoOA; // daily sequence of zone heating air mass flow rate (zone time step) without MinOA limit [kg/s] + EPVector CoolFlowSeq; // daily sequence of zone cooling air mass flow rate (zone time step) [kg/s] + EPVector CoolFlowSeqNoOA; // daily sequence of zone cooling air mass flow rate (zone time step) without MinOA limit [kg/s] + EPVector HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step) + EPVector HeatZoneRetTempSeq; // daily sequence of zone return temperatures (heating, zone time step) + EPVector CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step) + EPVector CoolZoneRetTempSeq; // daily sequence of zone return temperatures (cooling, zone time step) Real64 ZoneADEffCooling = 1.0; // the zone air distribution effectiveness in cooling mode Real64 ZoneADEffHeating = 1.0; // the zone air distribution effectiveness in heating mode Real64 ZoneSecondaryRecirculation = 0.0; // the zone secondary air recirculation fraction @@ -491,29 +411,114 @@ namespace DataSizing { Real64 TotalOAFromArea = 0.0; // Zone OA required based on floor area Real64 TotPeopleInZone = 0.0; // total number of people in the zone Real64 TotalZoneFloorArea = 0.0; // total zone floor area - Real64 ZonePeakOccupancy = 0.0; // zone peak occupancy based on max schedule value Real64 SupplyAirAdjustFactor = 1.0; // supply air adjustment factor for next time step if OA is capped Real64 ZpzClgByZone = 0.0; // OA Std 62.1 required fraction in cooling mode ? should this be ZdzClgByZone Real64 ZpzHtgByZone = 0.0; // OA Std 62.1 required fraction in heating mode ? should this be ZdzHtgByZone - Real64 VozClgByZone = 0.0; // value of required cooling vent to zone, used in 62.1 tabular report, already includes people diversity term - Real64 VozHtgByZone = 0.0; // value of required heating vent to zone, used in 62.1 tabular report, already includes people diversity term - Real64 DOASHeatLoad = 0.0; // current heating load from DOAS supply air [W] - Real64 DOASCoolLoad = 0.0; // current cooling load from DOAS supply air [W] - Real64 DOASHeatAdd = 0.0; // current heat addition rate from DOAS supply air [W] - Real64 DOASLatAdd = 0.0; // current latent heat addition rate from DOAS supply air [W] - Real64 DOASSupMassFlow = 0.0; // current mass flow rate of DOAS supply air [kg/s] - Real64 DOASSupTemp = 0.0; // current DOAS supply air temperature [C] - Real64 DOASSupHumRat = 0.0; // current DOAS supply air humidity ratio [kgWater/kgDryAir] - Real64 DOASTotCoolLoad = 0.0; // current total cooling load imposed by DOAS supply air [W] - bool VpzMinByZoneSPSized = false; // is Vpz_min sized using the 62.1 Standard Simplified Procedure - Array1D DOASHeatLoadSeq; // daily sequence of zone DOAS heating load (zone time step) [W] - Array1D DOASCoolLoadSeq; // daily sequence of zone DOAS cooling load (zone time step) [W] - Array1D DOASHeatAddSeq; // daily sequence of zone DOAS heat addition rate (zone time step) [W] - Array1D DOASLatAddSeq; // daily sequence of zone DOAS latent heat addition rate (zone time step) [W] - Array1D DOASSupMassFlowSeq; // daily sequence of zone DOAS supply mass flow rate (zone time step) [Kg/s] - Array1D DOASSupTempSeq; // daily sequence of zone DOAS supply temperature (zone time step) [C] - Array1D DOASSupHumRatSeq; // daily sequence of zone DOAS supply humidity ratio (zone time step) [kgWater/kgDryAir] - Array1D DOASTotCoolLoadSeq; // daily sequence of zone DOAS total cooling load (zone time step) [W] + Real64 VozClgByZone = 0.0; // value of required cooling vent to zone, used in 62.1 tabular report, already includes people diversity term + Real64 VozHtgByZone = 0.0; // value of required heating vent to zone, used in 62.1 tabular report, already includes people diversity term + bool VpzMinByZoneSPSized = false; // is Vpz_min sized using the 62.1 Standard Simplified Procedure + Real64 ZoneSizThermSetPtHi = 0.0; // highest zone thermostat setpoint during zone sizing calcs + Real64 ZoneSizThermSetPtLo = 1000.0; // lowest zone thermostat setpoint during zone sizing calcs + }; + + struct ZoneSizingData : TermUnitZoneSizingCommonData + { + // Members + std::string CoolDesDay; // name of a cooling design day + std::string HeatDesDay; // name of a heating design day + int ZnCoolDgnSAMethod = 0; // choice of how to get zone cooling design air temperature; + // 1 = specify supply air temperature, 2 = calculate from the temperature difference + int ZnHeatDgnSAMethod = 0; // choice of how to get zone heating design air temperature; + // 1 = specify supply air temperature, 2 = calculate from the temperature difference + Real64 CoolDesTempDiff = 0.0; // zone design cooling supply air temperature difference [deltaC] + Real64 HeatDesTempDiff = 0.0; // zone design heating supply air temperature difference [deltaC] + int ZoneAirDistributionIndex = 0; // index to DesignSpecification:ZoneAirDistribution object + int ZoneDesignSpecOAIndex = 0; // index to DesignSpecification:OutdoorAir object + AirflowSizingMethod CoolAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone cooling design air flow rates; + // 0 = calc from des day simulation; 1 = m3/s per zone, user input; 2 = apply limits to air flow rate from DD calc + Real64 InpDesCoolAirFlow = 0.0; // design zone supply air flow rate [m3/s] + Real64 DesCoolMinAirFlowPerArea = 0.0; // design cooling minimum air flow rate per zone area [m3/s / m2] + AirflowSizingMethod HeatAirDesMethod = AirflowSizingMethod::Invalid; // choice of how to get zone heating design air flow rates; + // 1 = calc from des day simulation; 2 = m3/s per zone, user input + // 3 = apply limits to air flow rate from DD calc + Real64 InpDesHeatAirFlow = 0.0; // design zone heating supply air flow rate [m3/s] + Real64 DesHeatMaxAirFlowPerArea = 0.0; // design heating maximum air flow rate per zone area [m3/s / m2] + Real64 HeatSizingFactor = 0.0; // the zone heating sizing ratio + Real64 CoolSizingFactor = 0.0; // the zone cooling sizing ratio + bool AccountForDOAS = false; // False: do nothing; True: calculate the effect of a DOA system on the zone sizing arrays + DOASControl DOASControlStrategy = DOASControl::Invalid; // 0=neutral ventilation air; 1=neutral dehumidified ventilation air, 2 = cooled air; + // 3=supply cold ventilation air + Real64 DOASLowSetpoint = 0.0; // Dedicated Outside Air Low Setpoint for Design [C] + Real64 DOASHighSetpoint = 0.0; // Dedicated Outside Air High Setpoint for Design [C] + bool EMSOverrideDesHeatMassOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesHeatMassFlow = 0.0; // Value EMS directing to use for Design Heating air mass flow [kg/s] + bool EMSOverrideDesCoolMassOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesCoolMassFlow = 0.0; // Value EMS directing to use for Design Cooling air mass flow [kg/s] + bool EMSOverrideDesHeatLoadOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesHeatLoad = 0.0; // Value EMS directing to use for zone design heating load [W] + bool EMSOverrideDesCoolLoadOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesCoolLoad = 0.0; // Value EMS directing to use for zone design cooling load [W] + Real64 DesHeatDens = 0.0; // zone design heating air density [kg/m3] + Real64 DesCoolDens = 0.0; // zone design cooling air density [kg/m3] + bool EMSOverrideDesHeatVolOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesHeatVolFlow = 0.0; // Value EMS directing to use for Design Heating air volume flow [m3/s] + bool EMSOverrideDesCoolVolOn = false; // true if EMS is acting on this structure + Real64 EMSValueDesCoolVolFlow = 0.0; // Value EMS directing to use for Design cooling air volume flow [m3/s] + Real64 DesHeatCoilInTemp = 0.0; // zone heating coil design air inlet temperature [C] + Real64 DesCoolCoilInTemp = 0.0; // zone cooling coil design air inlet temperature [C] + Real64 DesHeatCoilInHumRat = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg] + Real64 DesCoolCoilInHumRat = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg] + Real64 HeatMassFlow = 0.0; // current zone heating air mass flow rate (HVAC time step) + Real64 CoolMassFlow = 0.0; // current zone cooling air mass flow rate (HVAC time step) + Real64 HeatLoad = 0.0; // current zone heating load (HVAC time step) + Real64 CoolLoad = 0.0; // current zone heating load (HVAC time step) + Real64 HeatZoneTemp = 0.0; // current zone temperature (heating, time step) + Real64 HeatOutTemp = 0.0; // current outdoor temperature (heating, time step) + Real64 HeatZoneRetTemp = 0.0; // current zone return temperature (heating, time step) + Real64 HeatTstatTemp = 0.0; // current zone thermostat temperature (heating, time step) + Real64 CoolZoneTemp = 0.0; // current zone temperature (cooling, time step) + Real64 CoolOutTemp = 0.0; // current Outdoor temperature (cooling, time step) + Real64 CoolZoneRetTemp = 0.0; // current zone return temperature (cooling, time step) + Real64 CoolTstatTemp = 0.0; // current zone thermostat temperature (cooling, time step) + Real64 HeatZoneHumRat = 0.0; // current zone humidity ratio (heating, time step) + Real64 CoolZoneHumRat = 0.0; // current zone humidity ratio (cooling, time step) + Real64 HeatOutHumRat = 0.0; // current outdoor humidity ratio (heating, time step) + Real64 CoolOutHumRat = 0.0; // current outdoor humidity ratio (cooling, time step) + Real64 OutTempAtHeatPeak = 0.0; // outdoor temperature at max heating [C] + Real64 OutTempAtCoolPeak = 0.0; // outdoor temperature at max cooling [C] + Real64 OutHumRatAtHeatPeak = 0.0; // outdoor humidity at max heating [kg/kg] + Real64 OutHumRatAtCoolPeak = 0.0; // outdoor humidity at max cooling [kg/kg] + std::string cHeatDDDate; // date of design day causing heating peak + std::string cCoolDDDate; // date of design day causing cooling peak + Array1D HeatLoadSeq; // daily sequence of zone heating load (zone time step) + Array1D CoolLoadSeq; // daily sequence of zone cooling load (zone time step) + Array1D HeatOutTempSeq; // daily sequence of outdoor temperatures (heating, zone time step) + Array1D HeatTstatTempSeq; // daily sequence of zone thermostat temperatures (heating, zone time step) + Array1D DesHeatSetPtSeq; // daily sequence of indoor set point temperatures (zone time step) + Array1D CoolOutTempSeq; // daily sequence of outdoor temperatures (cooling, zone time step) + Array1D CoolTstatTempSeq; // daily sequence of zone thermostat temperatures (cooling, zone time step) + Array1D DesCoolSetPtSeq; // daily sequence of indoor set point temperatures (zone time step) + Array1D HeatZoneHumRatSeq; // daily sequence of zone humidity ratios (heating, zone time step) + Array1D CoolZoneHumRatSeq; // daily sequence of zone humidity ratios (cooling, zone time step) + Array1D HeatOutHumRatSeq; // daily sequence of outdoor humidity ratios (heating, zone time step) + Array1D CoolOutHumRatSeq; // daily sequence of outdoor humidity ratios (cooling, zone time step) + Real64 ZonePeakOccupancy = 0.0; // zone peak occupancy based on max schedule value + Real64 DOASHeatLoad = 0.0; // current heating load from DOAS supply air [W] + Real64 DOASCoolLoad = 0.0; // current cooling load from DOAS supply air [W] + Real64 DOASHeatAdd = 0.0; // current heat addition rate from DOAS supply air [W] + Real64 DOASLatAdd = 0.0; // current latent heat addition rate from DOAS supply air [W] + Real64 DOASSupMassFlow = 0.0; // current mass flow rate of DOAS supply air [kg/s] + Real64 DOASSupTemp = 0.0; // current DOAS supply air temperature [C] + Real64 DOASSupHumRat = 0.0; // current DOAS supply air humidity ratio [kgWater/kgDryAir] + Real64 DOASTotCoolLoad = 0.0; // current total cooling load imposed by DOAS supply air [W] + Array1D DOASHeatLoadSeq; // daily sequence of zone DOAS heating load (zone time step) [W] + Array1D DOASCoolLoadSeq; // daily sequence of zone DOAS cooling load (zone time step) [W] + Array1D DOASHeatAddSeq; // daily sequence of zone DOAS heat addition rate (zone time step) [W] + Array1D DOASLatAddSeq; // daily sequence of zone DOAS latent heat addition rate (zone time step) [W] + Array1D DOASSupMassFlowSeq; // daily sequence of zone DOAS supply mass flow rate (zone time step) [Kg/s] + Array1D DOASSupTempSeq; // daily sequence of zone DOAS supply temperature (zone time step) [C] + Array1D DOASSupHumRatSeq; // daily sequence of zone DOAS supply humidity ratio (zone time step) [kgWater/kgDryAir] + Array1D DOASTotCoolLoadSeq; // daily sequence of zone DOAS total cooling load (zone time step) [W] // Latent heat variables Real64 HeatLoadNoDOAS = 0.0; // current zone heating load no DOAS (HVAC time step) @@ -570,8 +575,8 @@ namespace DataSizing { Array1D LatentCoolLoadSeq; // daily sequence of zone latent cooling load (zone time step) [W] Array1D HeatLatentLoadNoDOASSeq; // daily sequence of zone latent heating load No DOAS (zone time step) [W] Array1D CoolLatentLoadNoDOASSeq; // daily sequence of zone latent cooling load No DOAS (zone time step) [W] - Array1D LatentCoolFlowSeq; // daily sequence of zone latent cooling supply mass flow rate (zone time step) [Kg/s] - Array1D LatentHeatFlowSeq; // daily sequence of zone latent heating supply mass flow rate (zone time step) [Kg/s] + EPVector LatentCoolFlowSeq; // daily sequence of zone latent cooling supply mass flow rate (zone time step) [Kg/s] + EPVector LatentHeatFlowSeq; // daily sequence of zone latent heating supply mass flow rate (zone time step) [Kg/s] bool zoneLatentSizing = false; // trigger to do RH control during zone sizing Real64 zoneRHDehumidifySetPoint = 50.0; // RH dehumidifying set point used during sizing, default to 50% int zoneRHDehumidifySchIndex = 0; // index to zone RH dehumidifying schedule used for zone sizing @@ -598,97 +603,16 @@ namespace DataSizing { std::string HeatPeakDateHrMin; // date:hr:min of heating peak std::string LatCoolPeakDateHrMin; // date:hr:min of latent cooling peak std::string LatHeatPeakDateHrMin; // date:hr:min of latent heating peak - Real64 ZoneSizThermSetPtHi = 0.0; // highest zone thermostat setpoint during zone sizing calcs - Real64 ZoneSizThermSetPtLo = 1000.0; // lowest zone thermostat setpoint during zone sizing calcs void zeroMemberData(); void allocateMemberArrays(int numOfTimeStepInDay); }; - // based on ZoneSizingData but only member variables that are actually used by terminal unit sizing - struct TermUnitZoneSizingData + struct TermUnitZoneSizingData : TermUnitZoneSizingCommonData { - std::string ZoneName; // name of a zone - std::string ADUName; // Terminal Unit Name (air distribution unit or direct air unit) - only assigned for TermUnitFinalZoneSizing - Real64 CoolDesTemp = 0.0; // zone design cooling supply air temperature [C] - Real64 HeatDesTemp = 0.0; // zone design heating supply air temperature [C] - Real64 CoolDesHumRat = 0.0; // zone design cooling supply air humidity ratio [kgWater/kgDryAir] - Real64 HeatDesHumRat = 0.0; // zone design heating supply air humidity ratio [kgWater/kgDryAir] - Real64 DesOAFlowPPer = 0.0; // design outside air flow per person in zone [m3/s] (average for zone across spaces) - Real64 DesOAFlowPerArea = 0.0; // design outside air flow per zone area [m3/s / m2] (average for zone across spaces) - Real64 DesCoolMinAirFlow = 0.0; // design cooling minimum air flow rate [m3/s] - Real64 DesCoolMinAirFlowFrac = 0.0; // design cooling minimum air flow rate fraction (of the cooling design air flow rate) - Real64 DesHeatMaxAirFlow = 0.0; // design heating maximum air flow rate [m3/s] - Real64 DesHeatMaxAirFlowFrac = 0.0; // design heating maximum air flow rate fraction (of the cooling design air flow rate) - int ZoneNum = 0; // index into the Zone data array (in DataHeatBalance) - Real64 DesHeatMassFlow = 0.0; // zone design heating air mass flow rate [kg/s] - Real64 DesHeatMassFlowNoOA = 0.0; // zone design heating air mass flow rate without applying MinOA as a limit [kg/s] - Real64 DesHeatOAFlowFrac = 0.0; // zone design heating OA air volume fraction [-] - Real64 DesCoolMassFlow = 0.0; // zone design cooling air mass flow rate [kg/s] - Real64 DesCoolMassFlowNoOA = 0.0; // zone design cooling air mass flow rate without applying MinOA as a limit [kg/s] - Real64 DesCoolOAFlowFrac = 0.0; // zone design cooling OA air volume fraction [-] - Real64 DesHeatLoad = 0.0; // zone design heating load including sizing factor and scaled to match airflow sizing [W] - Real64 NonAirSysDesHeatLoad = 0.0; // base zone design heating load including sizing factor [W] - Real64 DesCoolLoad = 0.0; // zone design cooling load including sizing factor and scaled to match airflow sizing [W] - Real64 NonAirSysDesCoolLoad = 0.0; // base zone design cooling load including sizing factor [W] - Real64 DesHeatVolFlow = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing [m3/s] - Real64 DesHeatVolFlowNoOA = 0.0; // zone design heating air volume flow rate including sizing factor and scaled to match airflow sizing - // without MinOA limit [m3/s] - Real64 NonAirSysDesHeatVolFlow = 0.0; // base zone design heating air volume flow rate including sizing factor [m3/s] - Real64 DesCoolVolFlow = 0.0; // zone design cooling air volume flow rate [m3/s] - Real64 DesCoolVolFlowNoOA = 0.0; // zone design cooling air volume flow rate without applying MinOA as a limit [m3/s] - Real64 NonAirSysDesCoolVolFlow = 0.0; // base zone design cooling air volume flow rate including sizing factor [m3/s] - Real64 DesHeatVolFlowMax = 0.0; // zone design heating maximum air volume flow rate [m3/s] - Real64 DesCoolVolFlowMin = 0.0; // zone design cooling minimum air volume flow rate [m3/s] - Real64 DesHeatCoilInTempTU = 0.0; // zone heating coil design air inlet temperature (supply air)([C] - Real64 DesCoolCoilInTempTU = 0.0; // zone cooling coil design air inlet temperature (supply air)[C] - Real64 DesHeatCoilInHumRatTU = 0.0; // zone heating coil design air inlet humidity ratio [kg/kg] - Real64 DesCoolCoilInHumRatTU = 0.0; // zone cooling coil design air inlet humidity ratio [kg/kg] - Real64 ZoneTempAtHeatPeak = 0.0; // zone temp at max heating [C] - Real64 ZoneRetTempAtHeatPeak = 0.0; // zone return temp at max heating [C] - Real64 ZoneTempAtCoolPeak = 0.0; // zone temp at max cooling [C] - Real64 ZoneRetTempAtCoolPeak = 0.0; // zone return temp at max cooling [C] - Real64 ZoneHumRatAtHeatPeak = 0.0; // zone humidity ratio at max heating [kg/kg] - Real64 ZoneHumRatAtCoolPeak = 0.0; // zone humidity ratio at max cooling [kg/kg] - int TimeStepNumAtHeatMax = 0; // time step number (in day) at Heating peak - int TimeStepNumAtCoolMax = 0; // time step number (in day) at cooling peak - int HeatDDNum = 0; // design day index of design day causing heating peak - int CoolDDNum = 0; // design day index of design day causing cooling peak - Real64 MinOA = 0.0; // design minimum outside air in m3/s - Real64 DesCoolMinAirFlow2 = 0.0; // design cooling minimum air flow rate [m3/s] derived from DesCoolMinAirFlowPerArea - Real64 DesHeatMaxAirFlow2 = 0.0; // design heating maximum air flow rate [m3/s] derived from DesHeatMaxAirFlowPerArea - EPVector HeatFlowSeq; // daily sequence of zone heating air mass flow rate (zone time step) [kg/s] - EPVector HeatFlowSeqNoOA; // daily sequence of zone heating air mass flow rate (zone time step) without MinOA limit [kg/s] - EPVector CoolFlowSeq; // daily sequence of zone cooling air mass flow rate (zone time step) [kg/s] - EPVector CoolFlowSeqNoOA; // daily sequence of zone cooling air mass flow rate (zone time step) without MinOA limit [kg/s] - EPVector HeatZoneTempSeq; // daily sequence of zone temperatures (heating, zone time step) - EPVector HeatZoneRetTempSeq; // daily sequence of zone return temperatures (heating, zone time step) - EPVector CoolZoneTempSeq; // daily sequence of zone temperatures (cooling, zone time step) - EPVector CoolZoneRetTempSeq; // daily sequence of zone return temperatures (cooling, zone time step) - Real64 ZoneADEffCooling = 1.0; // the zone air distribution effectiveness in cooling mode - Real64 ZoneADEffHeating = 1.0; // the zone air distribution effectiveness in heating mode - Real64 ZoneSecondaryRecirculation = 0.0; // the zone secondary air recirculation fraction - Real64 ZoneVentilationEff = 0.0; // zone ventilation efficiency - Real64 ZonePrimaryAirFraction = 0.0; // the zone primary air fraction for cooling based calculations - Real64 ZonePrimaryAirFractionHtg = 0.0; // the zone primary air fraction for heating based calculations - Real64 ZoneOAFracCooling = 0.0; // OA fraction in cooling mode - Real64 ZoneOAFracHeating = 0.0; // OA fraction in heating mode - Real64 TotalOAFromPeople = 0.0; // Zone OA required due to people - Real64 TotalOAFromArea = 0.0; // Zone OA required based on floor area - Real64 TotPeopleInZone = 0.0; // total number of people in the zone - Real64 TotalZoneFloorArea = 0.0; // total zone floor area - Real64 SupplyAirAdjustFactor = 1.0; // supply air adjustment factor for next time step if OA is capped - Real64 ZpzClgByZone = 0.0; // OA Std 62.1 required fraction in cooling mode ? should this be ZdzClgByZone - Real64 ZpzHtgByZone = 0.0; // OA Std 62.1 required fraction in heating mode ? should this be ZdzHtgByZone - Real64 VozClgByZone = 0.0; // value of required cooling vent to zone, used in 62.1 tabular report, already includes people diversity term - Real64 VozHtgByZone = 0.0; // value of required heating vent to zone, used in 62.1 tabular report, already includes people diversity term - bool VpzMinByZoneSPSized = false; // is Vpz_min sized using the 62.1 Standard Simplified Procedure - Real64 ZoneSizThermSetPtHi = 0.0; // highest zone thermostat setpoint during zone sizing calcs - Real64 ZoneSizThermSetPtLo = 1000.0; // lowest zone thermostat setpoint during zone sizing calcs - void scaleZoneCooling(Real64 ratio); void scaleZoneHeating(Real64 ratio); - void copyFromZoneSizing(ZoneSizingData const &sourceData); + void copyFromZoneSizing(DataSizing::ZoneSizingData const &sourceData); void allocateMemberArrays(int numOfTimeStepInDay); }; diff --git a/src/EnergyPlus/General.cc b/src/EnergyPlus/General.cc index aada86ee9af..b99a128019e 100644 --- a/src/EnergyPlus/General.cc +++ b/src/EnergyPlus/General.cc @@ -288,6 +288,26 @@ void SolveRoot(const EnergyPlusData &state, XRes = XTemp; } +void MovingAvg(EPVector &DataIn, int const NumItemsInAvg) +{ + if (NumItemsInAvg <= 1) return; // no need to average/smooth + + EPVector TempData; + TempData.allocate(2 * DataIn.size()); // a scratch array twice the size, bottom end duplicate of top end + + for (std::size_t i = 1; i <= DataIn.size(); ++i) { + TempData(i) = TempData(DataIn.size() + i) = DataIn(i); // initialize both bottom and top end + DataIn(i) = 0.0; + } + + for (std::size_t i = 1; i <= DataIn.size(); ++i) { + for (int j = 1; j <= NumItemsInAvg; ++j) { + DataIn(i) += TempData(DataIn.size() - NumItemsInAvg + i + j); // sum top end including NumItemsInAvg history terms + } + DataIn(i) /= NumItemsInAvg; // average to smooth over NumItemsInAvg window + } +} + void MovingAvg(Array1D &DataIn, int const NumItemsInAvg) { if (NumItemsInAvg <= 1) return; // no need to average/smooth diff --git a/src/EnergyPlus/General.hh b/src/EnergyPlus/General.hh index 7fb73cdbfc2..9f154a4a4ee 100644 --- a/src/EnergyPlus/General.hh +++ b/src/EnergyPlus/General.hh @@ -57,6 +57,7 @@ // EnergyPlus Headers #include +#include #include namespace EnergyPlus { @@ -97,6 +98,8 @@ namespace General { } } + void MovingAvg(EPVector &DataIn, int NumItemsInAvg); + void MovingAvg(Array1D &DataIn, int NumItemsInAvg); void ProcessDateString(EnergyPlusData &state, diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 9926bd155a1..b2bb32613df 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -2301,8 +2301,10 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zsFinalSizing.DesCoolVolFlow = zsCalcFinalSizing.DesCoolVolFlow * TotCoolSizMult; zsFinalSizing.DesCoolMassFlow = zsCalcFinalSizing.DesCoolMassFlow * TotCoolSizMult; zsFinalSizing.DesCoolLoad = zsCalcFinalSizing.DesCoolLoad * TotCoolSizMult; - zsFinalSizing.CoolFlowSeq = zsCalcFinalSizing.CoolFlowSeq * TotCoolSizMult; - zsFinalSizing.CoolLoadSeq = zsCalcFinalSizing.CoolLoadSeq * TotCoolSizMult; + for (int i = 0; i < (int)zsFinalSizing.CoolFlowSeq.size(); ++i) { + zsFinalSizing.CoolFlowSeq[i] = zsCalcFinalSizing.CoolFlowSeq[i] * TotCoolSizMult; + zsFinalSizing.CoolLoadSeq[i] = zsCalcFinalSizing.CoolLoadSeq[i] * TotCoolSizMult; + } Real64 OAFrac = zsFinalSizing.MinOA / zsFinalSizing.DesCoolVolFlow; OAFrac = min(1.0, max(0.0, OAFrac)); zsFinalSizing.DesCoolCoilInTemp = @@ -2322,8 +2324,10 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zoneSizing.DesCoolVolFlow = calcZoneSizing.DesCoolVolFlow * TotCoolSizMult; zoneSizing.DesCoolMassFlow = calcZoneSizing.DesCoolMassFlow * TotCoolSizMult; zoneSizing.DesCoolLoad = calcZoneSizing.DesCoolLoad * TotCoolSizMult; - zoneSizing.CoolFlowSeq = calcZoneSizing.CoolFlowSeq * TotCoolSizMult; - zoneSizing.CoolLoadSeq = calcZoneSizing.CoolLoadSeq * TotCoolSizMult; + for (int i = 0; i < (int)zoneSizing.CoolFlowSeq.size(); ++i) { + zoneSizing.CoolFlowSeq[i] = calcZoneSizing.CoolFlowSeq[i] * TotCoolSizMult; + zoneSizing.CoolLoadSeq[i] = calcZoneSizing.CoolLoadSeq[i] * TotCoolSizMult; + } Real64 OAFrac = zoneSizing.MinOA / zoneSizing.DesCoolVolFlow; OAFrac = min(1.0, max(0.0, OAFrac)); zoneSizing.DesCoolCoilInTemp = OAFrac * desDayWeath.Temp(TimeStepAtPeak) + (1.0 - OAFrac) * zoneSizing.ZoneTempAtCoolPeak; @@ -2477,8 +2481,10 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zsFinalSizing.DesHeatVolFlow = zsCalcFinalSizing.DesHeatVolFlow * TotHeatSizMult; zsFinalSizing.DesHeatMassFlow = zsCalcFinalSizing.DesHeatMassFlow * TotHeatSizMult; zsFinalSizing.DesHeatLoad = zsCalcFinalSizing.DesHeatLoad * TotHeatSizMult; - zsFinalSizing.HeatFlowSeq = zsCalcFinalSizing.HeatFlowSeq * TotHeatSizMult; - zsFinalSizing.HeatLoadSeq = zsCalcFinalSizing.HeatLoadSeq * TotHeatSizMult; + for (int i = 0; i < (int)zsFinalSizing.HeatFlowSeq.size(); ++i) { + zsFinalSizing.HeatFlowSeq[i] = zsCalcFinalSizing.HeatFlowSeq[i] * TotHeatSizMult; + zsFinalSizing.HeatLoadSeq[i] = zsCalcFinalSizing.HeatLoadSeq[i] * TotHeatSizMult; + } Real64 OAFrac = zsFinalSizing.MinOA / zsFinalSizing.DesHeatVolFlow; OAFrac = min(1.0, max(0.0, OAFrac)); zsFinalSizing.DesHeatCoilInTemp = @@ -2497,8 +2503,10 @@ void updateZoneSizingEndZoneSizingCalc7(EnergyPlusData &state, zoneSizingDD.DesHeatVolFlow = calcZoneSizing.DesHeatVolFlow * TotHeatSizMult; zoneSizingDD.DesHeatMassFlow = calcZoneSizing.DesHeatMassFlow * TotHeatSizMult; zoneSizingDD.DesHeatLoad = calcZoneSizing.DesHeatLoad * TotHeatSizMult; - zoneSizingDD.HeatFlowSeq = calcZoneSizing.HeatFlowSeq * TotHeatSizMult; - zoneSizingDD.HeatLoadSeq = calcZoneSizing.HeatLoadSeq * TotHeatSizMult; + for (int i = 0; i < (int)zoneSizingDD.HeatFlowSeq.size(); ++i) { + zoneSizingDD.HeatFlowSeq[i] = calcZoneSizing.HeatFlowSeq[i] * TotHeatSizMult; + zoneSizingDD.HeatLoadSeq[i] = calcZoneSizing.HeatLoadSeq[i] * TotHeatSizMult; + } Real64 OAFrac = zoneSizingDD.MinOA / zoneSizingDD.DesHeatVolFlow; OAFrac = min(1.0, max(0.0, OAFrac)); zoneSizingDD.DesHeatCoilInTemp = From a6b2784f4429f7d7f69fec699dab87da6fd34bc1 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Mon, 21 Aug 2023 00:43:43 -0500 Subject: [PATCH 051/161] Fix default design condenser inlet and design evaporator outlet temperatures for Chiller ConstantCOP. --- src/EnergyPlus/PlantChillers.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/EnergyPlus/PlantChillers.cc b/src/EnergyPlus/PlantChillers.cc index e3e272bd6f8..95d71ad8d2e 100644 --- a/src/EnergyPlus/PlantChillers.cc +++ b/src/EnergyPlus/PlantChillers.cc @@ -6539,6 +6539,10 @@ namespace PlantChillers { state.dataIPShortCut->cAlphaArgs(8))); } } + + // set default design condenser in and evaporator out temperatures + thisChiller.TempDesCondIn = 29.44; // Degree Celsius, or 85 Degree Fahrenheit + thisChiller.TempDesEvapOut = 6.67; // Degree Celsius, or 44 Degree Fahrenheit } if (ErrorsFound) { From d07c2482f2329121827869a75a916d02b50808cf Mon Sep 17 00:00:00 2001 From: jcyuan Date: Thu, 24 Aug 2023 12:22:40 -0500 Subject: [PATCH 052/161] Unit test. --- .../unit/ChillerConstantCOP.unit.cc | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc b/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc index 641f2ef12ce..d25a5b2ebf6 100644 --- a/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc +++ b/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc @@ -163,3 +163,52 @@ TEST_F(EnergyPlusFixture, ChillerConstantCOP_WaterCooled_Autosize) EXPECT_NEAR(thisChiller.CondVolFlowRate, 0.0012606164769923673, 0.0000001); EXPECT_NEAR(thisChiller.CondMassFlowRateMax, 1.2604878941117141, 0.0000001); } + +TEST_F(EnergyPlusFixture, ChillerConstantCOP_Default_Des_Cond_Evap_Temps) +{ + // Unit test for PR 10158 that fixes Issue 10157) + state->dataPlnt->TotNumLoops = 4; + state->dataEnvrn->OutBaroPress = 101325.0; + state->dataEnvrn->StdRhoAir = 1.20; + state->dataGlobal->NumOfTimeStepInHour = 1; + state->dataGlobal->TimeStep = 1; + state->dataGlobal->MinutesPerTimeStep = 60; + + std::string const idf_objects = delimited_string({ + " Chiller:ConstantCOP,", + " Chiller, !- Name", + " autosize, !- Nominal Capacity {W}", + " 4.0, !- Nominal COP {W/W}", + " autosize, !- Design Chilled Water Flow Rate {m3/s}", + " autosize, !- Design Condenser Water Flow Rate {m3/s}", + " Chiller ChW Inlet, !- Chilled Water Inlet Node Name", + " Chiller ChW Outlet, !- Chilled Water Outlet Node Name", + " Chiller Cnd Inlet, !- Condenser Inlet Node Name", + " Chiller Cnd Outlet, !- Condenser Outlet Node Name", + " WaterCooled, !- Condenser Type", + " ConstantFlow, !- Chiller Flow Mode", + " 1, !- Sizing Factor", + " , !- Basin Heater Capacity {W/K}", + " 2; !- Basin Heater Setpoint Temperature {C}", + }); + + EXPECT_TRUE(process_idf(idf_objects, false)); + + state->dataPlnt->PlantLoop.allocate(state->dataPlnt->TotNumLoops); + state->dataPlnt->PlantLoop.allocate(state->dataPlnt->TotNumLoops); + for (int l = 1; l <= state->dataPlnt->TotNumLoops; ++l) { + auto &loopside(state->dataPlnt->PlantLoop(l).LoopSide(DataPlant::LoopSideLocation::Demand)); + loopside.TotalBranches = 1; + loopside.Branch.allocate(1); + auto &loopsidebranch(state->dataPlnt->PlantLoop(l).LoopSide(DataPlant::LoopSideLocation::Demand).Branch(1)); + loopsidebranch.TotalComponents = 1; + loopsidebranch.Comp.allocate(1); + } + + ConstCOPChillerSpecs::getInput(*state); + + auto &thisChiller = state->dataPlantChillers->ConstCOPChiller(1); + + EXPECT_NEAR(thisChiller.TempDesCondIn, 29.44, 1e-3); + EXPECT_NEAR(thisChiller.TempDesEvapOut, 6.67, 1e-3); +} From 8e446f4ce5683fc46e976bd744249feb3fc68553 Mon Sep 17 00:00:00 2001 From: Mark Lemay Date: Thu, 24 Aug 2023 15:07:26 -0400 Subject: [PATCH 053/161] also escape the building name BuildingName --- src/EnergyPlus/OutputReportTabular.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 49205bf50d5..34363e4136b 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -3138,7 +3138,7 @@ void OpenOutputTabularFile(EnergyPlusData &state) open_tbl_stream(state, iStyle, state.dataStrGlobals->outputTblXmlFilePath, state.files.outputControl.tabular); tbl_stream << "\n"; tbl_stream << "\n"; - tbl_stream << " BuildingName>" << state.dataHeatBal->BuildingName << "BuildingName>\n"; + tbl_stream << " BuildingName>" << ConvertToEscaped(state.dataHeatBal->BuildingName) << "BuildingName>\n"; tbl_stream << " " << state.dataEnvrn->EnvironmentName << "\n"; tbl_stream << " " << state.dataEnvrn->WeatherFileLocationTitle << "\n"; tbl_stream << " " << state.dataStrGlobals->VerStringVar << "\n"; From 4b19e02699de03539da82606de95a2e6ee9f54c0 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Thu, 24 Aug 2023 16:08:46 -0500 Subject: [PATCH 054/161] Treat default cond and evap temperatures based on chiller:ConstantCOP condenser types. --- src/EnergyPlus/PlantChillers.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/PlantChillers.cc b/src/EnergyPlus/PlantChillers.cc index 95d71ad8d2e..c2911270696 100644 --- a/src/EnergyPlus/PlantChillers.cc +++ b/src/EnergyPlus/PlantChillers.cc @@ -6541,8 +6541,17 @@ namespace PlantChillers { } // set default design condenser in and evaporator out temperatures - thisChiller.TempDesCondIn = 29.44; // Degree Celsius, or 85 Degree Fahrenheit + // Values from AHRI Standard 550/590 (2023, IP Version) thisChiller.TempDesEvapOut = 6.67; // Degree Celsius, or 44 Degree Fahrenheit + if (thisChiller.CondenserType == DataPlant::CondenserType::WaterCooled) { + thisChiller.TempDesCondIn = 29.44; // Degree Celsius, or 85 Degree Fahrenheit + } else if (thisChiller.CondenserType == DataPlant::CondenserType::AirCooled) { + thisChiller.TempDesCondIn = 35.0; // Degree Celsius, or 95 Degree Fahrenheit + } else if (thisChiller.CondenserType == DataPlant::CondenserType::EvapCooled) { + thisChiller.TempDesCondIn = 35.0; // Degree Celsius, or 95 Degree Fahrenheit + } else { + thisChiller.TempDesCondIn = 35.0; // Degree Celsius, or 95 Degree Fahrenheit + } } if (ErrorsFound) { From 1c3e69ca8b9b2cbd36f8c08c51c27edde23269b4 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Thu, 24 Aug 2023 16:26:42 -0500 Subject: [PATCH 055/161] Unit test update--assigning different default cond and evap rating temperatures based on condenser types. --- .../unit/ChillerConstantCOP.unit.cc | 62 ++++++++++++++++--- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc b/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc index d25a5b2ebf6..bb835f782c4 100644 --- a/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc +++ b/tst/EnergyPlus/unit/ChillerConstantCOP.unit.cc @@ -167,7 +167,7 @@ TEST_F(EnergyPlusFixture, ChillerConstantCOP_WaterCooled_Autosize) TEST_F(EnergyPlusFixture, ChillerConstantCOP_Default_Des_Cond_Evap_Temps) { // Unit test for PR 10158 that fixes Issue 10157) - state->dataPlnt->TotNumLoops = 4; + state->dataPlnt->TotNumLoops = 12; state->dataEnvrn->OutBaroPress = 101325.0; state->dataEnvrn->StdRhoAir = 1.20; state->dataGlobal->NumOfTimeStepInHour = 1; @@ -176,26 +176,58 @@ TEST_F(EnergyPlusFixture, ChillerConstantCOP_Default_Des_Cond_Evap_Temps) std::string const idf_objects = delimited_string({ " Chiller:ConstantCOP,", - " Chiller, !- Name", + " Chiller_1_WaterCooled, !- Name", " autosize, !- Nominal Capacity {W}", " 4.0, !- Nominal COP {W/W}", " autosize, !- Design Chilled Water Flow Rate {m3/s}", " autosize, !- Design Condenser Water Flow Rate {m3/s}", - " Chiller ChW Inlet, !- Chilled Water Inlet Node Name", - " Chiller ChW Outlet, !- Chilled Water Outlet Node Name", - " Chiller Cnd Inlet, !- Condenser Inlet Node Name", - " Chiller Cnd Outlet, !- Condenser Outlet Node Name", + " Chiller 1 ChW Inlet, !- Chilled Water Inlet Node Name", + " Chiller 1 ChW Outlet, !- Chilled Water Outlet Node Name", + " Chiller 1 Cnd Inlet, !- Condenser Inlet Node Name", + " Chiller 1 Cnd Outlet, !- Condenser Outlet Node Name", " WaterCooled, !- Condenser Type", " ConstantFlow, !- Chiller Flow Mode", " 1, !- Sizing Factor", " , !- Basin Heater Capacity {W/K}", " 2; !- Basin Heater Setpoint Temperature {C}", + + " Chiller:ConstantCOP,", + " Chiller_2_AirCooled, !- Name", + " autosize, !- Nominal Capacity {W}", + " 4.0, !- Nominal COP {W/W}", + " autosize, !- Design Chilled Water Flow Rate {m3/s}", + " autosize, !- Design Condenser Water Flow Rate {m3/s}", + " Chiller 2 ChW Inlet, !- Chilled Water Inlet Node Name", + " Chiller 2 ChW Outlet, !- Chilled Water Outlet Node Name", + " Chiller 2 Cnd Inlet, !- Condenser Inlet Node Name", + " Chiller 2 Cnd Outlet, !- Condenser Outlet Node Name", + " AirCooled, !- Condenser Type", + " ConstantFlow, !- Chiller Flow Mode", + " 1, !- Sizing Factor", + " , !- Basin Heater Capacity {W/K}", + " 2; !- Basin Heater Setpoint Temperature {C}", + + " Chiller:ConstantCOP,", + " Chiller_3_EvapCooled, !- Name", + " autosize, !- Nominal Capacity {W}", + " 4.0, !- Nominal COP {W/W}", + " autosize, !- Design Chilled Water Flow Rate {m3/s}", + " autosize, !- Design Condenser Water Flow Rate {m3/s}", + " Chiller 3 ChW Inlet, !- Chilled Water Inlet Node Name", + " Chiller 3 ChW Outlet, !- Chilled Water Outlet Node Name", + " Chiller 3 Cnd Inlet, !- Condenser Inlet Node Name", + " Chiller 3 Cnd Outlet, !- Condenser Outlet Node Name", + " EvaporativelyCooled, !- Condenser Type", + " ConstantFlow, !- Chiller Flow Mode", + " 1, !- Sizing Factor", + " , !- Basin Heater Capacity {W/K}", + " 2; !- Basin Heater Setpoint Temperature {C}", }); EXPECT_TRUE(process_idf(idf_objects, false)); state->dataPlnt->PlantLoop.allocate(state->dataPlnt->TotNumLoops); - state->dataPlnt->PlantLoop.allocate(state->dataPlnt->TotNumLoops); + for (int l = 1; l <= state->dataPlnt->TotNumLoops; ++l) { auto &loopside(state->dataPlnt->PlantLoop(l).LoopSide(DataPlant::LoopSideLocation::Demand)); loopside.TotalBranches = 1; @@ -207,8 +239,18 @@ TEST_F(EnergyPlusFixture, ChillerConstantCOP_Default_Des_Cond_Evap_Temps) ConstCOPChillerSpecs::getInput(*state); - auto &thisChiller = state->dataPlantChillers->ConstCOPChiller(1); + auto &thisChiller_1 = state->dataPlantChillers->ConstCOPChiller(1); + + EXPECT_NEAR(thisChiller_1.TempDesCondIn, 29.44, 1e-3); + EXPECT_NEAR(thisChiller_1.TempDesEvapOut, 6.67, 1e-3); + + auto &thisChiller_2 = state->dataPlantChillers->ConstCOPChiller(2); + + EXPECT_NEAR(thisChiller_2.TempDesCondIn, 35.0, 1e-3); + EXPECT_NEAR(thisChiller_2.TempDesEvapOut, 6.67, 1e-3); + + auto &thisChiller_3 = state->dataPlantChillers->ConstCOPChiller(3); - EXPECT_NEAR(thisChiller.TempDesCondIn, 29.44, 1e-3); - EXPECT_NEAR(thisChiller.TempDesEvapOut, 6.67, 1e-3); + EXPECT_NEAR(thisChiller_3.TempDesCondIn, 35.0, 1e-3); + EXPECT_NEAR(thisChiller_3.TempDesEvapOut, 6.67, 1e-3); } From e92e1be4b6e5630708b3e94636812c840a6f8aac Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 25 Aug 2023 10:36:52 -0500 Subject: [PATCH 056/161] Rename moisture vars with redundant Zone in name --- src/EnergyPlus/DataZoneEnergyDemands.cc | 58 ++++++++++++------------- src/EnergyPlus/DataZoneEnergyDemands.hh | 18 ++++---- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/EnergyPlus/DataZoneEnergyDemands.cc b/src/EnergyPlus/DataZoneEnergyDemands.cc index 35688934d9e..bda3e8b0de4 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.cc +++ b/src/EnergyPlus/DataZoneEnergyDemands.cc @@ -85,15 +85,15 @@ void ZoneSystemMoistureDemand::beginEnvironmentInit() this->SequencedOutputRequiredToDehumidSP(equipNum) = 0.0; } } - this->ZoneLTLoadHeatEnergy = 0.0; - this->ZoneLTLoadCoolEnergy = 0.0; - this->ZoneLTLoadHeatRate = 0.0; - this->ZoneLTLoadCoolRate = 0.0; - this->ZoneSensibleHeatRatio = 0.0; - this->ZoneVaporPressureDifference = 0.0; - this->ZoneMoisturePredictedRate = 0.0; - this->ZoneMoisturePredictedHumSPRate = 0.0; - this->ZoneMoisturePredictedDehumSPRate = 0.0; + this->loadHeatEnergy = 0.0; + this->loadCoolEnergy = 0.0; + this->loadHeatRate = 0.0; + this->loadCoolRate = 0.0; + this->sensibleHeatRatio = 0.0; + this->vaporPressureDifference = 0.0; + this->predictedRate = 0.0; + this->predictedHumSPRate = 0.0; + this->predictedDehumSPRate = 0.0; } void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, std::string_view prefix, @@ -233,28 +233,28 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Latent Heating Energy", prefix), OutputProcessor::Unit::J, - this->ZoneLTLoadHeatEnergy, + this->loadHeatEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); SetupOutputVariable(state, format("{} Air System Latent Cooling Energy", prefix), OutputProcessor::Unit::J, - this->ZoneLTLoadCoolEnergy, + this->loadCoolEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); SetupOutputVariable(state, format("{} Air System Latent Heating Rate", prefix), OutputProcessor::Unit::W, - this->ZoneLTLoadHeatRate, + this->loadHeatRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Air System Latent Cooling Rate", prefix), OutputProcessor::Unit::W, - this->ZoneLTLoadCoolRate, + this->loadCoolRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -262,14 +262,14 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Heat Ratio", prefix), OutputProcessor::Unit::None, - this->ZoneSensibleHeatRatio, + this->sensibleHeatRatio, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Air Vapor Pressure Difference", prefix), OutputProcessor::Unit::Pa, - this->ZoneVaporPressureDifference, + this->vaporPressureDifference, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -280,21 +280,21 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Predicted Moisture Load Moisture Transfer Rate", prefix), OutputProcessor::Unit::kgWater_s, - this->ZoneMoisturePredictedRate, + this->predictedRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Predicted Moisture Load to Humidifying Setpoint Moisture Transfer Rate", prefix), OutputProcessor::Unit::kgWater_s, - this->ZoneMoisturePredictedHumSPRate, + this->predictedHumSPRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Predicted Moisture Load to Dehumidifying Setpoint Moisture Transfer Rate", prefix), OutputProcessor::Unit::kgWater_s, - this->ZoneMoisturePredictedDehumSPRate, + this->predictedDehumSPRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -358,26 +358,26 @@ void ZoneSystemMoistureDemand::reportZoneAirSystemMoistureLoads(EnergyPlusData & Real64 const sensibleLoad, Real64 const vaporPressureDiff) { - this->ZoneLTLoadHeatRate = std::abs(min(latentGain, 0.0)); - this->ZoneLTLoadCoolRate = max(latentGain, 0.0); - this->ZoneLTLoadHeatEnergy = this->ZoneLTLoadHeatRate * state.dataHVACGlobal->TimeStepSysSec; - this->ZoneLTLoadCoolEnergy = this->ZoneLTLoadCoolRate * state.dataHVACGlobal->TimeStepSysSec; + this->loadHeatRate = std::abs(min(latentGain, 0.0)); + this->loadCoolRate = max(latentGain, 0.0); + this->loadHeatEnergy = this->loadHeatRate * state.dataHVACGlobal->TimeStepSysSec; + this->loadCoolEnergy = this->loadCoolRate * state.dataHVACGlobal->TimeStepSysSec; if ((sensibleLoad + latentGain) != 0.0) { - this->ZoneSensibleHeatRatio = sensibleLoad / (sensibleLoad + latentGain); + this->sensibleHeatRatio = sensibleLoad / (sensibleLoad + latentGain); } else if (sensibleLoad != 0.0) { - this->ZoneSensibleHeatRatio = 1.0; + this->sensibleHeatRatio = 1.0; } else { - this->ZoneSensibleHeatRatio = 0.0; + this->sensibleHeatRatio = 0.0; } - this->ZoneVaporPressureDifference = vaporPressureDiff; + this->vaporPressureDifference = vaporPressureDiff; } void ZoneSystemMoistureDemand::reportMoistLoadsZoneMultiplier( EnergyPlusData &state, int const zoneNum, Real64 const totalLoad, Real64 const loadToHumidifySetPoint, Real64 const loadToDehumidifySetPoint) { - this->ZoneMoisturePredictedRate = totalLoad; - this->ZoneMoisturePredictedHumSPRate = loadToHumidifySetPoint; - this->ZoneMoisturePredictedDehumSPRate = loadToDehumidifySetPoint; + this->predictedRate = totalLoad; + this->predictedHumSPRate = loadToHumidifySetPoint; + this->predictedDehumSPRate = loadToDehumidifySetPoint; Real64 zoneMultFac = state.dataHeatBal->Zone(zoneNum).Multiplier * state.dataHeatBal->Zone(zoneNum).ListMultiplier; diff --git a/src/EnergyPlus/DataZoneEnergyDemands.hh b/src/EnergyPlus/DataZoneEnergyDemands.hh index dc55ff02fea..d5dd468d4fc 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.hh +++ b/src/EnergyPlus/DataZoneEnergyDemands.hh @@ -132,15 +132,15 @@ namespace DataZoneEnergyDemands { EPVector SequencedOutputRequired; // load required to meet setpoint by sequence [kgWater/s] (multiplied) EPVector SequencedOutputRequiredToHumidSP; // load required to meet humidify setpoint by sequence [kgWater/s] (multiplied) EPVector SequencedOutputRequiredToDehumidSP; // load required to meet dehumidify setpoint by sequenc [kgWater/s] (multiplied) - Real64 ZoneMoisturePredictedRate = 0.0; // Predicted moisture load to setpoint [kgWater/s] (unmultiplied) - Real64 ZoneMoisturePredictedHumSPRate = 0.0; // Predicted latent load to humidification setpoint [kgWater/s] (unmultiplied) - Real64 ZoneMoisturePredictedDehumSPRate = 0.0; // Predicted latent load to dehumidification setpoint [kgWater/s] (unmultiplied) - Real64 ZoneLTLoadHeatRate = 0.0; // latent heating rate [W] (unmultiplied) - Real64 ZoneLTLoadCoolRate = 0.0; // latent cooling rate [W] (unmultiplied) - Real64 ZoneLTLoadHeatEnergy = 0.0; // latent heating energy [J] (unmultiplied) - Real64 ZoneLTLoadCoolEnergy = 0.0; // latent cooling energy [J] (unmultiplied) - Real64 ZoneSensibleHeatRatio = 0.0; // zone load SHR [] - Real64 ZoneVaporPressureDifference = 0.0; // vapor pressure depression [Pa] + Real64 predictedRate = 0.0; // Predicted moisture load to setpoint [kgWater/s] (unmultiplied) + Real64 predictedHumSPRate = 0.0; // Predicted latent load to humidification setpoint [kgWater/s] (unmultiplied) + Real64 predictedDehumSPRate = 0.0; // Predicted latent load to dehumidification setpoint [kgWater/s] (unmultiplied) + Real64 loadHeatRate = 0.0; // latent heating rate [W] (unmultiplied) + Real64 loadCoolRate = 0.0; // latent cooling rate [W] (unmultiplied) + Real64 loadHeatEnergy = 0.0; // latent heating energy [J] (unmultiplied) + Real64 loadCoolEnergy = 0.0; // latent cooling energy [J] (unmultiplied) + Real64 sensibleHeatRatio = 0.0; // zone load SHR [] + Real64 vaporPressureDifference = 0.0; // vapor pressure depression [Pa] void beginEnvironmentInit() override; From 28d5c4b34b8a7f9155aae73df56c55e8ae3b8938 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 25 Aug 2023 10:47:50 -0500 Subject: [PATCH 057/161] Rename moisture vars with redundant Zone in name - plan B --- src/EnergyPlus/DataZoneEnergyDemands.cc | 34 ++++++++++++------------- src/EnergyPlus/DataZoneEnergyDemands.hh | 10 ++++---- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/EnergyPlus/DataZoneEnergyDemands.cc b/src/EnergyPlus/DataZoneEnergyDemands.cc index bda3e8b0de4..1bca808885d 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.cc +++ b/src/EnergyPlus/DataZoneEnergyDemands.cc @@ -85,11 +85,11 @@ void ZoneSystemMoistureDemand::beginEnvironmentInit() this->SequencedOutputRequiredToDehumidSP(equipNum) = 0.0; } } - this->loadHeatEnergy = 0.0; - this->loadCoolEnergy = 0.0; - this->loadHeatRate = 0.0; - this->loadCoolRate = 0.0; - this->sensibleHeatRatio = 0.0; + this->airSysHeatEnergy = 0.0; + this->airSysCoolEnergy = 0.0; + this->airSysHeatRate = 0.0; + this->airSysCoolRate = 0.0; + this->airSysSensibleHeatRatio = 0.0; this->vaporPressureDifference = 0.0; this->predictedRate = 0.0; this->predictedHumSPRate = 0.0; @@ -233,28 +233,28 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Latent Heating Energy", prefix), OutputProcessor::Unit::J, - this->loadHeatEnergy, + this->airSysHeatEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); SetupOutputVariable(state, format("{} Air System Latent Cooling Energy", prefix), OutputProcessor::Unit::J, - this->loadCoolEnergy, + this->airSysCoolEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); SetupOutputVariable(state, format("{} Air System Latent Heating Rate", prefix), OutputProcessor::Unit::W, - this->loadHeatRate, + this->airSysHeatRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Air System Latent Cooling Rate", prefix), OutputProcessor::Unit::W, - this->loadCoolRate, + this->airSysCoolRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -262,7 +262,7 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Heat Ratio", prefix), OutputProcessor::Unit::None, - this->sensibleHeatRatio, + this->airSysSensibleHeatRatio, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -358,16 +358,16 @@ void ZoneSystemMoistureDemand::reportZoneAirSystemMoistureLoads(EnergyPlusData & Real64 const sensibleLoad, Real64 const vaporPressureDiff) { - this->loadHeatRate = std::abs(min(latentGain, 0.0)); - this->loadCoolRate = max(latentGain, 0.0); - this->loadHeatEnergy = this->loadHeatRate * state.dataHVACGlobal->TimeStepSysSec; - this->loadCoolEnergy = this->loadCoolRate * state.dataHVACGlobal->TimeStepSysSec; + this->airSysHeatRate = std::abs(min(latentGain, 0.0)); + this->airSysCoolRate = max(latentGain, 0.0); + this->airSysHeatEnergy = this->airSysHeatRate * state.dataHVACGlobal->TimeStepSysSec; + this->airSysCoolEnergy = this->airSysCoolRate * state.dataHVACGlobal->TimeStepSysSec; if ((sensibleLoad + latentGain) != 0.0) { - this->sensibleHeatRatio = sensibleLoad / (sensibleLoad + latentGain); + this->airSysSensibleHeatRatio = sensibleLoad / (sensibleLoad + latentGain); } else if (sensibleLoad != 0.0) { - this->sensibleHeatRatio = 1.0; + this->airSysSensibleHeatRatio = 1.0; } else { - this->sensibleHeatRatio = 0.0; + this->airSysSensibleHeatRatio = 0.0; } this->vaporPressureDifference = vaporPressureDiff; } diff --git a/src/EnergyPlus/DataZoneEnergyDemands.hh b/src/EnergyPlus/DataZoneEnergyDemands.hh index d5dd468d4fc..d1d736142f0 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.hh +++ b/src/EnergyPlus/DataZoneEnergyDemands.hh @@ -135,11 +135,11 @@ namespace DataZoneEnergyDemands { Real64 predictedRate = 0.0; // Predicted moisture load to setpoint [kgWater/s] (unmultiplied) Real64 predictedHumSPRate = 0.0; // Predicted latent load to humidification setpoint [kgWater/s] (unmultiplied) Real64 predictedDehumSPRate = 0.0; // Predicted latent load to dehumidification setpoint [kgWater/s] (unmultiplied) - Real64 loadHeatRate = 0.0; // latent heating rate [W] (unmultiplied) - Real64 loadCoolRate = 0.0; // latent cooling rate [W] (unmultiplied) - Real64 loadHeatEnergy = 0.0; // latent heating energy [J] (unmultiplied) - Real64 loadCoolEnergy = 0.0; // latent cooling energy [J] (unmultiplied) - Real64 sensibleHeatRatio = 0.0; // zone load SHR [] + Real64 airSysHeatRate = 0.0; // air system latent heating rate [W] (unmultiplied) + Real64 airSysCoolRate = 0.0; // air system latent cooling rate [W] (unmultiplied) + Real64 airSysHeatEnergy = 0.0; // air system latent heating energy [J] (unmultiplied) + Real64 airSysCoolEnergy = 0.0; // latent cooling energy [J] (unmultiplied) + Real64 airSysSensibleHeatRatio = 0.0; // air system SHR [] Real64 vaporPressureDifference = 0.0; // vapor pressure depression [Pa] void beginEnvironmentInit() override; From b5a2d4f14b7dccab996cc4e7afee967962ee8a04 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 25 Aug 2023 10:57:35 -0500 Subject: [PATCH 058/161] Rename sensible vars with redundant Zone in name --- src/EnergyPlus/ConvectionCoefficients.cc | 4 +- src/EnergyPlus/DataZoneEnergyDemands.cc | 52 +++++++++---------- src/EnergyPlus/DataZoneEnergyDemands.hh | 14 ++--- src/EnergyPlus/HVACManager.cc | 8 +-- src/EnergyPlus/HeatBalanceManager.cc | 11 ++-- src/EnergyPlus/RoomAirModelUserTempPattern.cc | 4 +- src/EnergyPlus/SolarShading.cc | 14 ++--- src/EnergyPlus/ZoneTempPredictorCorrector.cc | 8 +-- 8 files changed, 57 insertions(+), 58 deletions(-) diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index 17c79b01c3f..87565305024 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -4140,7 +4140,7 @@ void DynamicIntConvSurfaceClassification(EnergyPlusData &state, int const SurfNu // now select which equipment type is dominant compared to all those that are ON if (EquipOnCount > 0) { - if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).ZoneSNLoadPredictedRate >= 0.0) { // heating load + if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).predictedRate >= 0.0) { // heating load PriorityEquipOn = 1; for (int EquipOnLoop = 1; EquipOnLoop <= EquipOnCount; ++EquipOnLoop) { // assume highest priority/first sim order is dominant for flow regime @@ -4148,7 +4148,7 @@ void DynamicIntConvSurfaceClassification(EnergyPlusData &state, int const SurfNu PriorityEquipOn = EquipOnLoop; } } - } else if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).ZoneSNLoadPredictedRate < 0.0) { // cooling load + } else if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).predictedRate < 0.0) { // cooling load PriorityEquipOn = 1; for (int EquipOnLoop = 1; EquipOnLoop <= EquipOnCount; ++EquipOnLoop) { // assume highest priority/first sim order is dominant for flow regime diff --git a/src/EnergyPlus/DataZoneEnergyDemands.cc b/src/EnergyPlus/DataZoneEnergyDemands.cc index 1bca808885d..cecc780aff0 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.cc +++ b/src/EnergyPlus/DataZoneEnergyDemands.cc @@ -65,13 +65,13 @@ void ZoneSystemSensibleDemand::beginEnvironmentInit() this->SequencedOutputRequiredToCoolingSP(equipNum) = 0.0; } } - this->ZoneSNLoadHeatEnergy = 0.0; - this->ZoneSNLoadCoolEnergy = 0.0; - this->ZoneSNLoadHeatRate = 0.0; - this->ZoneSNLoadCoolRate = 0.0; - this->ZoneSNLoadPredictedRate = 0.0; - this->ZoneSNLoadPredictedHSPRate = 0.0; - this->ZoneSNLoadPredictedCSPRate = 0.0; + this->airSysHeatEnergy = 0.0; + this->airSysCoolEnergy = 0.0; + this->airSysHeatRate = 0.0; + this->airSysCoolRate = 0.0; + this->predictedRate = 0.0; + this->predictedHSPRate = 0.0; + this->predictedCSPRate = 0.0; } void ZoneSystemMoistureDemand::beginEnvironmentInit() @@ -107,7 +107,7 @@ void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Heating Energy", prefix), OutputProcessor::Unit::J, - this->ZoneSNLoadHeatEnergy, + this->airSysHeatEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name, @@ -122,7 +122,7 @@ void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Cooling Energy", prefix), OutputProcessor::Unit::J, - this->ZoneSNLoadCoolEnergy, + this->airSysCoolEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name, @@ -138,14 +138,14 @@ void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Heating Energy", prefix), OutputProcessor::Unit::J, - this->ZoneSNLoadHeatEnergy, + this->airSysHeatEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); SetupOutputVariable(state, format("{} Air System Sensible Cooling Energy", prefix), OutputProcessor::Unit::J, - this->ZoneSNLoadCoolEnergy, + this->airSysCoolEnergy, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, name); @@ -153,14 +153,14 @@ void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Air System Sensible Heating Rate", prefix), OutputProcessor::Unit::W, - this->ZoneSNLoadHeatRate, + this->airSysHeatRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Air System Sensible Cooling Rate", prefix), OutputProcessor::Unit::W, - this->ZoneSNLoadCoolRate, + this->airSysCoolRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -170,21 +170,21 @@ void ZoneSystemSensibleDemand::setUpOutputVars(EnergyPlusData &state, SetupOutputVariable(state, format("{} Predicted Sensible Load to Setpoint Heat Transfer Rate", prefix), OutputProcessor::Unit::W, - this->ZoneSNLoadPredictedRate, + this->predictedRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Predicted Sensible Load to Heating Setpoint Heat Transfer Rate", prefix), OutputProcessor::Unit::W, - this->ZoneSNLoadPredictedHSPRate, + this->predictedHSPRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Predicted Sensible Load to Cooling Setpoint Heat Transfer Rate", prefix), OutputProcessor::Unit::W, - this->ZoneSNLoadPredictedCSPRate, + this->predictedCSPRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -324,24 +324,24 @@ void ZoneSystemMoistureDemand::setUpOutputVars(EnergyPlusData &state, void ZoneSystemSensibleDemand::reportZoneAirSystemSensibleLoads(EnergyPlusData &state, Real64 const SNLoad) { - this->ZoneSNLoadHeatRate = max(SNLoad, 0.0); - this->ZoneSNLoadCoolRate = std::abs(min(SNLoad, 0.0)); - this->ZoneSNLoadHeatEnergy = this->ZoneSNLoadHeatRate * state.dataHVACGlobal->TimeStepSysSec; - this->ZoneSNLoadCoolEnergy = this->ZoneSNLoadCoolRate * state.dataHVACGlobal->TimeStepSysSec; + this->airSysHeatRate = max(SNLoad, 0.0); + this->airSysCoolRate = std::abs(min(SNLoad, 0.0)); + this->airSysHeatEnergy = this->airSysHeatRate * state.dataHVACGlobal->TimeStepSysSec; + this->airSysCoolEnergy = this->airSysCoolRate * state.dataHVACGlobal->TimeStepSysSec; } void ZoneSystemSensibleDemand::reportSensibleLoadsZoneMultiplier( EnergyPlusData &state, int const zoneNum, Real64 const totalLoad, Real64 const loadToHeatingSetPoint, Real64 const loadToCoolingSetPoint) { Real64 loadCorrFactor = state.dataHeatBalFanSys->LoadCorrectionFactor(zoneNum); - this->ZoneSNLoadPredictedRate = totalLoad * loadCorrFactor; - this->ZoneSNLoadPredictedHSPRate = loadToHeatingSetPoint * loadCorrFactor; - this->ZoneSNLoadPredictedCSPRate = loadToCoolingSetPoint * loadCorrFactor; + this->predictedRate = totalLoad * loadCorrFactor; + this->predictedHSPRate = loadToHeatingSetPoint * loadCorrFactor; + this->predictedCSPRate = loadToCoolingSetPoint * loadCorrFactor; Real64 ZoneMultFac = state.dataHeatBal->Zone(zoneNum).Multiplier * state.dataHeatBal->Zone(zoneNum).ListMultiplier; - this->TotalOutputRequired = this->ZoneSNLoadPredictedRate * ZoneMultFac; - this->OutputRequiredToHeatingSP = this->ZoneSNLoadPredictedHSPRate * ZoneMultFac; - this->OutputRequiredToCoolingSP = this->ZoneSNLoadPredictedCSPRate * ZoneMultFac; + this->TotalOutputRequired = this->predictedRate * ZoneMultFac; + this->OutputRequiredToHeatingSP = this->predictedHSPRate * ZoneMultFac; + this->OutputRequiredToCoolingSP = this->predictedCSPRate * ZoneMultFac; // init each sequenced demand to the full output if (state.dataHeatBal->Zone(zoneNum).IsControlled && this->NumZoneEquipment > 0) { diff --git a/src/EnergyPlus/DataZoneEnergyDemands.hh b/src/EnergyPlus/DataZoneEnergyDemands.hh index d1d736142f0..7ab1935bb21 100644 --- a/src/EnergyPlus/DataZoneEnergyDemands.hh +++ b/src/EnergyPlus/DataZoneEnergyDemands.hh @@ -93,13 +93,13 @@ namespace DataZoneEnergyDemands { EPVector SequencedOutputRequired; // load required to meet setpoint by sequence [W] (multiplied) EPVector SequencedOutputRequiredToHeatingSP; // load required to meet heating setpoint by sequence [W] (multiplied) EPVector SequencedOutputRequiredToCoolingSP; // load required to meet cooling setpoint by sequence [W] (multiplied) - Real64 ZoneSNLoadPredictedRate = 0.0; // Predicted sensible load [W] (unmultiplied) - Real64 ZoneSNLoadPredictedHSPRate = 0.0; // Predicted sensible load to heating setpoint [W] (unmultiplied) - Real64 ZoneSNLoadPredictedCSPRate = 0.0; // Predicted sensible load to cooling setpoint [W] (unmultiplied) - Real64 ZoneSNLoadHeatRate = 0.0; // sensible heating rate [W] (unmultiplied) - Real64 ZoneSNLoadCoolRate = 0.0; // sensible cooling rate [W] (unmultiplied) - Real64 ZoneSNLoadHeatEnergy = 0.0; // sensible heating energy [J] (unmultiplied) - Real64 ZoneSNLoadCoolEnergy = 0.0; // sensible cooling energy [J] (unmultiplied) + Real64 predictedRate = 0.0; // Predicted sensible load [W] (unmultiplied) + Real64 predictedHSPRate = 0.0; // Predicted sensible load to heating setpoint [W] (unmultiplied) + Real64 predictedCSPRate = 0.0; // Predicted sensible load to cooling setpoint [W] (unmultiplied) + Real64 airSysHeatRate = 0.0; // sensible heating rate [W] (unmultiplied) + Real64 airSysCoolRate = 0.0; // sensible cooling rate [W] (unmultiplied) + Real64 airSysHeatEnergy = 0.0; // sensible heating energy [J] (unmultiplied) + Real64 airSysCoolEnergy = 0.0; // sensible cooling energy [J] (unmultiplied) void beginEnvironmentInit() override; diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index b6a6c6d75b5..d002a5a362e 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -2205,10 +2205,10 @@ void UpdateZoneListAndGroupLoads(EnergyPlusData &state) for (ZoneNum = 1; ZoneNum <= zoneList.NumOfZones; ++ZoneNum) { auto const &zoneSysEnergyDemand = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneList.Zone(ZoneNum)); Mult = state.dataHeatBal->Zone(ZoneNum).Multiplier; - state.dataHeatBal->ZoneListSNLoadHeatEnergy(ListNum) += zoneSysEnergyDemand.ZoneSNLoadHeatEnergy * Mult; - state.dataHeatBal->ZoneListSNLoadCoolEnergy(ListNum) += zoneSysEnergyDemand.ZoneSNLoadCoolEnergy * Mult; - state.dataHeatBal->ZoneListSNLoadHeatRate(ListNum) += zoneSysEnergyDemand.ZoneSNLoadHeatRate * Mult; - state.dataHeatBal->ZoneListSNLoadCoolRate(ListNum) += zoneSysEnergyDemand.ZoneSNLoadCoolRate * Mult; + state.dataHeatBal->ZoneListSNLoadHeatEnergy(ListNum) += zoneSysEnergyDemand.airSysHeatEnergy * Mult; + state.dataHeatBal->ZoneListSNLoadCoolEnergy(ListNum) += zoneSysEnergyDemand.airSysCoolEnergy * Mult; + state.dataHeatBal->ZoneListSNLoadHeatRate(ListNum) += zoneSysEnergyDemand.airSysHeatRate * Mult; + state.dataHeatBal->ZoneListSNLoadCoolRate(ListNum) += zoneSysEnergyDemand.airSysCoolRate * Mult; } // ZoneNum } // ListNum diff --git a/src/EnergyPlus/HeatBalanceManager.cc b/src/EnergyPlus/HeatBalanceManager.cc index 6e7b0ef9619..fc97d67f5bf 100644 --- a/src/EnergyPlus/HeatBalanceManager.cc +++ b/src/EnergyPlus/HeatBalanceManager.cc @@ -3141,11 +3141,11 @@ namespace HeatBalanceManager { if (thisZoneHB.ZTAV < state.dataHeatBalMgr->MinTempZone(ZoneNum)) { state.dataHeatBalMgr->MinTempZone(ZoneNum) = thisZoneHB.ZTAV; } - if (thisZoneSysEnergyDemand.ZoneSNLoadHeatRate > state.dataHeatBalMgr->MaxHeatLoadZone(ZoneNum)) { - state.dataHeatBalMgr->MaxHeatLoadZone(ZoneNum) = thisZoneSysEnergyDemand.ZoneSNLoadHeatRate; + if (thisZoneSysEnergyDemand.airSysHeatRate > state.dataHeatBalMgr->MaxHeatLoadZone(ZoneNum)) { + state.dataHeatBalMgr->MaxHeatLoadZone(ZoneNum) = thisZoneSysEnergyDemand.airSysHeatRate; } - if (thisZoneSysEnergyDemand.ZoneSNLoadCoolRate > state.dataHeatBalMgr->MaxCoolLoadZone(ZoneNum)) { - state.dataHeatBalMgr->MaxCoolLoadZone(ZoneNum) = thisZoneSysEnergyDemand.ZoneSNLoadCoolRate; + if (thisZoneSysEnergyDemand.airSysCoolRate > state.dataHeatBalMgr->MaxCoolLoadZone(ZoneNum)) { + state.dataHeatBalMgr->MaxCoolLoadZone(ZoneNum) = thisZoneSysEnergyDemand.airSysCoolRate; } // Record temperature and load for individual zone @@ -3154,8 +3154,7 @@ namespace HeatBalanceManager { state.dataHeatBalMgr->TempZonePrevDay(ZoneNum) = state.dataHeatBalMgr->TempZone(ZoneNum); state.dataHeatBalMgr->LoadZonePrevDay(ZoneNum) = state.dataHeatBalMgr->LoadZone(ZoneNum); state.dataHeatBalMgr->TempZone(ZoneNum) = thisZoneHB.ZTAV; - state.dataHeatBalMgr->LoadZone(ZoneNum) = - max(thisZoneSysEnergyDemand.ZoneSNLoadHeatRate, std::abs(thisZoneSysEnergyDemand.ZoneSNLoadCoolRate)); + state.dataHeatBalMgr->LoadZone(ZoneNum) = max(thisZoneSysEnergyDemand.airSysHeatRate, std::abs(thisZoneSysEnergyDemand.airSysCoolRate)); // Calculate differences in temperature and load for the last two warmup days if (!state.dataGlobal->WarmupFlag && state.dataGlobal->DayOfSim == 1 && diff --git a/src/EnergyPlus/RoomAirModelUserTempPattern.cc b/src/EnergyPlus/RoomAirModelUserTempPattern.cc index fd8b5ec4c22..f8ae9171169 100644 --- a/src/EnergyPlus/RoomAirModelUserTempPattern.cc +++ b/src/EnergyPlus/RoomAirModelUserTempPattern.cc @@ -415,7 +415,7 @@ void FigureTwoGradInterpPattern(EnergyPlusData &state, int const PattrnID, int c } } break; case UserDefinedPatternMode::SensibleCooling: { - Real64 CoolLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).ZoneSNLoadCoolRate; + Real64 CoolLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).airSysCoolRate; if (CoolLoad >= twoGrad.UpperBoundHeatRateScale) { Grad = twoGrad.HiGradient; @@ -434,7 +434,7 @@ void FigureTwoGradInterpPattern(EnergyPlusData &state, int const PattrnID, int c } } break; case UserDefinedPatternMode::SensibleHeating: { - Real64 HeatLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).ZoneSNLoadHeatRate; + Real64 HeatLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).airSysHeatRate; if (HeatLoad >= twoGrad.UpperBoundHeatRateScale) { Grad = twoGrad.HiGradient; } else if (HeatLoad <= twoGrad.LowerBoundHeatRateScale) { diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index c9eb0f0376f..f307f30523a 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -9736,7 +9736,7 @@ void WindowShadingManager(EnergyPlusData &state) // In the following, the check on BeginSimFlag is needed since SNLoadCoolRate (and SNLoadHeatRate, // used in other CASEs) are not allocated at this point for the first time step of the simulation. if (!state.dataGlobal->BeginSimFlag) { - if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadCoolRate > SetPoint && SchedAllowsControl) { + if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysCoolRate > SetPoint && SchedAllowsControl) { shadingOn = true; } else if (GlareControlIsActive) { shadingOffButGlareControlOn = true; @@ -9842,7 +9842,7 @@ void WindowShadingManager(EnergyPlusData &state) case WindowShadingControlType::OnNightIfHeating_OffDay: // 'OnNightIfHeatingAndOffDay' if (!state.dataGlobal->BeginSimFlag) { - if (!state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadHeatRate > SetPoint && + if (!state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysHeatRate > SetPoint && SchedAllowsControl) { shadingOn = true; } else if (GlareControlIsActive) { @@ -9856,7 +9856,7 @@ void WindowShadingManager(EnergyPlusData &state) if (!state.dataEnvrn->SunIsUp) { // Night if (state.dataSurface->SurfOutDryBulbTemp(ISurf) < SetPoint && SchedAllowsControl) shadingOn = true; } else { // Day - if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadCoolRate > 0.0 && SchedAllowsControl) { + if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysCoolRate > 0.0 && SchedAllowsControl) { shadingOn = true; } else if (GlareControlIsActive) { shadingOffButGlareControlOn = true; @@ -9868,10 +9868,10 @@ void WindowShadingManager(EnergyPlusData &state) case WindowShadingControlType::OnNightIfHeating_OnDayCooling: // 'OnNightIfHeatingAndOnDayIfCooling' if (!state.dataGlobal->BeginSimFlag) { if (!state.dataEnvrn->SunIsUp) { // Night - if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadHeatRate > SetPoint && SchedAllowsControl) + if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysHeatRate > SetPoint && SchedAllowsControl) shadingOn = true; } else { // Day - if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadCoolRate > 0.0 && SchedAllowsControl) { + if (state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysCoolRate > 0.0 && SchedAllowsControl) { shadingOn = true; } else if (GlareControlIsActive) { shadingOffButGlareControlOn = true; @@ -9882,7 +9882,7 @@ void WindowShadingManager(EnergyPlusData &state) case WindowShadingControlType::OffNight_OnDay_HiSolarWindow: // 'OffNightAndOnDayIfCoolingAndHighSolarOnWindow' if (!state.dataGlobal->BeginSimFlag) { - if (state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadCoolRate > 0.0 && + if (state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysCoolRate > 0.0 && SchedAllowsControl) { if (SolarOnWindow > SetPoint) shadingOn = true; } else if (GlareControlIsActive) { @@ -9893,7 +9893,7 @@ void WindowShadingManager(EnergyPlusData &state) case WindowShadingControlType::OnNight_OnDay_HiSolarWindow: // 'OnNightAndOnDayIfCoolingAndHighSolarOnWindow' if (!state.dataGlobal->BeginSimFlag) { - if (state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).ZoneSNLoadCoolRate > 0.0 && + if (state.dataEnvrn->SunIsUp && state.dataZoneEnergyDemand->ZoneSysEnergyDemand(IZone).airSysCoolRate > 0.0 && SchedAllowsControl) { if (SolarOnWindow > SetPoint) shadingOn = true; } else if (!state.dataEnvrn->SunIsUp && SchedAllowsControl) { diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.cc b/src/EnergyPlus/ZoneTempPredictorCorrector.cc index 97930626322..4760e730392 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.cc @@ -4975,13 +4975,13 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo Real64 Tdp = Psychrometrics::PsyTdpFnWPb(state, this->ZoneAirHumRatTemp, state.dataEnvrn->StdBaroPress); Real64 vaporPressureDiff = pSat - Psychrometrics::PsyPsatFnTemp(state, Tdp, RoutineName); if (spaceNum > 0) { - sensibleLoad = state.dataZoneEnergyDemand->spaceSysEnergyDemand(spaceNum).ZoneSNLoadHeatRate + - state.dataZoneEnergyDemand->spaceSysEnergyDemand(spaceNum).ZoneSNLoadCoolRate; + sensibleLoad = state.dataZoneEnergyDemand->spaceSysEnergyDemand(spaceNum).airSysHeatRate + + state.dataZoneEnergyDemand->spaceSysEnergyDemand(spaceNum).airSysCoolRate; state.dataZoneEnergyDemand->spaceSysMoistureDemand(spaceNum).reportZoneAirSystemMoistureLoads( state, LatentGain, sensibleLoad, vaporPressureDiff); } else { - sensibleLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).ZoneSNLoadHeatRate + - state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).ZoneSNLoadCoolRate; + sensibleLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).airSysHeatRate + + state.dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum).airSysCoolRate; state.dataZoneEnergyDemand->ZoneSysMoistureDemand(zoneNum).reportZoneAirSystemMoistureLoads( state, LatentGain, sensibleLoad, vaporPressureDiff); } From 6d094b04cd509a9fb30cc41b2ec6b53e66a42445 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 25 Aug 2023 11:56:51 -0500 Subject: [PATCH 059/161] Rename vars in unit tests --- .../unit/ZoneTempPredictorCorrector.unit.cc | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc b/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc index 90abe9da4af..bc7b325bc81 100644 --- a/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc +++ b/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc @@ -1463,11 +1463,9 @@ TEST_F(EnergyPlusFixture, ReportMoistLoadsZoneMultiplier_Test) thisZone.ListMultiplier = 1.0; thisZoneSysMoistureDemand.reportMoistLoadsZoneMultiplier( *state, zoneNum, totalOutputRequired, outputRequiredToHumidifyingSP, outputRequiredToDehumidifyingSP); - EXPECT_NEAR(thisZoneSysMoistureDemand.TotalOutputRequired, thisZoneSysMoistureDemand.ZoneMoisturePredictedRate, AcceptableTolerance); - EXPECT_NEAR( - thisZoneSysMoistureDemand.OutputRequiredToHumidifyingSP, thisZoneSysMoistureDemand.ZoneMoisturePredictedHumSPRate, AcceptableTolerance); - EXPECT_NEAR( - thisZoneSysMoistureDemand.OutputRequiredToDehumidifyingSP, thisZoneSysMoistureDemand.ZoneMoisturePredictedDehumSPRate, AcceptableTolerance); + EXPECT_NEAR(thisZoneSysMoistureDemand.TotalOutputRequired, thisZoneSysMoistureDemand.predictedRate, AcceptableTolerance); + EXPECT_NEAR(thisZoneSysMoistureDemand.OutputRequiredToHumidifyingSP, thisZoneSysMoistureDemand.predictedHumSPRate, AcceptableTolerance); + EXPECT_NEAR(thisZoneSysMoistureDemand.OutputRequiredToDehumidifyingSP, thisZoneSysMoistureDemand.predictedDehumSPRate, AcceptableTolerance); // Test 2a: Zone Multiplier (non-list) is greater than 1, list Zone Multiplier is still one thisZone.Multiplier = 7.0; @@ -1475,11 +1473,11 @@ TEST_F(EnergyPlusFixture, ReportMoistLoadsZoneMultiplier_Test) thisZoneSysMoistureDemand.reportMoistLoadsZoneMultiplier( *state, zoneNum, totalOutputRequired, outputRequiredToHumidifyingSP, outputRequiredToDehumidifyingSP); ExpectedResult = 1000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedRate, AcceptableTolerance); ExpectedResult = 2000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedHumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedHumSPRate, AcceptableTolerance); ExpectedResult = 3000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedDehumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedDehumSPRate, AcceptableTolerance); ExpectedResult = 7000.0; EXPECT_NEAR(thisZoneSysMoistureDemand.TotalOutputRequired, ExpectedResult, AcceptableTolerance); ExpectedResult = 14000.0; @@ -1493,11 +1491,11 @@ TEST_F(EnergyPlusFixture, ReportMoistLoadsZoneMultiplier_Test) thisZoneSysMoistureDemand.reportMoistLoadsZoneMultiplier( *state, zoneNum, totalOutputRequired, outputRequiredToHumidifyingSP, outputRequiredToDehumidifyingSP); ExpectedResult = 1000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedRate, AcceptableTolerance); ExpectedResult = 2000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedHumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedHumSPRate, AcceptableTolerance); ExpectedResult = 3000.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedDehumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedDehumSPRate, AcceptableTolerance); ExpectedResult = 7000.0; EXPECT_NEAR(thisZoneSysMoistureDemand.TotalOutputRequired, ExpectedResult, AcceptableTolerance); ExpectedResult = 14000.0; @@ -1514,11 +1512,11 @@ TEST_F(EnergyPlusFixture, ReportMoistLoadsZoneMultiplier_Test) thisZoneSysMoistureDemand.reportMoistLoadsZoneMultiplier( *state, zoneNum, totalOutputRequired, outputRequiredToHumidifyingSP, outputRequiredToDehumidifyingSP); ExpectedResult = 300.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedRate, AcceptableTolerance); ExpectedResult = 150.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedHumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedHumSPRate, AcceptableTolerance); ExpectedResult = 100.0; - EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.ZoneMoisturePredictedDehumSPRate, AcceptableTolerance); + EXPECT_NEAR(ExpectedResult, thisZoneSysMoistureDemand.predictedDehumSPRate, AcceptableTolerance); ExpectedResult = 1800.0; EXPECT_NEAR(thisZoneSysMoistureDemand.TotalOutputRequired, ExpectedResult, AcceptableTolerance); ExpectedResult = 900.0; @@ -1532,9 +1530,9 @@ TEST_F(EnergyPlusFixture, ReportSensibleLoadsZoneMultiplier_Test) int zoneNum = 1; state->dataZoneEnergyDemand->ZoneSysEnergyDemand.allocate(zoneNum); auto &thisZoneSysEnergyDemand = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(zoneNum); - Real64 &SingleZoneTotRate = thisZoneSysEnergyDemand.ZoneSNLoadPredictedRate; - Real64 &SingleZoneHeatRate = thisZoneSysEnergyDemand.ZoneSNLoadPredictedHSPRate; - Real64 &SingleZoneCoolRate = thisZoneSysEnergyDemand.ZoneSNLoadPredictedCSPRate; + Real64 &SingleZoneTotRate = thisZoneSysEnergyDemand.predictedRate; + Real64 &SingleZoneHeatRate = thisZoneSysEnergyDemand.predictedHSPRate; + Real64 &SingleZoneCoolRate = thisZoneSysEnergyDemand.predictedCSPRate; state->dataHeatBalFanSys->LoadCorrectionFactor.allocate(zoneNum); Real64 &CorrectionFactor = state->dataHeatBalFanSys->LoadCorrectionFactor(zoneNum); state->dataHeatBal->Zone.allocate(zoneNum); From 4b5d085405374872cb9e98a4a7bdd7b458ed2eef Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 25 Aug 2023 17:48:34 -0500 Subject: [PATCH 060/161] I object (loop)! A few more changes to address comments. --- src/EnergyPlus/HWBaseboardRadiator.cc | 4 +--- src/EnergyPlus/HighTempRadiantSystem.cc | 11 ++++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index 5d03e45565d..0523bb4ca9e 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -1503,9 +1503,7 @@ namespace HWBaseboardRadiator { state.dataHeatBalFanSys->SurfQHWBaseboard = 0.0; state.dataHeatBalFanSys->ZoneQHWBaseboardToPerson = 0.0; - for (BaseboardNum = 1; BaseboardNum <= state.dataHWBaseboardRad->NumHWBaseboards; ++BaseboardNum) { - - auto &thisHWBB = state.dataHWBaseboardRad->HWBaseboard(BaseboardNum); + for (auto &thisHWBB : state.dataHWBaseboardRad->HWBaseboard) { HWBaseboardDesignData const &HWBaseboardDesignDataObject = state.dataHWBaseboardRad->HWBaseboardDesignObject(thisHWBB.DesignObjectPtr); // Contains the data for the design object int ZoneNum = thisHWBB.ZonePtr; diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index 6575401545d..6fc49574a27 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -665,8 +665,7 @@ namespace HighTempRadiantSystem { } if (state.dataGlobal->BeginEnvrnFlag && state.dataHighTempRadSys->MyEnvrnFlag) { - for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { - auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(HTRnum); + for (auto &thisHTR : state.dataHighTempRadSys->HighTempRadSys) { thisHTR.ZeroHTRSourceSumHATsurf = 0.0; thisHTR.QHTRRadSource = 0.0; thisHTR.QHTRRadSrcAvg = 0.0; @@ -1101,8 +1100,7 @@ namespace HighTempRadiantSystem { if (state.dataHighTempRadSys->NumOfHighTempRadSys == 0) return; // If it was allocated, then we have to check to see if this was running at all... - for (int RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { - auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + for (auto &thisHTR : state.dataHighTempRadSys->HighTempRadSys) { thisHTR.QHTRRadSource = thisHTR.QHTRRadSrcAvg; if (thisHTR.QHTRRadSrcAvg != 0.0) HighTempRadSysOn = true; } @@ -1147,9 +1145,8 @@ namespace HighTempRadiantSystem { dataHBFS->SurfQHTRadSys = 0.0; dataHBFS->ZoneQHTRadSysToPerson = 0.0; - for (int RadSysNum = 1; RadSysNum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++RadSysNum) { - - auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); + + for (auto &thisHTR : state.dataHighTempRadSys->HighTempRadSys) { int ZoneNum = thisHTR.ZonePtr; dataHBFS->ZoneQHTRadSysToPerson(ZoneNum) = thisHTR.QHTRRadSource * thisHTR.FracRadiant * thisHTR.FracDistribPerson; From f39990ecad2b0fa95668e5580c6b948cf6de3400 Mon Sep 17 00:00:00 2001 From: Richard Raustad Date: Sat, 26 Aug 2023 10:18:30 -0400 Subject: [PATCH 061/161] Object loop, unused vars, cleanup with CppCheck help --- src/EnergyPlus/HWBaseboardRadiator.cc | 27 ++--- src/EnergyPlus/HighTempRadiantSystem.cc | 18 +-- src/EnergyPlus/LowTempRadiantSystem.cc | 154 +++++++++--------------- src/EnergyPlus/VentilatedSlab.cc | 7 +- 4 files changed, 78 insertions(+), 128 deletions(-) diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index 0523bb4ca9e..d40296ffe72 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -440,7 +440,6 @@ namespace HWBaseboardRadiator { state.dataIPShortCut->cNumericFieldNames); HWBaseboardNumericFields.FieldNames.allocate(NumNumbers); - HWBaseboardNumericFields.FieldNames = ""; HWBaseboardNumericFields.FieldNames = state.dataIPShortCut->cNumericFieldNames; // ErrorsFound will be set to True if problem was found, left untouched otherwise @@ -848,18 +847,16 @@ namespace HWBaseboardRadiator { state.dataHWBaseboardRad->SetLoopIndexFlag.dimension(NumHWBaseboards, true); state.dataHWBaseboardRad->MyOneTimeFlag = false; - for (int Loop = 1; Loop <= NumHWBaseboards; ++Loop) { - auto &hWBB = state.dataHWBaseboardRad->HWBaseboard; + for (auto &hWBB : state.dataHWBaseboardRad->HWBaseboard) { // Air mass flow rate is obtained from the following linear equation (reset if autosize is used) // m_dot = 0.0062 + 2.75e-05*q - hWBB(Loop).AirMassFlowRateStd = Constant + Coeff * hWBB(Loop).RatedCapacity; - hWBB(Loop).ZeroBBSourceSumHATsurf = 0.0; - hWBB(Loop).QBBRadSource = 0.0; - hWBB(Loop).QBBRadSrcAvg = 0.0; - hWBB(Loop).LastQBBRadSrc = 0.0; - hWBB(Loop).LastSysTimeElapsed = 0.0; - hWBB(Loop).LastTimeStepSys = 0.0; - hWBB(Loop).AirMassFlowRateStd = Constant + Coeff * hWBB(Loop).RatedCapacity; + hWBB.ZeroBBSourceSumHATsurf = 0.0; + hWBB.QBBRadSource = 0.0; + hWBB.QBBRadSrcAvg = 0.0; + hWBB.LastQBBRadSrc = 0.0; + hWBB.LastSysTimeElapsed = 0.0; + hWBB.LastTimeStepSys = 0.0; + hWBB.AirMassFlowRateStd = Constant + Coeff * hWBB.RatedCapacity; } } @@ -1456,15 +1453,14 @@ namespace HWBaseboardRadiator { // one or more of the radiant systems was running. HWBaseboardSysOn = false; - auto &HWBaseboard = state.dataHWBaseboardRad->HWBaseboard; // If there are no baseboards in this input file, just RETURN if (state.dataHWBaseboardRad->NumHWBaseboards == 0) return; // If there are baseboards, then we have to check to see if this was running at all... - for (int BaseboardNum = 1; BaseboardNum <= state.dataHWBaseboardRad->NumHWBaseboards; ++BaseboardNum) { - HWBaseboard(BaseboardNum).QBBRadSource = HWBaseboard(BaseboardNum).QBBRadSrcAvg; - if (HWBaseboard(BaseboardNum).QBBRadSrcAvg != 0.0) HWBaseboardSysOn = true; + for (auto &thisHWBaseboard : state.dataHWBaseboardRad->HWBaseboard) { + thisHWBaseboard.QBBRadSource = thisHWBaseboard.QBBRadSrcAvg; + if (thisHWBaseboard.QBBRadSrcAvg != 0.0) HWBaseboardSysOn = true; } DistributeBBRadGains(state); // QBBRadSource has been modified so we need to redistribute gains @@ -1495,7 +1491,6 @@ namespace HWBaseboardRadiator { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int RadSurfNum; // Counter for surfaces receiving radiation from radiant heater - int BaseboardNum; // Counter for the baseboard int SurfNum; // Pointer to the Surface derived type Real64 ThisSurfIntensity; // temporary for W/m2 term for rad on a surface diff --git a/src/EnergyPlus/HighTempRadiantSystem.cc b/src/EnergyPlus/HighTempRadiantSystem.cc index 6fc49574a27..67791180327 100644 --- a/src/EnergyPlus/HighTempRadiantSystem.cc +++ b/src/EnergyPlus/HighTempRadiantSystem.cc @@ -637,10 +637,6 @@ namespace HighTempRadiantSystem { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int ZoneNum; // Intermediate variable for keeping track of the zone number - int HTRnum; - if (state.dataHighTempRadSys->firstTime) { state.dataHighTempRadSys->MySizeFlag.dimension(state.dataHighTempRadSys->NumOfHighTempRadSys, true); state.dataHighTempRadSys->firstTime = false; @@ -649,12 +645,12 @@ namespace HighTempRadiantSystem { // need to check all units to see if they are on Zone Equipment List or issue warning if (!state.dataHighTempRadSys->ZoneEquipmentListChecked && state.dataZoneEquip->ZoneEquipInputsFilled) { state.dataHighTempRadSys->ZoneEquipmentListChecked = true; - for (HTRnum = 1; HTRnum <= state.dataHighTempRadSys->NumOfHighTempRadSys; ++HTRnum) { - if (CheckZoneEquipmentList(state, "ZoneHVAC:HighTemperatureRadiant", state.dataHighTempRadSys->HighTempRadSys(HTRnum).Name)) continue; + for (auto &thisHTRSys : state.dataHighTempRadSys->HighTempRadSys) { + if (CheckZoneEquipmentList(state, "ZoneHVAC:HighTemperatureRadiant", thisHTRSys.Name)) continue; ShowSevereError(state, format("InitHighTempRadiantSystem: Unit=[ZoneHVAC:HighTemperatureRadiant,{}] is not on any ZoneHVAC:EquipmentList. " "It will not be simulated.", - state.dataHighTempRadSys->HighTempRadSys(HTRnum).Name)); + thisHTRSys.Name)); } } @@ -681,11 +677,10 @@ namespace HighTempRadiantSystem { if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) { // This is the first pass through in a particular time step auto &thisHTR = state.dataHighTempRadSys->HighTempRadSys(RadSysNum); - ZoneNum = thisHTR.ZonePtr; thisHTR.ZeroHTRSourceSumHATsurf = - state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets - thisHTR.QHTRRadSource = 0.0; // Initialize this variable to zero (radiant system defaults to off) - thisHTR.QHTRRadSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) + state.dataHeatBal->Zone(thisHTR.ZonePtr).sumHATsurf(state); // Set this to figure out what part of the load the radiant system meets + thisHTR.QHTRRadSource = 0.0; // Initialize this variable to zero (radiant system defaults to off) + thisHTR.QHTRRadSrcAvg = 0.0; // Initialize this variable to zero (radiant system defaults to off) thisHTR.LastQHTRRadSrc = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again thisHTR.LastSysTimeElapsed = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again thisHTR.LastTimeStepSys = 0.0; // At the beginning of a time step, reset to zero so average calculation can start again @@ -1145,7 +1140,6 @@ namespace HighTempRadiantSystem { dataHBFS->SurfQHTRadSys = 0.0; dataHBFS->ZoneQHTRadSysToPerson = 0.0; - for (auto &thisHTR : state.dataHighTempRadSys->HighTempRadSys) { int ZoneNum = thisHTR.ZonePtr; diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 976edf2c550..1a8463b91c7 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -1942,18 +1942,16 @@ namespace LowTempRadiantSystem { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 CurrentFlowSchedule; // Schedule value for flow fraction in a constant flow radiant system - int RadNum; // Number of the radiant system (DO loop counter) int SurfNum; // Intermediate variable for keeping track of the surface number Real64 TotalEffic; // Intermediate calculation variable for total pump efficiency int ZoneNum; // Intermediate variable for keeping track of the zone number - int Loop; - Real64 mdot; // local fluid mass flow rate - Real64 rho; // local fluid density + Real64 mdot; // local fluid mass flow rate + Real64 rho; // local fluid density bool errFlag; InitErrorsFound = false; - auto &Surface = state.dataSurface->Surface; + auto const &Surface = state.dataSurface->Surface; if (state.dataLowTempRadSys->MyOneTimeFlag) { state.dataLowTempRadSys->MyEnvrnFlagHydr.allocate(state.dataLowTempRadSys->NumOfHydrLowTempRadSys); @@ -1971,26 +1969,23 @@ namespace LowTempRadiantSystem { if (state.dataLowTempRadSys->FirstTimeInit) { - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++RadNum) { - auto &thisLTR = state.dataLowTempRadSys->HydrRadSys(RadNum); - thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed = 0.0; - thisLTR.LastTimeStepSys = 0.0; + for (auto &thisLTRSys : state.dataLowTempRadSys->HydrRadSys) { + thisLTRSys.QRadSysSrcAvg.dimension(thisLTRSys.NumOfSurfaces, 0.0); + thisLTRSys.LastQRadSysSrc.dimension(thisLTRSys.NumOfSurfaces, 0.0); + thisLTRSys.LastSysTimeElapsed = 0.0; + thisLTRSys.LastTimeStepSys = 0.0; } - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { - auto &thisLTR = state.dataLowTempRadSys->CFloRadSys(RadNum); - thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed = 0.0; - thisLTR.LastTimeStepSys = 0.0; + for (auto &thisCFLTRSys : state.dataLowTempRadSys->CFloRadSys) { + thisCFLTRSys.QRadSysSrcAvg.dimension(thisCFLTRSys.NumOfSurfaces, 0.0); + thisCFLTRSys.LastQRadSysSrc.dimension(thisCFLTRSys.NumOfSurfaces, 0.0); + thisCFLTRSys.LastSysTimeElapsed = 0.0; + thisCFLTRSys.LastTimeStepSys = 0.0; } - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++RadNum) { - auto &thisLTR = state.dataLowTempRadSys->ElecRadSys(RadNum); - thisLTR.QRadSysSrcAvg.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastQRadSysSrc.dimension(thisLTR.NumOfSurfaces, 0.0); - thisLTR.LastSysTimeElapsed = 0.0; - thisLTR.LastTimeStepSys = 0.0; + for (auto &thisELTRSys : state.dataLowTempRadSys->ElecRadSys) { + thisELTRSys.QRadSysSrcAvg.dimension(thisELTRSys.NumOfSurfaces, 0.0); + thisELTRSys.LastQRadSysSrc.dimension(thisELTRSys.NumOfSurfaces, 0.0); + thisELTRSys.LastSysTimeElapsed = 0.0; + thisELTRSys.LastTimeStepSys = 0.0; } state.dataLowTempRadSys->MySizeFlagHydr.allocate(state.dataLowTempRadSys->NumOfHydrLowTempRadSys); state.dataLowTempRadSys->MySizeFlagCFlo.allocate(state.dataLowTempRadSys->NumOfCFloLowTempRadSys); @@ -2000,28 +1995,25 @@ namespace LowTempRadiantSystem { state.dataLowTempRadSys->MySizeFlagElec = true; // Initialize total areas and ZeroLTRSource for all radiant systems - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfHydrLowTempRadSys; ++RadNum) { - state.dataLowTempRadSys->HydrRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; - state.dataLowTempRadSys->HydrRadSys(RadNum).TotalSurfaceArea = 0.0; - for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->HydrRadSys(RadNum).NumOfSurfaces; ++SurfNum) { - state.dataLowTempRadSys->HydrRadSys(RadNum).TotalSurfaceArea += - Surface(state.dataLowTempRadSys->HydrRadSys(RadNum).SurfacePtr(SurfNum)).Area; + for (auto &thisHRadSys : state.dataLowTempRadSys->HydrRadSys) { + thisHRadSys.ZeroLTRSourceSumHATsurf = 0.0; + thisHRadSys.TotalSurfaceArea = 0.0; + for (SurfNum = 1; SurfNum <= thisHRadSys.NumOfSurfaces; ++SurfNum) { + thisHRadSys.TotalSurfaceArea += Surface(thisHRadSys.SurfacePtr(SurfNum)).Area; } } - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { - state.dataLowTempRadSys->CFloRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; - state.dataLowTempRadSys->CFloRadSys(RadNum).TotalSurfaceArea = 0.0; - for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->CFloRadSys(RadNum).NumOfSurfaces; ++SurfNum) { - state.dataLowTempRadSys->CFloRadSys(RadNum).TotalSurfaceArea += - Surface(state.dataLowTempRadSys->CFloRadSys(RadNum).SurfacePtr(SurfNum)).Area; + for (auto &thisCFLRadSys : state.dataLowTempRadSys->CFloRadSys) { + thisCFLRadSys.ZeroLTRSourceSumHATsurf = 0.0; + thisCFLRadSys.TotalSurfaceArea = 0.0; + for (SurfNum = 1; SurfNum <= thisCFLRadSys.NumOfSurfaces; ++SurfNum) { + thisCFLRadSys.TotalSurfaceArea += Surface(thisCFLRadSys.SurfacePtr(SurfNum)).Area; } } - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfElecLowTempRadSys; ++RadNum) { - state.dataLowTempRadSys->ElecRadSys(RadNum).ZeroLTRSourceSumHATsurf = 0.0; - state.dataLowTempRadSys->ElecRadSys(RadNum).TotalSurfaceArea = 0.0; - for (SurfNum = 1; SurfNum <= state.dataLowTempRadSys->ElecRadSys(RadNum).NumOfSurfaces; ++SurfNum) { - state.dataLowTempRadSys->ElecRadSys(RadNum).TotalSurfaceArea += - Surface(state.dataLowTempRadSys->ElecRadSys(RadNum).SurfacePtr(SurfNum)).Area; + for (auto &thisERadSys : state.dataLowTempRadSys->ElecRadSys) { + thisERadSys.ZeroLTRSourceSumHATsurf = 0.0; + thisERadSys.TotalSurfaceArea = 0.0; + for (SurfNum = 1; SurfNum <= thisERadSys.NumOfSurfaces; ++SurfNum) { + thisERadSys.TotalSurfaceArea += Surface(thisERadSys.SurfacePtr(SurfNum)).Area; } } @@ -2033,36 +2025,27 @@ namespace LowTempRadiantSystem { } // Check pump parameters for constant flow hydronic radiant systems - for (RadNum = 1; RadNum <= state.dataLowTempRadSys->NumOfCFloLowTempRadSys; ++RadNum) { + for (auto &thisCFLRadSys : state.dataLowTempRadSys->CFloRadSys) { // Calculate the efficiency for each pump: The calculation // is based on the PMPSIM code in the ASHRAE Secondary Toolkit - Real64 PEC = state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic; - if ((state.dataLowTempRadSys->CFloRadSys(RadNum).NomPowerUse > ZeroTol) && (MotorEffic > ZeroTol) && - (state.dataLowTempRadSys->CFloRadSys(RadNum).WaterVolFlowMax != AutoSize)) { - TotalEffic = state.dataLowTempRadSys->CFloRadSys(RadNum).WaterVolFlowMax * - state.dataLowTempRadSys->CFloRadSys(RadNum).NomPumpHead / state.dataLowTempRadSys->CFloRadSys(RadNum).NomPowerUse; - state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic = TotalEffic / MotorEffic; - PEC = state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic; + if ((thisCFLRadSys.NomPowerUse > ZeroTol) && (MotorEffic > ZeroTol) && (thisCFLRadSys.WaterVolFlowMax != AutoSize)) { + TotalEffic = thisCFLRadSys.WaterVolFlowMax * thisCFLRadSys.NomPumpHead / thisCFLRadSys.NomPowerUse; + thisCFLRadSys.PumpEffic = TotalEffic / MotorEffic; constexpr std::string_view fmt = "Check input. Calc Pump Efficiency={:.5R}% {}, for pump in radiant system {}"; - Real64 pumpEfficiency = state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic * 100.0; - PEC = state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic; - if (state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic < 0.50) { - ShowWarningError(state, - format(fmt, pumpEfficiency, "which is less than 50%", state.dataLowTempRadSys->CFloRadSys(RadNum).Name)); - } else if ((state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic > 0.95) && - (state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic <= 1.0)) { - ShowWarningError(state, format(fmt, pumpEfficiency, "is approaching 100%", state.dataLowTempRadSys->CFloRadSys(RadNum).Name)); - } else if (state.dataLowTempRadSys->CFloRadSys(RadNum).PumpEffic > 1.0) { - ShowSevereError(state, - format(fmt, pumpEfficiency, "which is bigger than 100%", state.dataLowTempRadSys->CFloRadSys(RadNum).Name)); + Real64 pumpEfficiency = thisCFLRadSys.PumpEffic * 100.0; + if (thisCFLRadSys.PumpEffic < 0.50) { + ShowWarningError(state, format(fmt, pumpEfficiency, "which is less than 50%", thisCFLRadSys.Name)); + } else if ((thisCFLRadSys.PumpEffic > 0.95) && (thisCFLRadSys.PumpEffic <= 1.0)) { + ShowWarningError(state, format(fmt, pumpEfficiency, "is approaching 100%", thisCFLRadSys.Name)); + } else if (thisCFLRadSys.PumpEffic > 1.0) { + ShowSevereError(state, format(fmt, pumpEfficiency, "which is bigger than 100%", thisCFLRadSys.Name)); InitErrorsFound = true; } } else { - if (state.dataLowTempRadSys->CFloRadSys(RadNum).WaterVolFlowMax != - AutoSize) { // Autosize is not an error but it does not need to check pump efficiency here + // Autosize is not an error but it does not need to check pump efficiency here + if (thisCFLRadSys.WaterVolFlowMax != AutoSize) { ShowSevereError(state, - format("Check input. Pump nominal power and motor efficiency cannot be 0, for pump={}", - state.dataLowTempRadSys->CFloRadSys(RadNum).Name)); + format("Check input. Pump nominal power and motor efficiency cannot be 0, for pump={}", thisCFLRadSys.Name)); InitErrorsFound = true; } } @@ -2152,31 +2135,28 @@ namespace LowTempRadiantSystem { // need to check all units to see if they are on Zone Equipment List or issue warning if (!state.dataLowTempRadSys->ZoneEquipmentListChecked && state.dataZoneEquip->ZoneEquipInputsFilled) { state.dataLowTempRadSys->ZoneEquipmentListChecked = true; - for (Loop = 1; Loop <= state.dataLowTempRadSys->TotalNumOfRadSystems; ++Loop) { - switch (state.dataLowTempRadSys->RadSysTypes(Loop).SystemType) { + for (auto &thisRadSys : state.dataLowTempRadSys->RadSysTypes) { + switch (thisRadSys.SystemType) { case LowTempRadiantSystem::SystemType::HydronicSystem: { - if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:VariableFlow", state.dataLowTempRadSys->RadSysTypes(Loop).Name)) - continue; + if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:VariableFlow", thisRadSys.Name)) continue; ShowSevereError(state, format("InitLowTempRadiantSystem: Unit=[ZoneHVAC:LowTemperatureRadiant:VariableFlow,{}] is not on any " "ZoneHVAC:EquipmentList. It will not be simulated.", - state.dataLowTempRadSys->RadSysTypes(Loop).Name)); + thisRadSys.Name)); } break; case LowTempRadiantSystem::SystemType::ConstantFlowSystem: { - if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:ConstantFlow", state.dataLowTempRadSys->RadSysTypes(Loop).Name)) - continue; + if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:ConstantFlow", thisRadSys.Name)) continue; ShowSevereError(state, format("InitLowTempRadiantSystem: Unit=[ZoneHVAC:LowTemperatureRadiant:ConstantFlow,{}] is not on any " "ZoneHVAC:EquipmentList. It will not be simulated.", - state.dataLowTempRadSys->RadSysTypes(Loop).Name)); + thisRadSys.Name)); } break; case LowTempRadiantSystem::SystemType::ElectricSystem: { - if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:Electric", state.dataLowTempRadSys->RadSysTypes(Loop).Name)) - continue; + if (CheckZoneEquipmentList(state, "ZoneHVAC:LowTemperatureRadiant:Electric", thisRadSys.Name)) continue; ShowSevereError(state, format("InitLowTempRadiantSystem: Unit=[ZoneHVAC:LowTemperatureRadiant:Electric,{}] is not on any " "ZoneHVAC:EquipmentList. It will not be simulated.", - state.dataLowTempRadSys->RadSysTypes(Loop).Name)); + thisRadSys.Name)); } break; default: { // Illegal system, but checked earlier } break; @@ -2736,7 +2716,7 @@ namespace LowTempRadiantSystem { state.dataSize->DataScalableCapSizingON = false; state.dataSize->DataFracOfAutosizedHeatingCapacity = 1.0; - auto &Zone = state.dataHeatBal->Zone; + auto const &Zone = state.dataHeatBal->Zone; if (SystemType == LowTempRadiantSystem::SystemType::ElectricSystem) { @@ -3533,7 +3513,7 @@ namespace LowTempRadiantSystem { for (int surfNum = 1; surfNum <= this->NumOfSurfaces; ++surfNum) { auto &thisHydrSysSurf = state.dataSurface->Surface(this->SurfacePtr(surfNum)); - auto &thisHydrSpacing = state.dataConstruction->Construct(thisHydrSysSurf.Construction).ThicknessPerpend; + auto const &thisHydrSpacing = state.dataConstruction->Construct(thisHydrSysSurf.Construction).ThicknessPerpend; if ((thisHydrSpacing > 0.005) && (thisHydrSpacing < 0.5)) { // limit allowable spacing to between 1cm and 1m tubeLength += thisHydrSysSurf.Area / (2.0 * thisHydrSpacing); } else { // if not in allowable limit, default back to 0.15m (15cm or 6 inches) @@ -4135,7 +4115,6 @@ namespace LowTempRadiantSystem { this->CondCausedShutDown = true; WaterMassFlow = 0.0; this->OperatingMode = NotOperating; - RadSurfNum = RadSurfNum2; SetComponentFlowRate(state, WaterMassFlow, this->ColdWaterInNode, this->ColdWaterOutNode, this->CWPlantLoc); this->WaterMassFlowRate = WaterMassFlow; for (RadSurfNum3 = 1; RadSurfNum3 <= this->NumOfSurfaces; ++RadSurfNum3) { @@ -4256,7 +4235,6 @@ namespace LowTempRadiantSystem { Real64 SysWaterInTemp; // Fluid temperature supplied from the loop Real64 WaterTempHi; // Current high point in water temperature range Real64 WaterTempLo; // Current low point in water temperature range - int ZoneNum; // number of zone being served Real64 mdot; // local temporary for water mass flow rate kg/s ConstantFlowRadDesignData ConstantFlowDesignDataObject = // Once again, is this supposed to be a deep copy? @@ -4265,7 +4243,6 @@ namespace LowTempRadiantSystem { auto &Node = state.dataLoopNodes->Node; // initialize local variables - ZoneNum = this->ZonePtr; SysRunning = true; // default to running and turn off only if not running state.dataLowTempRadSys->VarOffCond = false; @@ -4765,7 +4742,6 @@ namespace LowTempRadiantSystem { Real64 TotalRadSysPower; // Total heat source/sink to radiant system Real64 TwiCoeff; // Intermeidate calculation variable for determining the water inlet temperature Real64 WaterMassFlow; // Water mass flow rate in the radiant system, kg/s - int WaterNodeIn; // Node number of the water entering the radiant system Real64 WaterOutletTempCheck; // Radiant system water outlet temperature (calculated from mixing all outlet streams together) Real64 WaterTempIn; // Temperature of the water entering the radiant system, in C int ZoneNum; // number of zone being served @@ -4803,20 +4779,6 @@ namespace LowTempRadiantSystem { state.dataLowTempRadSys->Cmj = 0.0; state.dataLowTempRadSys->WaterTempOut = this->WaterInletTemp; - // Set the conditions on the water side inlet - switch (this->OperatingMode) { - case HeatingMode: { - WaterNodeIn = this->HotWaterInNode; - } break; - case CoolingMode: { - WaterNodeIn = this->ColdWaterInNode; - } break; - default: { - ShowSevereError(state, "Illegal low temperature radiant system operating mode"); - ShowContinueError(state, format("Occurs in Radiant System={}", this->Name)); - ShowFatalError(state, "Preceding condition causes termination."); - } break; - } ZoneNum = this->ZonePtr; ZoneMult = double(Zone(ZoneNum).Multiplier * Zone(ZoneNum).ListMultiplier); WaterMassFlow = this->WaterMassFlowRate / ZoneMult; @@ -5971,7 +5933,7 @@ namespace LowTempRadiantSystem { } } - auto &Surface = state.dataSurface->Surface; + auto const &Surface = state.dataSurface->Surface; // For interzone surfaces, QRadSysSource was only updated for the "active" side. The // active side would have a non-zero value at this point. If the numbers differ, then we have to manually update. diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 99d492b7212..29b0888f0ed 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1540,10 +1540,9 @@ namespace VentilatedSlab { state.dataVentilatedSlab->MyZoneEqFlag.allocate(state.dataVentilatedSlab->NumOfVentSlabs); // Initialize total areas for all radiant systems and dimension record keeping arrays - for (RadNum = 1; RadNum <= state.dataVentilatedSlab->NumOfVentSlabs; ++RadNum) { - state.dataVentilatedSlab->VentSlab(RadNum).TotalSurfaceArea = 0.0; - auto &numRadSurfs = state.dataVentilatedSlab->VentSlab(RadNum).NumOfSurfaces; - auto &thisVentSlab = state.dataVentilatedSlab->VentSlab(RadNum); + for (auto &thisVentSlab : state.dataVentilatedSlab->VentSlab) { + thisVentSlab.TotalSurfaceArea = 0.0; + int numRadSurfs = thisVentSlab.NumOfSurfaces; for (SurfNum = 1; SurfNum <= numRadSurfs; ++SurfNum) { thisVentSlab.TotalSurfaceArea += state.dataSurface->Surface(thisVentSlab.SurfacePtr(SurfNum)).Area; } From f8676cf6183741c4f545dcc62d2e51cb9bcf78d8 Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Sun, 27 Aug 2023 12:22:51 -0700 Subject: [PATCH 062/161] Remove upper bound TU_HeatingLoad, keep bounded in piping calc --- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index f9d356c02c3..0b52142271d 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -11368,6 +11368,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Real64 SH_Comp; // Temperature difference between compressor inlet node and Tsuction [C] Real64 T_comp_in; // temperature of refrigerant at compressor inlet, after piping loss (c) [C] Real64 TU_HeatingLoad; // Heating load from terminal units, excluding heating loss [W] + Real64 TU_HeatingLoad_actual; // TU_HeatingLoad trimed to maximum system capacity[W] Real64 TU_CoolingLoad; // Cooling load from terminal units, excluding heating loss [W] Real64 Tdischarge; // VRF Compressor discharge refrigerant temperature [C] Real64 Tsuction; // VRF compressor suction refrigerant temperature [C] @@ -11436,6 +11437,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) } this->TUCoolingLoad = TU_CoolingLoad; // this is cooling coil load, not terminal unit load this->TUHeatingLoad = TU_HeatingLoad; // this is heating coil load, not terminal unit load + TU_HeatingLoad_actual = TU_HeatingLoad; // loop through TU's and calculate average inlet conditions for active coils for (NumTU = 1; NumTU <= NumTUInList; ++NumTU) { @@ -11783,9 +11785,6 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (Q_h_TU_PL > CompEvaporatingCAPSpdMax + CompEvaporatingPWRSpdMax) { // Required load is beyond the max system capacity - Q_h_TU_PL = CompEvaporatingCAPSpdMax; - // TU_HeatingLoad = CompEvaporatingCAPSpdMax; - this->TUHeatingLoad = TU_HeatingLoad; h_IU_cond_out = GetSatEnthalpyRefrig( state, this->RefrigerantName, @@ -11795,7 +11794,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) RoutineName); // Quality=0 h_IU_cond_out_ave = h_IU_cond_out; SC_IU_merged = 5; - m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out); + TU_HeatingLoad_actual = min(TU_HeatingLoad, CompEvaporatingCAPSpdMax + CompEvaporatingPWRSpdMax); + m_ref_IU_cond = TU_HeatingLoad_actual / (h_IU_cond_in - h_IU_cond_out); } else { for (NumTU = 1; NumTU <= NumTUInList; NumTU++) { @@ -11951,7 +11951,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->OUCoolingPWRFT(NumOfCompSpdInput), Tdischarge, Tsuction); // Include the piping loss, at the highest compressor speed - this->PipingCorrectionHeating = TU_HeatingLoad / (TU_HeatingLoad + Pipe_Q_h); + this->PipingCorrectionHeating = TU_HeatingLoad_actual / (TU_HeatingLoad_actual + Pipe_Q_h); state.dataHVACVarRefFlow->MaxHeatingCapacity(VRFCond) = this->HeatingCapacity; // for report, maximum condensing capacity the system can provide From a265954b375d5d38f1ee540a4ec6a340ae03c7b8 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 28 Aug 2023 08:13:49 -0500 Subject: [PATCH 063/161] format --- src/EnergyPlus/DataAirLoop.hh | 38 +++++++++---------- src/EnergyPlus/SimAirServingZones.hh | 20 +++++----- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 12 +++--- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/EnergyPlus/DataAirLoop.hh b/src/EnergyPlus/DataAirLoop.hh index 172fc455a17..2b49d996f33 100644 --- a/src/EnergyPlus/DataAirLoop.hh +++ b/src/EnergyPlus/DataAirLoop.hh @@ -161,25 +161,25 @@ namespace DataAirLoop { struct AirLoopFlowData // Derived type for air loop flow information { // Members - Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] - Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) - Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager - Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] - Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] - Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step - Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] - Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] - Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] - Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust - Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] - Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] - Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] - Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] - Real64 FanPLR = 1.0; // Operating PLR of air loop fan - Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate - Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] - bool FlowError = false; // error flag for flow error message - Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum + Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] + Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) + Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager + Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] + Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] + Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step + Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] + Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] + Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] + Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust + Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] + Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] + Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] + Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] + Real64 FanPLR = 1.0; // Operating PLR of air loop fan + Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate + Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] + bool FlowError = false; // error flag for flow error message + Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum }; enum class ControllerKind diff --git a/src/EnergyPlus/SimAirServingZones.hh b/src/EnergyPlus/SimAirServingZones.hh index 7fd6c5b8a68..cd0e8faaca5 100644 --- a/src/EnergyPlus/SimAirServingZones.hh +++ b/src/EnergyPlus/SimAirServingZones.hh @@ -236,8 +236,8 @@ struct SimAirServingZonesData : BaseGlobalStruct Real64 Vou = 0.0; // Uncorrected outdoor air intake for all zones per ASHRAE std 62.1 Real64 Vot = 0.0; // Required outdoor air intake at primary AHU per ASHRAE std 62.1 - int TUInNode = 0; // inlet node number of a terminal unit - Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s + int TUInNode = 0; // inlet node number of a terminal unit + Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s Real64 MassFlowSetToler; int salIterMax = 0; // Maximum of iteration counters across all air loops int salIterTot = 0; // Aggregated number of iterations across all air loops @@ -303,14 +303,14 @@ struct SimAirServingZonesData : BaseGlobalStruct this->Vou = 0.0; this->Vot = 0.0; - this->TUInNode = 0; // inlet node number of a terminal unit - this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s - this->salIterMax = 0; // Maximum of iteration counters across all air loops - this->salIterTot = 0; // Aggregated number of iterations across all air loops - this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops - this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop - this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop - this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations + this->TUInNode = 0; // inlet node number of a terminal unit + this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s + this->salIterMax = 0; // Maximum of iteration counters across all air loops + this->salIterTot = 0; // Aggregated number of iterations across all air loops + this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops + this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop + this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop + this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations this->AirLoopConvergedFlagSAL = false; this->DoWarmRestartFlagSAL = false; this->WarmRestartStatusSAL = DataHVACControllers::ControllerWarmRestart::None; diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 20cee68bda2..8d4d24f6d9a 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -667,15 +667,15 @@ namespace ZoneAirLoopEquipmentManager { bool ProvideSysOutput; int AirDistCompNum; - int InNodeNum; // air distribution unit inlet node - int OutNodeNum; // air distribution unit outlet node - //int AirLoopNum(0); // index of air loop + int InNodeNum; // air distribution unit inlet node + int OutNodeNum; // air distribution unit outlet node + // int AirLoopNum(0); // index of air loop Real64 MassFlowRateMaxAvail; // max avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateMinAvail; // min avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateUpStreamLeakMax; // max upstream leak flow rate [kg/s] - //Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate - Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) - Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) + // Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate + Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) + Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) ProvideSysOutput = true; for (AirDistCompNum = 1; AirDistCompNum <= state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).NumComponents; ++AirDistCompNum) { From 4eb23503a05603347c9a9bd4cee59be55d474b00 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 28 Aug 2023 08:19:56 -0500 Subject: [PATCH 064/161] remove unused --- src/EnergyPlus/SimAirServingZones.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index 5e3e1493026..cc7d6dbde08 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2087,7 +2087,6 @@ void InitAirLoops(EnergyPlusData &state, bool const FirstHVACIteration) // TRUE // calculate the ratio of air loop design flow to the sum of the zone design flows for (int AirLoopNum = 1; AirLoopNum <= numPrimaryAirSys; ++AirLoopNum) { auto &thisPrimaryAirSys = state.dataAirSystemsData->PrimaryAirSystems(AirLoopNum); - auto &thisAirToZoneNodeInfo = state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum); state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply = thisPrimaryAirSys.DesignVolFlowRate * state.dataEnvrn->StdRhoAir; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesReturnFrac = thisPrimaryAirSys.DesignReturnFlowFraction; } From 70f3f00222ca30d021d2dc686bbd54d2cef0357c Mon Sep 17 00:00:00 2001 From: jcyuan Date: Mon, 28 Aug 2023 12:35:20 -0500 Subject: [PATCH 065/161] Change default FlowRatio values from zero to 1 for exhaust elements flow request. --- src/EnergyPlus/ExhaustAirSystemManager.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/ExhaustAirSystemManager.hh b/src/EnergyPlus/ExhaustAirSystemManager.hh index 2117972ac6c..0d2ef96c4c0 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.hh +++ b/src/EnergyPlus/ExhaustAirSystemManager.hh @@ -133,7 +133,7 @@ namespace ExhaustAirSystemManager { void SimZoneHVACExhaustControls(EnergyPlusData &state); - void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio = 0.0); + void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio = 1.0); void SizeExhaustSystem(EnergyPlusData &state, int const exhSysNum); From 6037259fd5c49ee801f60d9502c953eacd34a13c Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 28 Aug 2023 15:07:50 -0500 Subject: [PATCH 066/161] Rename heat balance vars with redundant Zone in name --- src/EnergyPlus/AirflowNetwork/src/Solver.cpp | 146 ++++---- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 4 +- src/EnergyPlus/ConvectionCoefficients.cc | 10 +- src/EnergyPlus/CoolTower.cc | 2 +- src/EnergyPlus/DXCoils.cc | 26 +- src/EnergyPlus/DataSurfaces.cc | 2 +- src/EnergyPlus/DisplacementVentMgr.cc | 16 +- src/EnergyPlus/HVACManager.cc | 107 +++--- src/EnergyPlus/HeatBalanceAirManager.cc | 2 +- src/EnergyPlus/HeatBalanceSurfaceManager.cc | 14 +- src/EnergyPlus/InternalHeatGains.cc | 18 +- src/EnergyPlus/LowTempRadiantSystem.cc | 4 +- src/EnergyPlus/MoistureBalanceEMPDManager.cc | 6 +- src/EnergyPlus/MundtSimMgr.cc | 4 +- src/EnergyPlus/PurchasedAirManager.cc | 14 +- src/EnergyPlus/RoomAirModelAirflowNetwork.cc | 10 +- src/EnergyPlus/RoomAirModelManager.cc | 8 +- src/EnergyPlus/RoomAirModelUserTempPattern.cc | 4 +- src/EnergyPlus/SwimmingPool.cc | 6 +- src/EnergyPlus/SystemAvailabilityManager.cc | 6 +- src/EnergyPlus/SystemReports.cc | 2 +- src/EnergyPlus/ThermalChimney.cc | 16 +- src/EnergyPlus/ThermalComfort.cc | 12 +- src/EnergyPlus/UFADManager.cc | 28 +- src/EnergyPlus/UnitarySystem.cc | 2 +- src/EnergyPlus/VentilatedSlab.cc | 8 +- src/EnergyPlus/WaterUse.cc | 2 +- src/EnergyPlus/WindowComplexManager.cc | 4 +- src/EnergyPlus/WindowManager.cc | 6 +- .../ZoneContaminantPredictorCorrector.cc | 6 +- src/EnergyPlus/ZoneEquipmentManager.cc | 16 +- src/EnergyPlus/ZoneTempPredictorCorrector.cc | 321 +++++++++--------- src/EnergyPlus/ZoneTempPredictorCorrector.hh | 83 +++-- .../unit/AirflowNetworkConditions.unit.cc | 2 +- .../unit/AirflowNetworkHVAC.unit.cc | 38 +-- .../unit/ConvectionCoefficients.unit.cc | 2 +- tst/EnergyPlus/unit/CoolTower.unit.cc | 2 +- tst/EnergyPlus/unit/HVACManager.unit.cc | 36 +- .../unit/HeatBalanceSurfaceManager.unit.cc | 38 +-- tst/EnergyPlus/unit/HybridModel.unit.cc | 30 +- tst/EnergyPlus/unit/InternalHeatGains.unit.cc | 24 +- .../unit/MoistureBalanceEMPD.unit.cc | 6 +- .../unit/PackagedTerminalHeatPump.unit.cc | 6 +- .../unit/PurchasedAirManager.unit.cc | 2 +- .../unit/RoomAirflowNetwork.unit.cc | 14 +- tst/EnergyPlus/unit/SecondaryDXCoils.unit.cc | 4 +- tst/EnergyPlus/unit/ThermalChimney.unit.cc | 2 +- tst/EnergyPlus/unit/ThermalComfort.unit.cc | 12 +- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 6 +- tst/EnergyPlus/unit/WindowManager.unit.cc | 20 +- .../ZoneContaminantPredictorCorrector.unit.cc | 16 +- .../unit/ZoneEquipmentManager.unit.cc | 16 +- .../unit/ZoneTempPredictorCorrector.unit.cc | 70 ++-- 53 files changed, 625 insertions(+), 636 deletions(-) diff --git a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp index c383d81e934..c9a335885eb 100644 --- a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp +++ b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp @@ -5398,7 +5398,7 @@ namespace AirflowNetwork { for (i = 1; i <= m_state.dataGlobal->NumOfZones; ++i) { ANZT(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).MAT; - ANZW(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).ZoneAirHumRat; + ANZW(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).airHumRat; if (m_state.dataContaminantBalance->Contaminant.CO2Simulation) { ANCO(i) = m_state.dataContaminantBalance->ZoneAirCO2(i); } @@ -5435,7 +5435,7 @@ namespace AirflowNetwork { } else { for (i = 1; i <= m_state.dataGlobal->NumOfZones; ++i) { ANZT(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).MAT; - ANZW(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).ZoneAirHumRat; + ANZW(i) = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i).airHumRat; if (m_state.dataContaminantBalance->Contaminant.CO2Simulation) ANCO(i) = m_state.dataContaminantBalance->ZoneAirCO2(i); if (m_state.dataContaminantBalance->Contaminant.GenericContamSimulation) ANGC(i) = m_state.dataContaminantBalance->ZoneAirGC(i); @@ -8682,7 +8682,7 @@ namespace AirflowNetwork { Tamb = Zone(ZN1).OutDryBulbTemp; CpAir = PsyCpAirFnW(m_state.dataEnvrn->OutHumRat); } - hg = Psychrometrics::PsyHgAirFnWTdb(zn1HB.ZoneAirHumRat, zn1HB.MAT); + hg = Psychrometrics::PsyHgAirFnWTdb(zn1HB.airHumRat, zn1HB.MAT); if (AirflowNetworkCompData(AirflowNetworkLinkageData(i).CompNum).CompTypeNum == iComponentTypeNum::SCR || AirflowNetworkCompData(AirflowNetworkLinkageData(i).CompNum).CompTypeNum == iComponentTypeNum::SEL) { @@ -8695,16 +8695,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN1).MultiZoneInfiSenLossJ += (AirflowNetworkLinkSimu(i).FLOW2 * CpAir * (zn1HB.MAT - Tamb)) * ReportingConstant; } - if (m_state.dataEnvrn->OutHumRat > zn1HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneInfiLatGainW += - (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneInfiLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN1).MultiZoneInfiLatLossW += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneInfiLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; } } else { if (Tamb > zn1HB.MAT) { @@ -8716,16 +8716,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN1).MultiZoneVentSenLossJ += (AirflowNetworkLinkSimu(i).FLOW2 * CpAir * (zn1HB.MAT - Tamb)) * ReportingConstant; } - if (m_state.dataEnvrn->OutHumRat > zn1HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneVentLatGainW += - (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneVentLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN1).MultiZoneVentLatLossW += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneVentLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; } } } @@ -8741,7 +8741,7 @@ namespace AirflowNetwork { Tamb = Zone(ZN2).OutDryBulbTemp; CpAir = PsyCpAirFnW(m_state.dataEnvrn->OutHumRat); } - hg = Psychrometrics::PsyHgAirFnWTdb(zn2HB.ZoneAirHumRat, zn2HB.MAT); + hg = Psychrometrics::PsyHgAirFnWTdb(zn2HB.airHumRat, zn2HB.MAT); if (AirflowNetworkCompData(AirflowNetworkLinkageData(i).CompNum).CompTypeNum == iComponentTypeNum::SCR || AirflowNetworkCompData(AirflowNetworkLinkageData(i).CompNum).CompTypeNum == iComponentTypeNum::SEL) { @@ -8754,16 +8754,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneInfiSenLossJ += (AirflowNetworkLinkSimu(i).FLOW * CpAir * (zn2HB.MAT - Tamb)) * ReportingConstant; } - if (m_state.dataEnvrn->OutHumRat > zn2HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneInfiLatGainW += - (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneInfiLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN2).MultiZoneInfiLatLossW += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneInfiLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; } } else { if (Tamb > zn2HB.MAT) { @@ -8775,16 +8775,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneVentSenLossJ += (AirflowNetworkLinkSimu(i).FLOW * CpAir * (zn2HB.MAT - Tamb)) * ReportingConstant; } - if (m_state.dataEnvrn->OutHumRat > zn2HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneVentLatGainW += - (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneVentLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN2).MultiZoneVentLatLossW += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneVentLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * hg * ReportingConstant; } } } @@ -8792,8 +8792,8 @@ namespace AirflowNetwork { if (ZN1 > 0 && ZN2 > 0) { auto const &zn1HB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZN1); auto const &zn2HB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZN2); - CpAir = PsyCpAirFnW((zn1HB.ZoneAirHumRat + zn2HB.ZoneAirHumRat) / 2.0); - hg = Psychrometrics::PsyHgAirFnWTdb((zn1HB.ZoneAirHumRat + zn2HB.ZoneAirHumRat) / 2.0, (zn1HB.MAT + zn2HB.MAT) / 2.0); + CpAir = PsyCpAirFnW((zn1HB.airHumRat + zn2HB.airHumRat) / 2.0); + hg = Psychrometrics::PsyHgAirFnWTdb((zn1HB.airHumRat + zn2HB.airHumRat) / 2.0, (zn1HB.MAT + zn2HB.MAT) / 2.0); if (zn1HB.MAT > zn2HB.MAT) { AirflowNetworkReportData(ZN2).MultiZoneMixSenGainW += (AirflowNetworkLinkSimu(i).FLOW * CpAir * (zn1HB.MAT - zn2HB.MAT)); AirflowNetworkReportData(ZN2).MultiZoneMixSenGainJ += @@ -8803,16 +8803,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneMixSenLossJ += (AirflowNetworkLinkSimu(i).FLOW * CpAir * (zn2HB.MAT - zn1HB.MAT)) * ReportingConstant; } - if (zn1HB.ZoneAirHumRat > zn2HB.ZoneAirHumRat) { + if (zn1HB.airHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneMixLatGainW += - (AirflowNetworkLinkSimu(i).FLOW * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (zn1HB.airHumRat - zn2HB.airHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneMixLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (zn1HB.airHumRat - zn2HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN2).MultiZoneMixLatLossW += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - zn1HB.airHumRat)) * hg; AirflowNetworkReportData(ZN2).MultiZoneMixLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW * (zn2HB.airHumRat - zn1HB.airHumRat)) * hg * ReportingConstant; } if (zn2HB.MAT > zn1HB.MAT) { AirflowNetworkReportData(ZN1).MultiZoneMixSenGainW += (AirflowNetworkLinkSimu(i).FLOW2 * CpAir * (zn2HB.MAT - zn1HB.MAT)); @@ -8823,16 +8823,16 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN1).MultiZoneMixSenLossJ += (AirflowNetworkLinkSimu(i).FLOW2 * CpAir * (zn1HB.MAT - zn2HB.MAT)) * ReportingConstant; } - if (zn2HB.ZoneAirHumRat > zn1HB.ZoneAirHumRat) { + if (zn2HB.airHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneMixLatGainW += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * hg; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn2HB.airHumRat - zn1HB.airHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneMixLatGainJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn2HB.airHumRat - zn1HB.airHumRat)) * hg * ReportingConstant; } else { AirflowNetworkReportData(ZN1).MultiZoneMixLatLossW += - std::abs(AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * hg; + std::abs(AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - zn2HB.airHumRat)) * hg; AirflowNetworkReportData(ZN1).MultiZoneMixLatLossJ += - (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * hg * ReportingConstant; + (AirflowNetworkLinkSimu(i).FLOW2 * (zn1HB.airHumRat - zn2HB.airHumRat)) * hg * ReportingConstant; } } } @@ -8986,17 +8986,17 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN1).MultiZoneInfiSenLossJ += (linkReport1(i).FLOW2OFF * CpAir * (zn1HB.MAT - Tamb)) * ReportingConstant * ReportingFraction; } - if (m_state.dataEnvrn->OutHumRat > zn1HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneInfiLatGainW += - (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneInfiLatGainJ += - (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * ReportingConstant * + (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN1).MultiZoneInfiLatLossW += - (linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; + (linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneInfiLatLossJ += - (linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * + (linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * ReportingFraction; } } else { @@ -9011,17 +9011,17 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN1).MultiZoneVentSenLossJ += (linkReport1(i).FLOW2OFF * CpAir * (zn1HB.MAT - Tamb)) * ReportingConstant * ReportingFraction; } - if (m_state.dataEnvrn->OutHumRat > zn1HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneVentLatGainW += - (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneVentLatGainJ += - (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.ZoneAirHumRat)) * ReportingConstant * + (linkReport1(i).FLOW2OFF * (m_state.dataEnvrn->OutHumRat - zn1HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN1).MultiZoneVentLatLossW += - (linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; + (linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneVentLatLossJ += - (linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * + (linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * ReportingFraction; } } @@ -9055,17 +9055,17 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneInfiSenLossJ += (linkReport1(i).FLOWOFF * CpAir * (zn2HB.MAT - Tamb)) * ReportingConstant * ReportingFraction; } - if (m_state.dataEnvrn->OutHumRat > zn2HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneInfiLatGainW += - (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneInfiLatGainJ += - (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * ReportingConstant * + (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN2).MultiZoneInfiLatLossW += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneInfiLatLossJ += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * ReportingFraction; } } else { @@ -9080,17 +9080,17 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneVentSenLossJ += (linkReport1(i).FLOWOFF * CpAir * (zn2HB.MAT - Tamb)) * ReportingConstant * ReportingFraction; } - if (m_state.dataEnvrn->OutHumRat > zn2HB.ZoneAirHumRat) { + if (m_state.dataEnvrn->OutHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneVentLatGainW += - (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneVentLatGainJ += - (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.ZoneAirHumRat)) * ReportingConstant * + (linkReport1(i).FLOWOFF * (m_state.dataEnvrn->OutHumRat - zn2HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN2).MultiZoneVentLatLossW += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneVentLatLossJ += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - m_state.dataEnvrn->OutHumRat)) * ReportingConstant * ReportingFraction; } } @@ -9103,7 +9103,7 @@ namespace AirflowNetwork { auto &zn1HB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZN1); auto &zn2HB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZN2); ReportingFraction = (1.0 - MaxOnOffFanRunTimeFraction); - CpAir = PsyCpAirFnW(zn1HB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(zn1HB.airHumRat); if (zn1HB.MAT > zn2HB.MAT) { AirflowNetworkReportData(ZN2).MultiZoneMixSenGainW += (linkReport1(i).FLOWOFF * CpAir * (zn1HB.MAT - zn2HB.MAT)) * ReportingFraction; @@ -9115,18 +9115,18 @@ namespace AirflowNetwork { AirflowNetworkReportData(ZN2).MultiZoneMixSenLossJ += (linkReport1(i).FLOWOFF * CpAir * (zn2HB.MAT - zn1HB.MAT)) * ReportingConstant * ReportingFraction; } - if (zn1HB.ZoneAirHumRat > zn2HB.ZoneAirHumRat) { + if (zn1HB.airHumRat > zn2HB.airHumRat) { AirflowNetworkReportData(ZN2).MultiZoneMixLatGainW += - (linkReport1(i).FLOWOFF * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn1HB.airHumRat - zn2HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneMixLatGainJ += - (linkReport1(i).FLOWOFF * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * ReportingConstant * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn1HB.airHumRat - zn2HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN2).MultiZoneMixLatLossW += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - zn1HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN2).MultiZoneMixLatLossJ += - (linkReport1(i).FLOWOFF * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * ReportingConstant * ReportingFraction; + (linkReport1(i).FLOWOFF * (zn2HB.airHumRat - zn1HB.airHumRat)) * ReportingConstant * ReportingFraction; } - CpAir = PsyCpAirFnW(zn2HB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(zn2HB.airHumRat); if (zn2HB.MAT > zn1HB.MAT) { AirflowNetworkReportData(ZN1).MultiZoneMixSenGainW += (linkReport1(i).FLOW2OFF * CpAir * (zn2HB.MAT - zn1HB.MAT)) * ReportingFraction; @@ -9139,16 +9139,16 @@ namespace AirflowNetwork { (linkReport1(i).FLOW2OFF * CpAir * (zn1HB.MAT - zn2HB.MAT)) * ReportingConstant * ReportingFraction; } - if (zn2HB.ZoneAirHumRat > zn1HB.ZoneAirHumRat) { + if (zn2HB.airHumRat > zn1HB.airHumRat) { AirflowNetworkReportData(ZN1).MultiZoneMixLatGainW += - (linkReport1(i).FLOW2OFF * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * ReportingFraction; + (linkReport1(i).FLOW2OFF * (zn2HB.airHumRat - zn1HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneMixLatGainJ += - (linkReport1(i).FLOW2OFF * (zn2HB.ZoneAirHumRat - zn1HB.ZoneAirHumRat)) * ReportingConstant * ReportingFraction; + (linkReport1(i).FLOW2OFF * (zn2HB.airHumRat - zn1HB.airHumRat)) * ReportingConstant * ReportingFraction; } else { AirflowNetworkReportData(ZN1).MultiZoneMixLatLossW += - std::abs(linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * ReportingFraction; + std::abs(linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - zn2HB.airHumRat)) * ReportingFraction; AirflowNetworkReportData(ZN1).MultiZoneMixLatLossJ += - (linkReport1(i).FLOW2OFF * (zn1HB.ZoneAirHumRat - zn2HB.ZoneAirHumRat)) * ReportingConstant * ReportingFraction; + (linkReport1(i).FLOW2OFF * (zn1HB.airHumRat - zn2HB.airHumRat)) * ReportingConstant * ReportingFraction; } } } @@ -9162,8 +9162,8 @@ namespace AirflowNetwork { for (i = 1; i <= m_state.dataGlobal->NumOfZones; ++i) { // Start of zone loads report variable update loop ... auto &thisZoneHB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(i); Tamb = Zone(i).OutDryBulbTemp; - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRatAvg); - AirDensity = PsyRhoAirFnPbTdbW(m_state, m_state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRatAvg); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRatAvg); + AirDensity = PsyRhoAirFnPbTdbW(m_state, m_state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRatAvg); AirflowNetworkZnRpt(i).InfilMass = (exchangeData(i).SumMCp / CpAir) * ReportingConstant; AirflowNetworkZnRpt(i).InfilVolume = AirflowNetworkZnRpt(i).InfilMass / AirDensity; @@ -9212,7 +9212,7 @@ namespace AirflowNetwork { AirflowNetworkZnRpt(i).InletMass - AirflowNetworkZnRpt(i).OutletMass; AirflowNetworkZnRpt(i).ExfilSensiLoss = AirflowNetworkZnRpt(i).ExfilMass / ReportingConstant * (thisZoneHB.MAT - Tamb) * CpAir; AirflowNetworkZnRpt(i).ExfilLatentLoss = - AirflowNetworkZnRpt(i).ExfilMass / ReportingConstant * (thisZoneHB.ZoneAirHumRat - m_state.dataEnvrn->OutHumRat) * H2OHtOfVap; + AirflowNetworkZnRpt(i).ExfilMass / ReportingConstant * (thisZoneHB.airHumRat - m_state.dataEnvrn->OutHumRat) * H2OHtOfVap; AirflowNetworkZnRpt(i).ExfilTotalLoss = AirflowNetworkZnRpt(i).ExfilSensiLoss + AirflowNetworkZnRpt(i).ExfilLatentLoss; m_state.dataHeatBal->ZoneTotalExfiltrationHeatLoss += AirflowNetworkZnRpt(i).ExfilTotalLoss * ReportingConstant; @@ -11717,8 +11717,8 @@ namespace AirflowNetwork { auto &TimeStepSys = m_state.dataHVACGlobal->TimeStepSys; auto &thisZoneHB = m_state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); - Real64 CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); - Real64 RhoAir = PsyRhoAirFnPbTdbW(m_state, m_state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); + Real64 RhoAir = PsyRhoAirFnPbTdbW(m_state, m_state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRat); Real64 InfilVolume = ((exchangeData(ZoneNum).SumMCp + exchangeData(ZoneNum).SumMVCp) / CpAir / RhoAir) * TimeStepSys * Constant::SecInHour; Real64 ACH = InfilVolume / (TimeStepSys * m_state.dataHeatBal->Zone(ZoneNum).Volume); diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index ef41a5cdc6b..833ad9b8398 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -1238,8 +1238,8 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli // iterate like in the low temperature radiant systems because the inlet water condition is known // not calculated. So, we can deal with this upfront rather than after calculation and then more // iteration. - Real64 DewPointTemp = Psychrometrics::PsyTdpFnWPb( - state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + Real64 DewPointTemp = + Psychrometrics::PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRat, state.dataEnvrn->OutBaroPress); if (waterInletTemp < (DewPointTemp + this->CondDewPtDeltaT) && (CoolingPanelOn)) { diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index 87565305024..0a0778a1ee0 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -2166,7 +2166,7 @@ void CalcCeilingDiffuserIntConvCoeff(EnergyPlusData &state, Real64 ACH = CalcCeilingDiffuserACH(state, ZoneNum); - Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; for (int spaceNum : state.dataHeatBal->Zone(ZoneNum).spaceIndexes) { auto const &thisSpace = state.dataHeatBal->space(spaceNum); @@ -2726,7 +2726,7 @@ void CalcISO15099WindowIntConvCoeff(EnergyPlusData &state, // Get humidity ratio Real64 AirHumRat = - (surface.Zone > 0) ? state.dataZoneTempPredictorCorrector->zoneHeatBalance(surface.Zone).ZoneAirHumRatAvg : state.dataEnvrn->OutHumRat; + (surface.Zone > 0) ? state.dataZoneTempPredictorCorrector->zoneHeatBalance(surface.Zone).airHumRatAvg : state.dataEnvrn->OutHumRat; Real64 Height = surface.Height; Real64 TiltDeg = surface.Tilt; @@ -3197,7 +3197,7 @@ Real64 EvaluateIntHcModels(EnergyPlusData &state, int const SurfNum, HcInt const case HcInt::FisherPedersenCeilDiffuserFloor: { Real64 AirChangeRate = CalcCeilingDiffuserACH(state, ZoneNum); - Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; if (thisSurface.ExtBoundCond == DataSurfaces::KivaFoundation) { HnFn = [=, &state](double Tsurf, double Tamb, double, double, double cosTilt) -> double { @@ -3218,7 +3218,7 @@ Real64 EvaluateIntHcModels(EnergyPlusData &state, int const SurfNum, HcInt const case HcInt::FisherPedersenCeilDiffuserCeiling: { Real64 AirChangeRate = CalcCeilingDiffuserACH(state, ZoneNum); - Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; if (thisSurface.ExtBoundCond == DataSurfaces::KivaFoundation) { HnFn = [=, &state](double Tsurf, double Tamb, double, double, double cosTilt) -> double { @@ -3239,7 +3239,7 @@ Real64 EvaluateIntHcModels(EnergyPlusData &state, int const SurfNum, HcInt const case HcInt::FisherPedersenCeilDiffuserWalls: { Real64 AirChangeRate = CalcCeilingDiffuserACH(state, ZoneNum); - Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 AirHumRat = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; if (thisSurface.ExtBoundCond == DataSurfaces::KivaFoundation) { HnFn = [=, &state](double Tsurf, double Tamb, double, double, double cosTilt) -> double { diff --git a/src/EnergyPlus/CoolTower.cc b/src/EnergyPlus/CoolTower.cc index 3f80f4eb588..efe6a09bb9a 100644 --- a/src/EnergyPlus/CoolTower.cc +++ b/src/EnergyPlus/CoolTower.cc @@ -718,7 +718,7 @@ namespace CoolTower { thisZoneHB.CTMFL = thisZoneHB.MCPC / AirSpecHeat; state.dataCoolTower->CoolTowerSys(CoolTowerNum).SenHeatPower = thisZoneHB.MCPC * std::abs(thisZoneHB.ZT - OutletTemp); - state.dataCoolTower->CoolTowerSys(CoolTowerNum).LatHeatPower = CVF_ZoneNum * std::abs(thisZoneHB.ZoneAirHumRat - OutletHumRat); + state.dataCoolTower->CoolTowerSys(CoolTowerNum).LatHeatPower = CVF_ZoneNum * std::abs(thisZoneHB.airHumRat - OutletHumRat); state.dataCoolTower->CoolTowerSys(CoolTowerNum).OutletTemp = OutletTemp; state.dataCoolTower->CoolTowerSys(CoolTowerNum).OutletHumRat = OutletHumRat; state.dataCoolTower->CoolTowerSys(CoolTowerNum).AirVolFlowRate = CVF_ZoneNum; diff --git a/src/EnergyPlus/DXCoils.cc b/src/EnergyPlus/DXCoils.cc index 10b27efa831..84db7a0269f 100644 --- a/src/EnergyPlus/DXCoils.cc +++ b/src/EnergyPlus/DXCoils.cc @@ -7307,7 +7307,7 @@ void InitDXCoil(EnergyPlusData &state, int const DXCoilNum) // number of the cur if (thisDXCoil.IsSecondaryDXCoilInZone) { thisDXCoil.EvapInletWetBulb = PsyTwbFnTdbWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr).ZT, - state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr).ZoneAirHumRat, + state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr).airHumRat, state.dataEnvrn->OutBaroPress, RoutineName); } @@ -9367,7 +9367,7 @@ void CalcDoe2DXCoil(EnergyPlusData &state, if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } @@ -9390,7 +9390,7 @@ void CalcDoe2DXCoil(EnergyPlusData &state, CondInletTemp = secZoneHB.ZT; CompAmbTemp = CondInletTemp; // assumes compressor is in same location as secondary coil OutdoorDryBulb = CondInletTemp; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } @@ -11015,7 +11015,7 @@ void CalcDXHeatingCoil(EnergyPlusData &state, if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; CompAmbTemp = OutdoorDryBulb; @@ -11024,7 +11024,7 @@ void CalcDXHeatingCoil(EnergyPlusData &state, } else if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; CompAmbTemp = OutdoorDryBulb; @@ -11497,7 +11497,7 @@ void CalcMultiSpeedDXCoil(EnergyPlusData &state, if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; CompAmbTemp = OutdoorDryBulb; @@ -11505,7 +11505,7 @@ void CalcMultiSpeedDXCoil(EnergyPlusData &state, } else if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; CompAmbTemp = OutdoorDryBulb; @@ -12729,14 +12729,14 @@ void CalcMultiSpeedDXCoilCooling(EnergyPlusData &state, if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } } else if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; OutdoorWetBulb = thisDXCoil.EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } else { @@ -13625,14 +13625,14 @@ void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state, if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; // OutdoorWetBulb = DXCoil( DXCoilNum ).EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } } else if (thisDXCoil.IsSecondaryDXCoilInZone) { auto &secZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisDXCoil.SecZonePtr); OutdoorDryBulb = secZoneHB.ZT; - OutdoorHumRat = secZoneHB.ZoneAirHumRat; + OutdoorHumRat = secZoneHB.airHumRat; // OutdoorWetBulb = DXCoil( DXCoilNum ).EvapInletWetBulb; OutdoorPressure = state.dataEnvrn->OutBaroPress; } else { @@ -16314,7 +16314,7 @@ void CalcSecondaryDXCoils(EnergyPlusData &state, int const DXCoilNum) } thisDXCoil.SecCoilTotalHeatRemovalRate = -TotalHeatRemovalRate; // +DXCoil( DXCoilNum ).DefrostPower; EvapInletDryBulb = secZoneHB.ZT; - EvapInletHumRat = secZoneHB.ZoneAirHumRat; + EvapInletHumRat = secZoneHB.airHumRat; RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, EvapInletDryBulb, EvapInletHumRat); EvapAirMassFlow = RhoAir * thisDXCoil.SecCoilAirFlow; ; @@ -16370,7 +16370,7 @@ void CalcSecondaryDXCoils(EnergyPlusData &state, int const DXCoilNum) } break; case CoilDX_MultiSpeedHeating: { EvapInletDryBulb = secZoneHB.ZT; - EvapInletHumRat = secZoneHB.ZoneAirHumRat; + EvapInletHumRat = secZoneHB.airHumRat; RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, EvapInletDryBulb, EvapInletHumRat); MSSpeedRatio = thisDXCoil.MSSpeedRatio; MSCycRatio = thisDXCoil.MSCycRatio; diff --git a/src/EnergyPlus/DataSurfaces.cc b/src/EnergyPlus/DataSurfaces.cc index 784779d8b98..8ce00de23f6 100644 --- a/src/EnergyPlus/DataSurfaces.cc +++ b/src/EnergyPlus/DataSurfaces.cc @@ -251,7 +251,7 @@ Real64 SurfaceData::getInsideAirTemperature(EnergyPlusData &state, const int t_S for (int NodeNum = 1; NodeNum <= state.dataZoneEquip->ZoneEquipConfig(Zone).NumInletNodes; ++NodeNum) { Real64 NodeTemp = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(Zone).InletNode(NodeNum)).Temp; Real64 MassFlowRate = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(Zone).InletNode(NodeNum)).MassFlowRate; - Real64 CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * NodeTemp; } diff --git a/src/EnergyPlus/DisplacementVentMgr.cc b/src/EnergyPlus/DisplacementVentMgr.cc index f2309eadd55..228cde79ef6 100644 --- a/src/EnergyPlus/DisplacementVentMgr.cc +++ b/src/EnergyPlus/DisplacementVentMgr.cc @@ -633,7 +633,7 @@ namespace RoomAir { for (int NodeNum = 1; NodeNum <= state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).NumInletNodes; ++NodeNum) { NodeTemp = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).InletNode(NodeNum)).Temp; MassFlowRate = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).InletNode(NodeNum)).MassFlowRate; - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * NodeTemp; } @@ -734,17 +734,17 @@ namespace RoomAir { state.dataRoomAir->AIRRATFloor(ZoneNum) = zone.Volume * min(state.dataRoomAir->HeightTransition(ZoneNum), state.dataDispVentMgr->HeightFloorSubzoneTop) / CeilingHeight * zone.ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATFloor(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATFloor(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; state.dataRoomAir->AIRRATOC(ZoneNum) = zone.Volume * (state.dataRoomAir->HeightTransition(ZoneNum) - min(state.dataRoomAir->HeightTransition(ZoneNum), 0.2)) / CeilingHeight * zone.ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; state.dataRoomAir->AIRRATMX(ZoneNum) = zone.Volume * (CeilingHeight - state.dataRoomAir->HeightTransition(ZoneNum)) / CeilingHeight * zone.ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; if (state.dataHVACGlobal->UseZoneTimeStepHistory) { state.dataRoomAir->ZTMFloor(ZoneNum)[2] = state.dataRoomAir->XMATFloor(ZoneNum)[2]; @@ -887,7 +887,7 @@ namespace RoomAir { state.dataRoomAir->AvgTempGrad(ZoneNum) = 0.0; state.dataRoomAir->MaxTempGrad(ZoneNum) = 0.0; state.dataRoomAir->AirModel(ZoneNum).SimAirModel = false; - Real64 const thisZoneT1 = thisZoneHB.ZoneT1; + Real64 const thisZoneT1 = thisZoneHB.T1; Real64 AirCap = thisZoneHB.AirPowerCap; TempHistTerm = AirCap * (3.0 * thisZoneHB.ZTM[0] - (3.0 / 2.0) * thisZoneHB.ZTM[1] + OneThird * thisZoneHB.ZTM[2]); diff --git a/src/EnergyPlus/HVACManager.cc b/src/EnergyPlus/HVACManager.cc index d002a5a362e..c4d8b22732e 100644 --- a/src/EnergyPlus/HVACManager.cc +++ b/src/EnergyPlus/HVACManager.cc @@ -160,14 +160,14 @@ void ManageHVAC(EnergyPlusData &state) thisZoneHB.ZT = thisZoneHB.MAT; // save for use with thermal comfort control models (Fang, Pierce, and KSU) thisZoneHB.ZTAV = 0.0; - thisZoneHB.ZoneAirHumRatAvg = 0.0; + thisZoneHB.airHumRatAvg = 0.0; } if (state.dataHeatBal->doSpaceHeatBalance) { for (auto &thisSpaceHB : state.dataZoneTempPredictorCorrector->spaceHeatBalance) { thisSpaceHB.ZT = thisSpaceHB.MAT; // save for use with thermal comfort control models (Fang, Pierce, and KSU) thisSpaceHB.ZTAV = 0.0; - thisSpaceHB.ZoneAirHumRatAvg = 0.0; + thisSpaceHB.airHumRatAvg = 0.0; } } state.dataHeatBalFanSys->ZoneThermostatSetPointHiAver = 0.0; @@ -390,12 +390,12 @@ void ManageHVAC(EnergyPlusData &state) for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); thisZoneHB.ZTAV += thisZoneHB.ZT * state.dataHVACGlobal->FracTimeStepZone; - thisZoneHB.ZoneAirHumRatAvg += thisZoneHB.ZoneAirHumRat * state.dataHVACGlobal->FracTimeStepZone; + thisZoneHB.airHumRatAvg += thisZoneHB.airHumRat * state.dataHVACGlobal->FracTimeStepZone; if (state.dataHeatBal->doSpaceHeatBalance) { for (int spaceNum : state.dataHeatBal->Zone(ZoneNum).spaceIndexes) { auto &thisSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum); thisSpaceHB.ZTAV += thisSpaceHB.ZT * state.dataHVACGlobal->FracTimeStepZone; - thisSpaceHB.ZoneAirHumRatAvg += thisSpaceHB.ZoneAirHumRat * state.dataHVACGlobal->FracTimeStepZone; + thisSpaceHB.airHumRatAvg += thisSpaceHB.airHumRat * state.dataHVACGlobal->FracTimeStepZone; } } if (state.dataContaminantBalance->Contaminant.CO2Simulation) @@ -545,12 +545,12 @@ void ManageHVAC(EnergyPlusData &state) for (auto &thisZoneHB : state.dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.ZTAVComf = thisZoneHB.ZTAV; - thisZoneHB.ZoneAirHumRatAvgComf = thisZoneHB.ZoneAirHumRatAvg; + thisZoneHB.airHumRatAvgComf = thisZoneHB.airHumRatAvg; } if (state.dataHeatBal->doSpaceHeatBalance) { for (auto &thisSpaceHB : state.dataZoneTempPredictorCorrector->spaceHeatBalance) { thisSpaceHB.ZTAVComf = thisSpaceHB.ZTAV; - thisSpaceHB.ZoneAirHumRatAvgComf = thisSpaceHB.ZoneAirHumRatAvg; + thisSpaceHB.airHumRatAvgComf = thisSpaceHB.airHumRatAvg; } } @@ -2275,17 +2275,17 @@ void ReportInfiltrations(EnergyPlusData &state) } // Report infiltration latent gains and losses - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.ZoneAirHumRat, thisZoneHB.MAT); - if (thisZoneHB.ZoneAirHumRat > state.dataEnvrn->OutHumRat) { + H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT); + if (thisZoneHB.airHumRat > state.dataEnvrn->OutHumRat) { thisInfiltration.InfilLatentLoss = - thisInfiltration.InfilMdot * (thisZoneHB.ZoneAirHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec; + thisInfiltration.InfilMdot * (thisZoneHB.airHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec; thisInfiltration.InfilLatentGain = 0.0; } else { thisInfiltration.InfilLatentGain = - thisInfiltration.InfilMdot * (state.dataEnvrn->OutHumRat - thisZoneHB.ZoneAirHumRat) * H2OHtOfVap * TimeStepSysSec; + thisInfiltration.InfilMdot * (state.dataEnvrn->OutHumRat - thisZoneHB.airHumRat) * H2OHtOfVap * TimeStepSysSec; thisInfiltration.InfilLatentLoss = 0.0; } // Total infiltration losses and gains @@ -2299,8 +2299,7 @@ void ReportInfiltrations(EnergyPlusData &state) thisInfiltration.InfilTotalLoss = -TotalLoad; } // CR7751 second, calculate using indoor conditions for density property - AirDensity = - Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRatAvg, RoutineName); + AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRatAvg, RoutineName); thisInfiltration.InfilVdotCurDensity = thisInfiltration.InfilMdot / AirDensity; thisInfiltration.InfilVolumeCurDensity = thisInfiltration.InfilVdotCurDensity * TimeStepSysSec; thisInfiltration.InfilAirChangeRate = thisInfiltration.InfilVolumeCurDensity / (TimeStepSys * thisZone.Volume); @@ -2425,17 +2424,17 @@ void ReportAirHeatBalance(EnergyPlusData &state) } // Report infiltration latent gains and losses CpAir = Psychrometrics::PsyCpAirFnW(state.dataEnvrn->OutHumRat); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.ZoneAirHumRat, thisZoneHB.MAT); - if (thisZoneHB.ZoneAirHumRat > state.dataEnvrn->OutHumRat) { + H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT); + if (thisZoneHB.airHumRat > state.dataEnvrn->OutHumRat) { znAirRpt.InfilLatentLoss = - thisZoneHB.MCPI / CpAir * (thisZoneHB.ZoneAirHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; + thisZoneHB.MCPI / CpAir * (thisZoneHB.airHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.InfilLatentGain = 0.0; } else { znAirRpt.InfilLatentGain = - thisZoneHB.MCPI / CpAir * (state.dataEnvrn->OutHumRat - thisZoneHB.ZoneAirHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; + thisZoneHB.MCPI / CpAir * (state.dataEnvrn->OutHumRat - thisZoneHB.airHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.InfilLatentLoss = 0.0; } // Total infiltration losses and gains @@ -2455,8 +2454,7 @@ void ReportAirHeatBalance(EnergyPlusData &state) znAirRpt.VentilMass = znAirRpt.VentilMdot * TimeStepSysSec; // CR7751 second, calculate using indoor conditions for density property - AirDensity = - Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRatAvg, RoutineName3); + AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRatAvg, RoutineName3); znAirRpt.InfilVdotCurDensity = znAirRpt.InfilMdot / AirDensity; znAirRpt.InfilVolumeCurDensity = znAirRpt.InfilVdotCurDensity * TimeStepSysSec; znAirRpt.InfilAirChangeRate = znAirRpt.InfilVolumeCurDensity / (TimeStepSys * zone.Volume); @@ -2500,14 +2498,14 @@ void ReportAirHeatBalance(EnergyPlusData &state) if (VentZoneNum > 1) continue; // Report ventilation latent gains and losses - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.ZoneAirHumRat, thisZoneHB.MAT); - if (thisZoneHB.ZoneAirHumRat > state.dataEnvrn->OutHumRat) { + H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT); + if (thisZoneHB.airHumRat > state.dataEnvrn->OutHumRat) { znAirRpt.VentilLatentLoss = - znAirRpt.VentilMdot * (thisZoneHB.ZoneAirHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec; + znAirRpt.VentilMdot * (thisZoneHB.airHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec; znAirRpt.VentilLatentGain = 0.0; } else { znAirRpt.VentilLatentGain = - znAirRpt.VentilMdot * (state.dataEnvrn->OutHumRat - thisZoneHB.ZoneAirHumRat) * H2OHtOfVap * TimeStepSysSec; + znAirRpt.VentilMdot * (state.dataEnvrn->OutHumRat - thisZoneHB.airHumRat) * H2OHtOfVap * TimeStepSysSec; znAirRpt.VentilLatentLoss = 0.0; } // Total ventilation losses and gains @@ -2551,20 +2549,20 @@ void ReportAirHeatBalance(EnergyPlusData &state) AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0, - (thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0, + (thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0, std::string()); - CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0); + CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0); znAirRpt.MixVolume += mixing.DesiredAirFlowRate * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixVdotCurDensity += mixing.DesiredAirFlowRate * ADSCorrectionFactor; znAirRpt.MixMass += mixing.DesiredAirFlowRate * AirDensity * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixMdot += mixing.DesiredAirFlowRate * AirDensity * ADSCorrectionFactor; znAirRpt.MixVdotStdDensity += mixing.DesiredAirFlowRate * (AirDensity / state.dataEnvrn->StdRhoAir) * ADSCorrectionFactor; mixSenLoad += mixing.DesiredAirFlowRate * AirDensity * CpAir * (thisZoneHB.MAT - fromZoneHB.MAT); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0, - (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0); + H2OHtOfVap = + Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0, (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0); // MixLatLoad(ZoneLoop) = MixLatLoad(ZoneLoop)+MixingMassFlowzone*(ZoneAirHumRat(ZoneLoop)- & // ZoneAirHumRat(mixing%FromZone))*H2OHtOfVap - mixLatLoad += mixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.ZoneAirHumRat - fromZoneHB.ZoneAirHumRat) * H2OHtOfVap; + mixLatLoad += mixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.airHumRat - fromZoneHB.airHumRat) * H2OHtOfVap; } } @@ -2578,38 +2576,38 @@ void ReportAirHeatBalance(EnergyPlusData &state) AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0, - (thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0, + (thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0, std::string()); - CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0); + CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0); znAirRpt.MixVolume += crossMixing.DesiredAirFlowRate * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixVdotCurDensity += crossMixing.DesiredAirFlowRate * ADSCorrectionFactor; znAirRpt.MixMass += crossMixing.DesiredAirFlowRate * AirDensity * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixMdot += crossMixing.DesiredAirFlowRate * AirDensity * ADSCorrectionFactor; znAirRpt.MixVdotStdDensity += crossMixing.DesiredAirFlowRate * (AirDensity / state.dataEnvrn->StdRhoAir) * ADSCorrectionFactor; mixSenLoad += crossMixing.DesiredAirFlowRate * AirDensity * CpAir * (thisZoneHB.MAT - fromZoneHB.MAT); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.ZoneAirHumRat + fromZoneHB.ZoneAirHumRat) / 2.0, - (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0); + H2OHtOfVap = + Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.airHumRat + fromZoneHB.airHumRat) / 2.0, (thisZoneHB.MAT + fromZoneHB.MAT) / 2.0); // MixLatLoad(ZoneLoop) = MixLatLoad(ZoneLoop)+MixingMassFlowzone*(ZoneAirHumRat(ZoneLoop)- & // ZoneAirHumRat(crossMixing%FromZone))*H2OHtOfVap - mixLatLoad += crossMixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.ZoneAirHumRat - fromZoneHB.ZoneAirHumRat) * H2OHtOfVap; + mixLatLoad += crossMixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.airHumRat - fromZoneHB.airHumRat) * H2OHtOfVap; } if ((crossMixing.FromZone == ZoneLoop) && crossMixing.ReportFlag) { auto const &mixingZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(crossMixing.ZonePtr); AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, (thisZoneHB.MAT + mixingZoneHB.MAT) / 2.0, - (thisZoneHB.ZoneAirHumRat + mixingZoneHB.ZoneAirHumRat) / 2.0, + (thisZoneHB.airHumRat + mixingZoneHB.airHumRat) / 2.0, std::string()); - CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.ZoneAirHumRat + mixingZoneHB.ZoneAirHumRat) / 2.0); + CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.airHumRat + mixingZoneHB.airHumRat) / 2.0); znAirRpt.MixVolume += crossMixing.DesiredAirFlowRate * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixVdotCurDensity += crossMixing.DesiredAirFlowRate * ADSCorrectionFactor; znAirRpt.MixMass += crossMixing.DesiredAirFlowRate * AirDensity * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixMdot += crossMixing.DesiredAirFlowRate * AirDensity * ADSCorrectionFactor; znAirRpt.MixVdotStdDensity += crossMixing.DesiredAirFlowRate * (AirDensity / state.dataEnvrn->StdRhoAir) * ADSCorrectionFactor; mixSenLoad += crossMixing.DesiredAirFlowRate * AirDensity * CpAir * (thisZoneHB.MAT - mixingZoneHB.MAT); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.ZoneAirHumRat + mixingZoneHB.ZoneAirHumRat) / 2.0, - (thisZoneHB.MAT + mixingZoneHB.MAT) / 2.0); - mixLatLoad += crossMixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.ZoneAirHumRat - mixingZoneHB.ZoneAirHumRat) * H2OHtOfVap; + H2OHtOfVap = + Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.airHumRat + mixingZoneHB.airHumRat) / 2.0, (thisZoneHB.MAT + mixingZoneHB.MAT) / 2.0); + mixLatLoad += crossMixing.DesiredAirFlowRate * AirDensity * (thisZoneHB.airHumRat - mixingZoneHB.airHumRat) * H2OHtOfVap; } } @@ -2630,10 +2628,10 @@ void ReportAirHeatBalance(EnergyPlusData &state) AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, (thisZoneHB.MAT + zoneBHB.MAT) / 2.0, - (thisZoneHB.ZoneAirHumRat + zoneBHB.ZoneAirHumRat) / 2.0, + (thisZoneHB.airHumRat + zoneBHB.airHumRat) / 2.0, std::string()); - CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.ZoneAirHumRat + zoneBHB.ZoneAirHumRat) / 2.0); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.ZoneAirHumRat + zoneBHB.ZoneAirHumRat) / 2.0, + CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.airHumRat + zoneBHB.airHumRat) / 2.0); + H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.airHumRat + zoneBHB.airHumRat) / 2.0, (thisZoneHB.MAT + zoneBHB.MAT) / 2.0); znAirRpt.MixVolume += refDoorMixing.VolRefDoorFlowRate(j) * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixVdotCurDensity += refDoorMixing.VolRefDoorFlowRate(j) * ADSCorrectionFactor; @@ -2642,8 +2640,7 @@ void ReportAirHeatBalance(EnergyPlusData &state) znAirRpt.MixVdotStdDensity += refDoorMixing.VolRefDoorFlowRate(j) * (AirDensity / state.dataEnvrn->StdRhoAir) * ADSCorrectionFactor; mixSenLoad += refDoorMixing.VolRefDoorFlowRate(j) * AirDensity * CpAir * (thisZoneHB.MAT - zoneBHB.MAT); - mixLatLoad += - refDoorMixing.VolRefDoorFlowRate(j) * AirDensity * (thisZoneHB.ZoneAirHumRat - zoneBHB.ZoneAirHumRat) * H2OHtOfVap; + mixLatLoad += refDoorMixing.VolRefDoorFlowRate(j) * AirDensity * (thisZoneHB.airHumRat - zoneBHB.airHumRat) * H2OHtOfVap; } // flow > 0 } // J-1, numref connections } // zone A (zoneptr = zoneloop) @@ -2659,10 +2656,10 @@ void ReportAirHeatBalance(EnergyPlusData &state) AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, (thisZoneHB.MAT + zoneAHB.MAT) / 2.0, - (thisZoneHB.ZoneAirHumRat + zoneAHB.ZoneAirHumRat) / 2.0, + (thisZoneHB.airHumRat + zoneAHB.airHumRat) / 2.0, std::string()); - CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.ZoneAirHumRat + zoneAHB.ZoneAirHumRat) / 2.0); - H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.ZoneAirHumRat + zoneAHB.ZoneAirHumRat) / 2.0, + CpAir = Psychrometrics::PsyCpAirFnW((thisZoneHB.airHumRat + zoneAHB.airHumRat) / 2.0); + H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb((thisZoneHB.airHumRat + zoneAHB.airHumRat) / 2.0, (thisZoneHB.MAT + zoneAHB.MAT) / 2.0); znAirRpt.MixVolume += refDoorMixingA.VolRefDoorFlowRate(j) * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.MixVdotCurDensity += refDoorMixingA.VolRefDoorFlowRate(j) * ADSCorrectionFactor; @@ -2671,8 +2668,8 @@ void ReportAirHeatBalance(EnergyPlusData &state) znAirRpt.MixVdotStdDensity += refDoorMixingA.VolRefDoorFlowRate(j) * (AirDensity / state.dataEnvrn->StdRhoAir) * ADSCorrectionFactor; mixSenLoad += refDoorMixingA.VolRefDoorFlowRate(j) * AirDensity * CpAir * (thisZoneHB.MAT - zoneAHB.MAT); - mixLatLoad += refDoorMixingA.VolRefDoorFlowRate(j) * AirDensity * - (thisZoneHB.ZoneAirHumRat - zoneAHB.ZoneAirHumRat) * H2OHtOfVap; + mixLatLoad += + refDoorMixingA.VolRefDoorFlowRate(j) * AirDensity * (thisZoneHB.airHumRat - zoneAHB.airHumRat) * H2OHtOfVap; } // volflowrate > 0 } // matezoneptr (zoneB) = Zonelooop } // NumRefDoorConnections @@ -2721,13 +2718,13 @@ void ReportAirHeatBalance(EnergyPlusData &state) znAirRpt.OABalanceHeatGain = -thisZoneHB.MDotCPOA * (thisZoneHB.MAT - zone.OutDryBulbTemp) * TimeStepSysSec * ADSCorrectionFactor; } H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(state.dataEnvrn->OutHumRat, zone.OutDryBulbTemp); - if (thisZoneHB.ZoneAirHumRat > state.dataEnvrn->OutHumRat) { - znAirRpt.OABalanceLatentLoss = thisZoneHB.MDotOA * (thisZoneHB.ZoneAirHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * - TimeStepSysSec * ADSCorrectionFactor; + if (thisZoneHB.airHumRat > state.dataEnvrn->OutHumRat) { + znAirRpt.OABalanceLatentLoss = + thisZoneHB.MDotOA * (thisZoneHB.airHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.OABalanceLatentGain = 0.0; } else { - znAirRpt.OABalanceLatentGain = thisZoneHB.MDotOA * (state.dataEnvrn->OutHumRat - thisZoneHB.ZoneAirHumRat) * H2OHtOfVap * - TimeStepSysSec * ADSCorrectionFactor; + znAirRpt.OABalanceLatentGain = + thisZoneHB.MDotOA * (state.dataEnvrn->OutHumRat - thisZoneHB.airHumRat) * H2OHtOfVap * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.OABalanceLatentLoss = 0.0; } // Total ventilation losses and gains @@ -2741,8 +2738,8 @@ void ReportAirHeatBalance(EnergyPlusData &state) } znAirRpt.OABalanceMass = (thisZoneHB.MDotOA) * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.OABalanceMdot = (thisZoneHB.MDotOA) * ADSCorrectionFactor; - AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW( - state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRatAvg, std::string()); + AirDensity = + Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRatAvg, std::string()); znAirRpt.OABalanceVolumeCurDensity = (thisZoneHB.MDotOA / AirDensity) * TimeStepSysSec * ADSCorrectionFactor; znAirRpt.OABalanceAirChangeRate = znAirRpt.OABalanceVolumeCurDensity / (TimeStepSys * zone.Volume); znAirRpt.OABalanceVdotCurDensity = (thisZoneHB.MDotOA / AirDensity) * ADSCorrectionFactor; @@ -2774,7 +2771,7 @@ void ReportAirHeatBalance(EnergyPlusData &state) znAirRpt.SysOutletMass; // kg // I am not happy with these un-parenthesized divisions and multiplications. Someone clean this up. znAirRpt.ExfilSensiLoss = znAirRpt.ExfilMass / TimeStepSysSec * (thisZoneHB.MAT - zone.OutDryBulbTemp) * CpAir; // W - znAirRpt.ExfilLatentLoss = znAirRpt.ExfilMass / TimeStepSysSec * (thisZoneHB.ZoneAirHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap; + znAirRpt.ExfilLatentLoss = znAirRpt.ExfilMass / TimeStepSysSec * (thisZoneHB.airHumRat - state.dataEnvrn->OutHumRat) * H2OHtOfVap; znAirRpt.ExfilTotalLoss = znAirRpt.ExfilLatentLoss + znAirRpt.ExfilSensiLoss; state.dataHeatBal->ZoneTotalExfiltrationHeatLoss += znAirRpt.ExfilTotalLoss * TimeStepSysSec; diff --git a/src/EnergyPlus/HeatBalanceAirManager.cc b/src/EnergyPlus/HeatBalanceAirManager.cc index 932fb3aa9b2..f178b160c34 100644 --- a/src/EnergyPlus/HeatBalanceAirManager.cc +++ b/src/EnergyPlus/HeatBalanceAirManager.cc @@ -4920,7 +4920,7 @@ void ReportZoneMeanAirTemp(EnergyPlusData &state) // temperature of the air temperatures at the system time step for the // entire zone time step. znAirRpt.MeanAirTemp = thisZoneHB.ZTAV; - znAirRpt.MeanAirHumRat = thisZoneHB.ZoneAirHumRatAvg; + znAirRpt.MeanAirHumRat = thisZoneHB.airHumRatAvg; znAirRpt.OperativeTemp = 0.5 * (thisZoneHB.ZTAV + state.dataHeatBal->ZoneMRT(ZoneLoop)); znAirRpt.MeanAirDewPointTemp = Psychrometrics::PsyTdpFnWPb(state, znAirRpt.MeanAirHumRat, state.dataEnvrn->OutBaroPress); diff --git a/src/EnergyPlus/HeatBalanceSurfaceManager.cc b/src/EnergyPlus/HeatBalanceSurfaceManager.cc index 3ccdd5a1640..99cf6bd61eb 100644 --- a/src/EnergyPlus/HeatBalanceSurfaceManager.cc +++ b/src/EnergyPlus/HeatBalanceSurfaceManager.cc @@ -2121,16 +2121,16 @@ void InitThermalAndFluxHistories(EnergyPlusData &state) new (&state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum)) ZoneTempPredictorCorrector::ZoneHeatBalanceData(); // Initialize the Zone Humidity Ratio here so that it is available for EMPD implementations auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum); - thisZoneHB.ZoneAirHumRatAvg = state.dataEnvrn->OutHumRat; - thisZoneHB.ZoneAirHumRat = state.dataEnvrn->OutHumRat; + thisZoneHB.airHumRatAvg = state.dataEnvrn->OutHumRat; + thisZoneHB.airHumRat = state.dataEnvrn->OutHumRat; state.dataHeatBalFanSys->TempTstatAir(zoneNum) = DataHeatBalance::ZoneInitialTemp; } // Reset spaceHeatBalance even if doSpaceHeatBalance is false, beause spaceHB is used to gether zoneHB in some cases for (auto &thisSpaceHB : state.dataZoneTempPredictorCorrector->spaceHeatBalance) { new (&thisSpaceHB) ZoneTempPredictorCorrector::SpaceHeatBalanceData(); // Initialize the Zone Humidity Ratio here so that it is available for EMPD implementations - thisSpaceHB.ZoneAirHumRatAvg = state.dataEnvrn->OutHumRat; - thisSpaceHB.ZoneAirHumRat = state.dataEnvrn->OutHumRat; + thisSpaceHB.airHumRatAvg = state.dataEnvrn->OutHumRat; + thisSpaceHB.airHumRat = state.dataEnvrn->OutHumRat; } // "Bulk" initializations of arrays sized to TotSurfaces @@ -5556,7 +5556,7 @@ void CalcThermalResilience(EnergyPlusData &state) Real64 constexpr c9 = -.00000199; for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { Real64 const ZoneT = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZTAV; - Real64 const ZoneW = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 const ZoneW = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; Real64 const ZoneRH = Psychrometrics::PsyRhFnTdbWPb(state, ZoneT, ZoneW, state.dataEnvrn->OutBaroPress) * 100.0; Real64 const ZoneTF = ZoneT * (9.0 / 5.0) + 32.0; Real64 HI; @@ -5578,7 +5578,7 @@ void CalcThermalResilience(EnergyPlusData &state) } if (state.dataHeatBalSurfMgr->reportVarHumidex || state.dataOutRptTab->displayThermalResilienceSummary) { for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { - Real64 const ZoneW = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRatAvg; + Real64 const ZoneW = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRatAvg; Real64 const ZoneT = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZTAV; Real64 const TDewPointK = Psychrometrics::PsyTdpFnWPb(state, ZoneW, state.dataEnvrn->OutBaroPress) + Constant::KelvinConv; Real64 const e = 6.11 * std::exp(5417.7530 * ((1 / 273.16) - (1 / TDewPointK))); @@ -7691,7 +7691,7 @@ void CalcHeatBalanceInsideSurf2(EnergyPlusData &state, (surface.HeatTransferAlgorithm == DataSurfaces::HeatTransferModel::HAMT)) { int ZoneNum = surface.Zone; Real64 const MAT_zone(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT); - Real64 const ZoneAirHumRat_zone(max(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRat, 1.0e-5)); + Real64 const ZoneAirHumRat_zone(max(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRat, 1.0e-5)); Real64 const HConvIn_surf(state.dataMstBal->HConvInFD(SurfNum) = state.dataHeatBalSurf->SurfHConvInt(SurfNum)); state.dataMstBal->RhoVaporAirIn(SurfNum) = diff --git a/src/EnergyPlus/InternalHeatGains.cc b/src/EnergyPlus/InternalHeatGains.cc index eb5c5898dfc..b70a081bd61 100644 --- a/src/EnergyPlus/InternalHeatGains.cc +++ b/src/EnergyPlus/InternalHeatGains.cc @@ -7670,10 +7670,10 @@ namespace InternalHeatGains { for (int NZ = 1; NZ <= state.dataGlobal->NumOfZones; ++NZ) { auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(NZ); - thisZoneHB.ZoneLatentGain = InternalHeatGains::SumAllInternalLatentGains(state, NZ); // Also sets space gains + thisZoneHB.latentGain = InternalHeatGains::SumAllInternalLatentGains(state, NZ); // Also sets space gains // Added for hybrid model if (state.dataHybridModel->FlagHybridModel_PC) { - thisZoneHB.ZoneLatentGainExceptPeople = InternalHeatGains::SumAllInternalLatentGainsExceptPeople(state, NZ); // Also sets space gains + thisZoneHB.latentGainExceptPeople = InternalHeatGains::SumAllInternalLatentGainsExceptPeople(state, NZ); // Also sets space gains } } @@ -7929,14 +7929,14 @@ namespace InternalHeatGains { RecircFrac = state.dataHeatBal->ZoneITEq(Loop).DesignRecircFrac; } TRecirc = thisZoneHB.MAT; - WRecirc = thisZoneHB.ZoneAirHumRat; + WRecirc = thisZoneHB.airHumRat; TAirIn = TRecirc * RecircFrac + TSupply * (1.0 - RecircFrac); WAirIn = WRecirc * RecircFrac + WSupply * (1.0 - RecircFrac); } else if (AirConnection == ITEInletConnection::RoomAirModel) { // Room air model option: TAirIn=TAirZone, according to EngineeringRef 17.1.4 TAirIn = thisZoneHB.MAT; TSupply = TAirIn; - WAirIn = thisZoneHB.ZoneAirHumRat; + WAirIn = thisZoneHB.airHumRat; } else { // TAirIn = TRoomAirNodeIn, according to EngineeringRef 17.1.4 if (state.dataHeatBal->ZoneITEq(Loop).inControlledZone) { @@ -7946,7 +7946,7 @@ namespace InternalHeatGains { TSupply = thisZoneHB.MAT; } TAirIn = thisZoneHB.MAT; - WAirIn = thisZoneHB.ZoneAirHumRat; + WAirIn = thisZoneHB.airHumRat; } } TDPAirIn = PsyTdpFnWPb(state, WAirIn, state.dataEnvrn->StdBaroPress, RoutineName); @@ -8791,10 +8791,10 @@ namespace InternalHeatGains { if (SumLatentGains) { for (int NZ = 1; NZ <= state.dataGlobal->NumOfZones; ++NZ) { auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(NZ); - thisZoneHB.ZoneLatentGain = InternalHeatGains::SumAllInternalLatentGains(state, NZ); + thisZoneHB.latentGain = InternalHeatGains::SumAllInternalLatentGains(state, NZ); // Added for the hybrid model if (state.dataHybridModel->FlagHybridModel_PC) { - thisZoneHB.ZoneLatentGainExceptPeople = InternalHeatGains::SumAllInternalLatentGainsExceptPeople(state, NZ); + thisZoneHB.latentGainExceptPeople = InternalHeatGains::SumAllInternalLatentGainsExceptPeople(state, NZ); } } } @@ -9082,7 +9082,7 @@ namespace InternalHeatGains { for (int DeviceNum = 1; DeviceNum <= state.dataHeatBal->spaceIntGainDevices(spaceNum).numberOfDevices; ++DeviceNum) { SumLatentGainRate += state.dataHeatBal->spaceIntGainDevices(spaceNum).device(DeviceNum).LatentGainRate; } - state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).ZoneLatentGain = SumLatentGainRate; + state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).latentGain = SumLatentGainRate; } return SumLatentGainRate; @@ -9106,7 +9106,7 @@ namespace InternalHeatGains { SumLatentGainRateExceptPeople += state.dataHeatBal->spaceIntGainDevices(spaceNum).device(DeviceNum).LatentGainRate; } } - state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).ZoneLatentGainExceptPeople = SumLatentGainRateExceptPeople; + state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).latentGainExceptPeople = SumLatentGainRateExceptPeople; } return SumLatentGainRateExceptPeople; diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 236f8a5aab4..ea6adb43d1b 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -3943,7 +3943,7 @@ namespace LowTempRadiantSystem { // conditions. this->CondCausedShutDown = false; DewPointTemp = - PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRat, state.dataEnvrn->OutBaroPress); if ((this->OperatingMode == CoolingMode) && (variableFlowDesignDataObject.CondCtrlType == CondContrlType::CondCtrlSimpleOff)) { @@ -5039,7 +5039,7 @@ namespace LowTempRadiantSystem { // conditions. this->CondCausedShutDown = false; DewPointTemp = - PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(this->ZonePtr).ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(this->ZonePtr).airHumRat, state.dataEnvrn->OutBaroPress); if ((this->OperatingMode == CoolingMode) && (ConstantFlowDesignDataObject.CondCtrlType == CondContrlType::CondCtrlSimpleOff)) { diff --git a/src/EnergyPlus/MoistureBalanceEMPDManager.cc b/src/EnergyPlus/MoistureBalanceEMPDManager.cc index 8e3afafc520..ef351a49b10 100644 --- a/src/EnergyPlus/MoistureBalanceEMPDManager.cc +++ b/src/EnergyPlus/MoistureBalanceEMPDManager.cc @@ -371,7 +371,7 @@ void InitMoistureBalanceEMPD(EnergyPlusData &state) if (!state.dataSurface->Surface(SurfNum).HeatTransSurf) continue; Real64 const rv_air_in_initval = min(PsyRhovFnTdbWPb_fast(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT, - max(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneAirHumRat, 1.0e-5), + max(state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).airHumRat, 1.0e-5), state.dataEnvrn->OutBaroPress), PsyRhovFnTdbRh(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT, 1.0, "InitMoistureBalanceEMPD")); state.dataMstBalEMPD->RVSurfaceOld(SurfNum) = rv_air_in_initval; @@ -558,8 +558,8 @@ void CalcMoistureBalanceEMPD(EnergyPlusData &state, auto const *material(dynamic_cast(state.dataMaterial->Material(MatNum))); assert(material != nullptr); if (material->EMPDmu <= 0.0) { - rv_surface = PsyRhovFnTdbWPb( - TempZone, state.dataZoneTempPredictorCorrector->zoneHeatBalance(surface.Zone).ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + rv_surface = + PsyRhovFnTdbWPb(TempZone, state.dataZoneTempPredictorCorrector->zoneHeatBalance(surface.Zone).airHumRat, state.dataEnvrn->OutBaroPress); return; } diff --git a/src/EnergyPlus/MundtSimMgr.cc b/src/EnergyPlus/MundtSimMgr.cc index 901859e3561..8643d45ff55 100644 --- a/src/EnergyPlus/MundtSimMgr.cc +++ b/src/EnergyPlus/MundtSimMgr.cc @@ -381,7 +381,7 @@ namespace RoomAir { for (NodeNum = 1; NodeNum <= state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).NumInletNodes; ++NodeNum) { NodeTemp = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).InletNode(NodeNum)).Temp; MassFlowRate = state.dataLoopNodes->Node(state.dataZoneEquip->ZoneEquipConfig(ZoneEquipConfigNum).InletNode(NodeNum)).MassFlowRate; - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * NodeTemp; } @@ -394,7 +394,7 @@ namespace RoomAir { state.dataMundtSimMgr->SupplyAirTemp = SumSysMCpT / SumSysMCp; } // determine cooling load - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); state.dataMundtSimMgr->QsysCoolTot = -(SumSysMCpT - ZoneMassFlowRate * CpAir * state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).MAT); } diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index 6372676ccf4..8eefba36306 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -2255,7 +2255,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, state.dataLoopNodes->Node(PurchAir(PurchAirNum).ZoneRecircAirNodeNum).Enthalpy))) { // Calculate supply MassFlowRate based on sensible load but limit to Max Cooling Supply Air Flow Rate if specified - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); DeltaT = (state.dataLoopNodes->Node(OANodeNum).Temp - state.dataLoopNodes->Node(ZoneNodeNum).Temp); if (DeltaT < -SmallTempDiff) { SupplyMassFlowRate = QZnCoolSP / CpAir / DeltaT; @@ -2278,7 +2278,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, // Mass flow rate to meet sensible load, at Minimum Cooling Supply Air Temperature SupplyMassFlowRateForCool = 0.0; if (CoolOn) { - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); DeltaT = (PurchAir(PurchAirNum).MinCoolSuppAirTemp - state.dataLoopNodes->Node(ZoneNodeNum).Temp); if (DeltaT < -SmallTempDiff) { SupplyMassFlowRateForCool = QZnCoolSP / CpAir / DeltaT; @@ -2353,7 +2353,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, // In general, in the cooling section, don't let SupplyTemp be set to something that results in heating if (SupplyMassFlowRate > 0.0) { // Calculate supply temp at SupplyMassFlowRate and recheck limit on Minimum Cooling Supply Air Temperature - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); PurchAir(PurchAirNum).SupplyTemp = QZnCoolSP / (CpAir * SupplyMassFlowRate) + state.dataLoopNodes->Node(ZoneNodeNum).Temp; PurchAir(PurchAirNum).SupplyTemp = max(PurchAir(PurchAirNum).SupplyTemp, PurchAir(PurchAirNum).MinCoolSuppAirTemp); // This is the cooling mode, so SupplyTemp can't be more than MixedAirTemp @@ -2567,7 +2567,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, // Mass flow rate to meet sensible load, at Minimum Cooling Supply Air Temperature SupplyMassFlowRateForHeat = 0.0; if ((HeatOn) && (OperatingMode == OpMode::Heat)) { - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); DeltaT = (PurchAir(PurchAirNum).MaxHeatSuppAirTemp - state.dataLoopNodes->Node(ZoneNodeNum).Temp); if (DeltaT > SmallTempDiff) { SupplyMassFlowRateForHeat = QZnHeatSP / CpAir / DeltaT; @@ -2643,7 +2643,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, if (SupplyMassFlowRate > 0.0) { if ((HeatOn) && (OperatingMode == OpMode::Heat)) { // Calculate supply temp at SupplyMassFlowRate and check limit on Maximum Heating Supply Air Temperature - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); PurchAir(PurchAirNum).SupplyTemp = QZnHeatSP / (CpAir * SupplyMassFlowRate) + state.dataLoopNodes->Node(ZoneNodeNum).Temp; PurchAir(PurchAirNum).SupplyTemp = min(PurchAir(PurchAirNum).SupplyTemp, PurchAir(PurchAirNum).MaxHeatSuppAirTemp); // This is the heating mode, so SupplyTemp can't be less than MixedAirTemp @@ -2831,7 +2831,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, SupplyEnthalpy = PsyHFnTdbW(PurchAir(PurchAirNum).SupplyTemp, PurchAir(PurchAirNum).SupplyHumRat); - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SysOutputProvided = SupplyMassFlowRate * CpAir * (PurchAir(PurchAirNum).SupplyTemp - state.dataLoopNodes->Node(ZoneNodeNum).Temp); MoistOutputProvided = SupplyMassFlowRate * (PurchAir(PurchAirNum).SupplyHumRat - state.dataLoopNodes->Node(ZoneNodeNum).HumRat); // Latent rate, kg/s @@ -2840,7 +2840,7 @@ void CalcPurchAirLoads(EnergyPlusData &state, PurchAir(PurchAirNum).LatOutputToZone = SupplyMassFlowRate * (SupplyEnthalpy - state.dataLoopNodes->Node(ZoneNodeNum).Enthalpy) - PurchAir(PurchAirNum).SenOutputToZone; - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); if (PurchAir(PurchAirNum).OutdoorAir) { PurchAir(PurchAirNum).OASenOutput = OAMassFlowRate * CpAir * (state.dataLoopNodes->Node(OANodeNum).Temp - state.dataLoopNodes->Node(ZoneNodeNum).Temp); diff --git a/src/EnergyPlus/RoomAirModelAirflowNetwork.cc b/src/EnergyPlus/RoomAirModelAirflowNetwork.cc index e482cb1b0d0..b645d9c72bb 100644 --- a/src/EnergyPlus/RoomAirModelAirflowNetwork.cc +++ b/src/EnergyPlus/RoomAirModelAirflowNetwork.cc @@ -735,7 +735,7 @@ namespace RoomAir { for (auto const &afnHVAC : afnNode.HVAC) { if (afnHVAC.SupNodeNum == zoneEquipConfig.InletNode(iNode)) { Real64 MassFlowRate = inletNode.MassFlowRate * afnHVAC.SupplyFraction; - Real64 CpAir = PsyCpAirFnW(zoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(zoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * inletNode.Temp; SumSysM += MassFlowRate; @@ -748,7 +748,7 @@ namespace RoomAir { for (int iNode = 1; iNode <= zoneRetPlenum.NumInletNodes; ++iNode) { // Get node conditions auto const &zoneRetPlenumNode = state.dataLoopNodes->Node(zoneRetPlenum.InletNode(iNode)); - Real64 CpAir = PsyCpAirFnW(zoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(zoneHB.airHumRat); SumSysMCp += zoneRetPlenumNode.MassFlowRate * CpAir; SumSysMCpT += zoneRetPlenumNode.MassFlowRate * CpAir * zoneRetPlenumNode.Temp; } // NodeNum @@ -757,12 +757,12 @@ namespace RoomAir { int ADUNum = zoneRetPlenum.ADUIndex(iADU); auto const &adu = state.dataDefineEquipment->AirDistUnit(ADUNum); if (adu.UpStreamLeak) { - Real64 CpAir = PsyCpAirFnW(zoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(zoneHB.airHumRat); SumSysMCp += adu.MassFlowRateUpStrLk * CpAir; SumSysMCpT += adu.MassFlowRateUpStrLk * CpAir * state.dataLoopNodes->Node(adu.InletNodeNum).Temp; } if (adu.DownStreamLeak) { - Real64 CpAir = PsyCpAirFnW(zoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(zoneHB.airHumRat); SumSysMCp += adu.MassFlowRateDnStrLk * CpAir; SumSysMCpT += adu.MassFlowRateDnStrLk * CpAir * state.dataLoopNodes->Node(adu.OutletNodeNum).Temp; } @@ -771,7 +771,7 @@ namespace RoomAir { // Get node conditions auto const &zoneSupPlenum = state.dataZonePlenum->ZoneSupPlenCond(zoneSupPlenumNum); auto const &inletNode = state.dataLoopNodes->Node(zoneSupPlenum.InletNode); - Real64 CpAir = PsyCpAirFnW(zoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(zoneHB.airHumRat); SumSysMCp += inletNode.MassFlowRate * CpAir; SumSysMCpT += inletNode.MassFlowRate * CpAir * inletNode.Temp; } diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 5f3369b7a75..817041a80cd 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2001,10 +2001,10 @@ namespace RoomAir { AirflowNetwork::iComponentTypeNum::SCR) { // surface type = CRACK surfParams.Width = mzSurf.Width / 2; auto const &zoneHeatBal = state.dataZoneTempPredictorCorrector->zoneHeatBalance(iZone); - Real64 AinCV = state.afn->MultizoneSurfaceCrackData(typeNum).coefficient / - (BaseDischargeCoef * - std::sqrt(2.0 / PsyRhoAirFnPbTdbW( - state, state.dataEnvrn->OutBaroPress, zoneHeatBal.MAT, zoneHeatBal.ZoneAirHumRat))); + Real64 AinCV = + state.afn->MultizoneSurfaceCrackData(typeNum).coefficient / + (BaseDischargeCoef * + std::sqrt(2.0 / PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, zoneHeatBal.MAT, zoneHeatBal.airHumRat))); surfParams.Height = AinCV / surfParams.Width; } diff --git a/src/EnergyPlus/RoomAirModelUserTempPattern.cc b/src/EnergyPlus/RoomAirModelUserTempPattern.cc index f8ae9171169..e275c1499ba 100644 --- a/src/EnergyPlus/RoomAirModelUserTempPattern.cc +++ b/src/EnergyPlus/RoomAirModelUserTempPattern.cc @@ -745,14 +745,14 @@ void SetSurfHBDataForTempDistModel(EnergyPlusData &state, int const ZoneNum) // state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToZone += state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToHVAC; // shouldn't the HVAC term be zeroed out then? Real64 SumRetAirLatentGainRate = SumAllReturnAirLatentGains(state, ZoneNum, 0); - zoneHeatBal.ZoneLatentGain += SumRetAirLatentGainRate; + zoneHeatBal.latentGain += SumRetAirLatentGainRate; } } else { returnNode.HumRat = zoneNode.HumRat; state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToZone += state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToHVAC; // shouldn't the HVAC term be zeroed out then? - zoneHeatBal.ZoneLatentGain += SumAllReturnAirLatentGains(state, ZoneNum, returnNodeNum); + zoneHeatBal.latentGain += SumAllReturnAirLatentGains(state, ZoneNum, returnNodeNum); } returnNode.Enthalpy = PsyHFnTdbW(returnNode.Temp, returnNode.HumRat); diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index 1752b9fd7f4..9c3433dfab8 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -909,10 +909,10 @@ void SwimmingPoolData::calculate(EnergyPlusData &state) // Convection coefficient calculation Real64 HConvIn = 0.22 * std::pow(std::abs(this->PoolWaterTemp - thisZoneHB.MAT), 1.0 / 3.0) * this->CurCoverConvFac; // convection coefficient for pool - calcSwimmingPoolEvap(state, EvapRate, SurfNum, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + calcSwimmingPoolEvap(state, EvapRate, SurfNum, thisZoneHB.MAT, thisZoneHB.airHumRat); this->MakeUpWaterMassFlowRate = EvapRate; Real64 EvapEnergyLossPerArea = -EvapRate * - Psychrometrics::PsyHfgAirFnWTdb(thisZoneHB.ZoneAirHumRat, + Psychrometrics::PsyHfgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT) / state.dataSurface->Surface(SurfNum).Area; // energy effect of evaporation rate per unit area in W/m2 this->EvapHeatLossRate = EvapEnergyLossPerArea * state.dataSurface->Surface(SurfNum).Area; @@ -965,7 +965,7 @@ void SwimmingPoolData::calculate(EnergyPlusData &state) // Finally take care of the latent and convective gains resulting from the pool state.dataHeatBalFanSys->SumConvPool(ZoneNum) += this->RadConvertToConvect; - state.dataHeatBalFanSys->SumLatentPool(ZoneNum) += EvapRate * Psychrometrics::PsyHfgAirFnWTdb(thisZoneHB.ZoneAirHumRat, thisZoneHB.MAT); + state.dataHeatBalFanSys->SumLatentPool(ZoneNum) += EvapRate * Psychrometrics::PsyHfgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT); } void SwimmingPoolData::calcSwimmingPoolEvap(EnergyPlusData &state, diff --git a/src/EnergyPlus/SystemAvailabilityManager.cc b/src/EnergyPlus/SystemAvailabilityManager.cc index 132927a7847..c23e3f5c8fb 100644 --- a/src/EnergyPlus/SystemAvailabilityManager.cc +++ b/src/EnergyPlus/SystemAvailabilityManager.cc @@ -4703,7 +4703,7 @@ namespace SystemAvailabilityManager { // Enthalpy control } break; case HybridVentMode_Enth: { - ZoneAirEnthalpy = PsyHFnTdbW(thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + ZoneAirEnthalpy = PsyHFnTdbW(thisZoneHB.MAT, thisZoneHB.airHumRat); if (state.dataEnvrn->OutEnthalpy >= hybridVentMgr.MinOutdoorEnth && state.dataEnvrn->OutEnthalpy <= hybridVentMgr.MaxOutdoorEnth) { hybridVentMgr.VentilationCtrl = HybridVentCtrl_Open; } else { @@ -4874,8 +4874,8 @@ namespace SystemAvailabilityManager { // Dew point control mode if (hybridVentMgr.ControlMode == HybridVentMode_DewPoint) { - ZoneAirRH = PsyRhFnTdbWPb(state, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat, state.dataEnvrn->OutBaroPress) * 100.0; - ZoneAirDewPoint = PsyTdpFnWPb(state, thisZoneHB.ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + ZoneAirRH = PsyRhFnTdbWPb(state, thisZoneHB.MAT, thisZoneHB.airHumRat, state.dataEnvrn->OutBaroPress) * 100.0; + ZoneAirDewPoint = PsyTdpFnWPb(state, thisZoneHB.airHumRat, state.dataEnvrn->OutBaroPress); if (state.dataZoneCtrls->NumHumidityControlZones == 0) { ++hybridVentMgr.DewPointNoRHErrCount; if (hybridVentMgr.DewPointNoRHErrCount < 2) { diff --git a/src/EnergyPlus/SystemReports.cc b/src/EnergyPlus/SystemReports.cc index e58ec442f40..7a481321d85 100644 --- a/src/EnergyPlus/SystemReports.cc +++ b/src/EnergyPlus/SystemReports.cc @@ -4458,7 +4458,7 @@ void ReportVentilationLoads(EnergyPlusData &state) Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataZoneTempPredictorCorrector->zoneHeatBalance(CtrlZoneNum).MAT, - state.dataZoneTempPredictorCorrector->zoneHeatBalance(CtrlZoneNum).ZoneAirHumRatAvg); + state.dataZoneTempPredictorCorrector->zoneHeatBalance(CtrlZoneNum).airHumRatAvg); if (currentZoneAirDensity > 0.0) thisZoneVentRepVars.OAVolFlowCrntRho = thisZoneVentRepVars.OAMassFlow / currentZoneAirDensity; thisZoneVentRepVars.OAVolCrntRho = thisZoneVentRepVars.OAVolFlowCrntRho * TimeStepSysSec; if (ZoneVolume > 0.0) thisZoneVentRepVars.MechACH = (thisZoneVentRepVars.OAVolCrntRho / TimeStepSys) / ZoneVolume; diff --git a/src/EnergyPlus/ThermalChimney.cc b/src/EnergyPlus/ThermalChimney.cc index 32e22c9a280..b916c39c5be 100644 --- a/src/EnergyPlus/ThermalChimney.cc +++ b/src/EnergyPlus/ThermalChimney.cc @@ -765,8 +765,8 @@ namespace ThermalChimney { AbsorberWallWidthTC = state.dataThermalChimneys->ThermalChimneySys(Loop).AbsorberWallWidth; } - AirDensityThermalChim = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); - AirSpecHeatThermalChim = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + AirDensityThermalChim = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRat); + AirSpecHeatThermalChim = PsyCpAirFnW(thisZoneHB.airHumRat); AirOutletCrossAreaTC = state.dataThermalChimneys->ThermalChimneySys(Loop).AirOutletCrossArea; DischargeCoeffTC = state.dataThermalChimneys->ThermalChimneySys(Loop).DischargeCoeff; @@ -788,11 +788,11 @@ namespace ThermalChimney { for (TCZoneNum = 1; TCZoneNum <= state.dataThermalChimneys->ThermalChimneySys(Loop).TotZoneToDistrib; ++TCZoneNum) { TCZoneNumCounter = state.dataThermalChimneys->ThermalChimneySys(Loop).ZonePtr(TCZoneNum); auto &thisTCZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(TCZoneNumCounter); - Process1 += PsyHFnTdbW(thisTCZoneHB.MAT, thisTCZoneHB.ZoneAirHumRat) * + Process1 += PsyHFnTdbW(thisTCZoneHB.MAT, thisTCZoneHB.airHumRat) * state.dataThermalChimneys->ThermalChimneySys(Loop).DistanceThermChimInlet(TCZoneNum) * state.dataThermalChimneys->ThermalChimneySys(Loop).RatioThermChimAirFlow(TCZoneNum); Process2 += state.dataThermalChimneys->ThermalChimneySys(Loop).RatioThermChimAirFlow(TCZoneNum) * - PsyHFnTdbW(state.dataZoneTempPredictorCorrector->zoneHeatBalance(TCZoneNumCounter).MAT, thisTCZoneHB.ZoneAirHumRat); + PsyHFnTdbW(state.dataZoneTempPredictorCorrector->zoneHeatBalance(TCZoneNumCounter).MAT, thisTCZoneHB.airHumRat); } OverallThermalChimLength = Process1 / Process2; @@ -894,8 +894,8 @@ namespace ThermalChimney { AirDensity = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataZoneTempPredictorCorrector->zoneHeatBalance(TCZoneNumCounter).MAT, - thisTCZoneHB.ZoneAirHumRat); - CpAir = PsyCpAirFnW(thisTCZoneHB.ZoneAirHumRat); + thisTCZoneHB.airHumRat); + CpAir = PsyCpAirFnW(thisTCZoneHB.airHumRat); thisTCZoneHB.MCPThermChim = TCVolumeAirFlowRate * AirDensity * CpAir * state.dataThermalChimneys->ThermalChimneySys(Loop).RatioThermChimAirFlow(TCZoneNum); if (thisTCZoneHB.MCPThermChim <= 0.0) { @@ -965,8 +965,8 @@ namespace ThermalChimney { // Break the infiltration load into heat gain and loss components. AirDensity = PsyRhoAirFnPbTdbW( - state, state.dataEnvrn->OutBaroPress, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneLoop).MAT, thisZoneHB.ZoneAirHumRat); - CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + state, state.dataEnvrn->OutBaroPress, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneLoop).MAT, thisZoneHB.airHumRat); + CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); state.dataThermalChimneys->ZnRptThermChim(ZoneLoop).ThermalChimneyVolume = (thisZoneHB.MCPThermChim / CpAir / AirDensity) * TimeStepSysSec; state.dataThermalChimneys->ZnRptThermChim(ZoneLoop).ThermalChimneyMass = (thisZoneHB.MCPThermChim / CpAir) * TimeStepSysSec; diff --git a/src/EnergyPlus/ThermalComfort.cc b/src/EnergyPlus/ThermalComfort.cc index 94c42adaf59..cdce19a7213 100644 --- a/src/EnergyPlus/ThermalComfort.cc +++ b/src/EnergyPlus/ThermalComfort.cc @@ -556,11 +556,11 @@ namespace ThermalComfort { state.dataThermalComforts->RelHum = PsyRhFnTdbWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(state.dataThermalComforts->ZoneNum).MAT, - thisZoneHB.ZoneAirHumRatAvgComf, + thisZoneHB.airHumRatAvgComf, state.dataEnvrn->OutBaroPress); } else { state.dataThermalComforts->RelHum = - PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.ZoneAirHumRatAvgComf, state.dataEnvrn->OutBaroPress); + PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.airHumRatAvgComf, state.dataEnvrn->OutBaroPress); } state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).TemperatureInZone = state.dataThermalComforts->AirTemp; state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).RelativeHumidityInZone = state.dataThermalComforts->RelHum * 100.0; @@ -836,7 +836,7 @@ namespace ThermalComfort { state.dataThermalComforts->RadTemp = CalcRadTemp(state, state.dataThermalComforts->PeopleNum); // (var RH) state.dataThermalComforts->RelHum = - PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.ZoneAirHumRatAvgComf, state.dataEnvrn->OutBaroPress); + PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.airHumRatAvgComf, state.dataEnvrn->OutBaroPress); // Metabolic rate of body (W/m2) (var RM, M) state.dataThermalComforts->ActLevel = GetCurrentScheduleValue(state, state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).ActivityLevelPtr) / BodySurfAreaPierce; @@ -1482,7 +1482,7 @@ namespace ThermalComfort { } state.dataThermalComforts->RadTemp = CalcRadTemp(state, state.dataThermalComforts->PeopleNum); state.dataThermalComforts->RelHum = - PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.ZoneAirHumRatAvgComf, state.dataEnvrn->OutBaroPress); + PsyRhFnTdbWPb(state, state.dataThermalComforts->AirTemp, thisZoneHB.airHumRatAvgComf, state.dataEnvrn->OutBaroPress); state.dataThermalComforts->ActLevel = GetCurrentScheduleValue(state, state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).ActivityLevelPtr) / BodySurfArea; state.dataThermalComforts->WorkEff = @@ -2353,10 +2353,10 @@ namespace ThermalComfort { // 8 25.1 Summer 0.000 // check summer clothing conditions isComfortableWithSummerClothes = - isInQuadrilateral(OperTemp, thisZoneHB.ZoneAirHumRatAvgComf, 25.1, 0.0, 23.6, 0.012, 26.8, 0.012, 28.3, 0.0); + isInQuadrilateral(OperTemp, thisZoneHB.airHumRatAvgComf, 25.1, 0.0, 23.6, 0.012, 26.8, 0.012, 28.3, 0.0); // check winter clothing conditions isComfortableWithWinterClothes = - isInQuadrilateral(OperTemp, thisZoneHB.ZoneAirHumRatAvgComf, 21.7, 0.0, 19.6, 0.012, 23.9, 0.012, 26.3, 0.0); + isInQuadrilateral(OperTemp, thisZoneHB.airHumRatAvgComf, 21.7, 0.0, 19.6, 0.012, 23.9, 0.012, 26.3, 0.0); if (isComfortableWithSummerClothes) { state.dataThermalComforts->ThermalComfortInASH55(iZone).timeNotSummer = 0.0; } else { diff --git a/src/EnergyPlus/UFADManager.cc b/src/EnergyPlus/UFADManager.cc index c8159bb98b8..7b6bf1b4aaa 100644 --- a/src/EnergyPlus/UFADManager.cc +++ b/src/EnergyPlus/UFADManager.cc @@ -808,10 +808,10 @@ namespace RoomAir { for (int InNodeIndex = 1; InNodeIndex <= zoneEquipConfig.NumInletNodes; ++InNodeIndex) { Real64 NodeTemp = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(InNodeIndex)).Temp; Real64 MassFlowRate = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(InNodeIndex)).MassFlowRate; - Real64 CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * NodeTemp; - TotSysFlow += MassFlowRate / PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, NodeTemp, thisZoneHB.ZoneAirHumRat); + TotSysFlow += MassFlowRate / PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, NodeTemp, thisZoneHB.airHumRat); TSupK += MassFlowRate * NodeTemp; SumSysM += MassFlowRate; } @@ -883,13 +883,13 @@ namespace RoomAir { state.dataHeatBal->Zone(ZoneNum).Volume * (state.dataRoomAir->HeightTransition(ZoneNum) - min(state.dataRoomAir->HeightTransition(ZoneNum), 0.2)) / CeilingHeight * state.dataHeatBal->Zone(ZoneNum).ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; state.dataRoomAir->AIRRATMX(ZoneNum) = state.dataHeatBal->Zone(ZoneNum).Volume * (CeilingHeight - state.dataRoomAir->HeightTransition(ZoneNum)) / CeilingHeight * state.dataHeatBal->Zone(ZoneNum).ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; if (state.dataHVACGlobal->UseZoneTimeStepHistory) { state.dataRoomAir->ZTMOC(ZoneNum)[2] = state.dataRoomAir->XMATOC(ZoneNum)[2]; @@ -995,7 +995,7 @@ namespace RoomAir { for (int Ctd = 1; Ctd <= 3; ++Ctd) { Real64 TempDepCoef = ufadCC.HA_MX + ufadCC.HA_OC + MCp_Total; - Real64 const thisZoneT1 = thisZoneHB.ZoneT1; + Real64 const thisZoneT1 = thisZoneHB.T1; // Formerly CoefSumhat, coef in zone temp equation with dimensions of h*A(T1 Real64 TempIndCoef = ConvGains + ufadCC.HAT_MX + ufadCC.HAT_OC + MCpT_Total; switch (state.dataHeatBal->ZoneAirSolutionAlgo) { @@ -1231,10 +1231,10 @@ namespace RoomAir { for (int InNodeIndex = 1; InNodeIndex <= zoneEquipConfig.NumInletNodes; ++InNodeIndex) { Real64 NodeTemp = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(InNodeIndex)).Temp; Real64 MassFlowRate = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(InNodeIndex)).MassFlowRate; - Real64 CpAir = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + Real64 CpAir = PsyCpAirFnW(thisZoneHB.airHumRat); SumSysMCp += MassFlowRate * CpAir; SumSysMCpT += MassFlowRate * CpAir * NodeTemp; - TotSysFlow += MassFlowRate / PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, NodeTemp, thisZoneHB.ZoneAirHumRat); + TotSysFlow += MassFlowRate / PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, NodeTemp, thisZoneHB.airHumRat); TSupK += MassFlowRate * NodeTemp; SumSysM += MassFlowRate; } @@ -1343,13 +1343,13 @@ namespace RoomAir { state.dataHeatBal->Zone(ZoneNum).Volume * (state.dataRoomAir->HeightTransition(ZoneNum) - min(state.dataRoomAir->HeightTransition(ZoneNum), 0.2)) / CeilingHeight * state.dataHeatBal->Zone(ZoneNum).ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATOC(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; state.dataRoomAir->AIRRATMX(ZoneNum) = state.dataHeatBal->Zone(ZoneNum).Volume * (CeilingHeight - state.dataRoomAir->HeightTransition(ZoneNum)) / CeilingHeight * state.dataHeatBal->Zone(ZoneNum).ZoneVolCapMultpSens * - PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.ZoneAirHumRat) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat) / TimeStepSysSec; + PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, state.dataRoomAir->MATMX(ZoneNum), thisZoneHB.airHumRat) * + PsyCpAirFnW(thisZoneHB.airHumRat) / TimeStepSysSec; if (state.dataHVACGlobal->UseZoneTimeStepHistory) { state.dataRoomAir->ZTMOC(ZoneNum)[2] = state.dataRoomAir->XMATOC(ZoneNum)[2]; @@ -1448,7 +1448,7 @@ namespace RoomAir { HeightFrac * CeilingHeight < state.dataUFADManager->ThickOccupiedSubzoneMin) { MIXFLAG = true; HeightFrac = 0.0; - Real64 const thisZoneT1 = thisZoneHB.ZoneT1; + Real64 const thisZoneT1 = thisZoneHB.T1; state.dataRoomAir->AvgTempGrad(ZoneNum) = 0.0; state.dataRoomAir->MaxTempGrad(ZoneNum) = 0.0; diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index d1eb022ebd2..ba8eae3be5e 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -8221,7 +8221,7 @@ namespace UnitarySystems { this->LoadSHR = ZoneLoad / (ZoneLoad + state.dataUnitarySystems->MoistureLoad * Psychrometrics::PsyHgAirFnWTdb( - state.dataZoneTempPredictorCorrector->zoneHeatBalance(this->ControlZoneNum).ZoneAirHumRat, + state.dataZoneTempPredictorCorrector->zoneHeatBalance(this->ControlZoneNum).airHumRat, state.dataZoneTempPredictorCorrector->zoneHeatBalance(this->ControlZoneNum).MAT)); if (this->LoadSHR < 0.0) { this->LoadSHR = 0.0; diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index ddf6fe0bd8a..65636171b26 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -2815,8 +2815,8 @@ namespace VentilatedSlab { break; } case ControlType::DewPointTemp: { - SetPointTemp = PsyTdpFnWPb( - state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ventSlab.ZonePtr).ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + SetPointTemp = + PsyTdpFnWPb(state, state.dataZoneTempPredictorCorrector->zoneHeatBalance(ventSlab.ZonePtr).airHumRat, state.dataEnvrn->OutBaroPress); break; } default: { // Should never get here @@ -3915,7 +3915,7 @@ namespace VentilatedSlab { // conditions. if (state.dataVentilatedSlab->OperatingMode == CoolingMode) { - DewPointTemp = PsyTdpFnWPb(state, thisZoneHB.ZoneAirHumRat, state.dataEnvrn->OutBaroPress); + DewPointTemp = PsyTdpFnWPb(state, thisZoneHB.airHumRat, state.dataEnvrn->OutBaroPress); for (RadSurfNum2 = 1; RadSurfNum2 <= ventSlab.NumOfSurfaces; ++RadSurfNum2) { if (state.dataHeatBalSurf->SurfInsideTempHist(1)(ventSlab.SurfacePtr(RadSurfNum2)) < (DewPointTemp + CondDeltaTemp)) { // Condensation warning--must shut off radiant system @@ -4168,7 +4168,7 @@ namespace VentilatedSlab { if (state.dataVentilatedSlab->OperatingMode == CoolingMode) { DewPointTemp = PsyTdpFnWPb(state, - state.dataZoneTempPredictorCorrector->zoneHeatBalance(ventSlab.ZPtr(RadSurfNum)).ZoneAirHumRat, + state.dataZoneTempPredictorCorrector->zoneHeatBalance(ventSlab.ZPtr(RadSurfNum)).airHumRat, state.dataEnvrn->OutBaroPress); for (RadSurfNum2 = 1; RadSurfNum2 <= ventSlab.NumOfSurfaces; ++RadSurfNum2) { if (state.dataHeatBalSurf->SurfInsideTempHist(1)(ventSlab.SurfacePtr(RadSurfNum2)) < (DewPointTemp + CondDeltaTemp)) { diff --git a/src/EnergyPlus/WaterUse.cc b/src/EnergyPlus/WaterUse.cc index add3570c770..24675ac00a6 100644 --- a/src/EnergyPlus/WaterUse.cc +++ b/src/EnergyPlus/WaterUse.cc @@ -1255,7 +1255,7 @@ namespace WaterUse { this->LatentRate = 0.0; this->LatentEnergy = 0.0; } else { - Real64 ZoneHumRat = thisZoneHB.ZoneAirHumRat; + Real64 ZoneHumRat = thisZoneHB.airHumRat; Real64 ZoneHumRatSat = Psychrometrics::PsyWFnTdbRhPb(state, thisZoneHB.MAT, 1.0, diff --git a/src/EnergyPlus/WindowComplexManager.cc b/src/EnergyPlus/WindowComplexManager.cc index 726826b1efe..56bd893d460 100644 --- a/src/EnergyPlus/WindowComplexManager.cc +++ b/src/EnergyPlus/WindowComplexManager.cc @@ -3299,13 +3299,13 @@ namespace WindowComplexManager { state.dataSurface->SurfWinAirflowDestination(SurfNum) == WindowAirFlowDestination::Return) { auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); if (state.dataSurface->SurfWinAirflowSource(SurfNum) == WindowAirFlowSource::Indoor) { - InletAirHumRat = thisZoneHB.ZoneAirHumRat; + InletAirHumRat = thisZoneHB.airHumRat; } else { // AirflowSource = outside air InletAirHumRat = state.dataEnvrn->OutHumRat; } ZoneTemp = thisZoneHB.MAT; // this should be Tin (account for different reference temps) CpAirOutlet = PsyCpAirFnW(InletAirHumRat); - CpAirZone = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAirZone = PsyCpAirFnW(thisZoneHB.airHumRat); ConvHeatGainToZoneAir = TotAirflowGap * (CpAirOutlet * (TAirflowGapOutletC)-CpAirZone * ZoneTemp); if (state.dataSurface->SurfWinAirflowDestination(SurfNum) == WindowAirFlowDestination::Indoor) { state.dataSurface->SurfWinConvHeatGainToZoneAir(SurfNum) = ConvHeatGainToZoneAir; diff --git a/src/EnergyPlus/WindowManager.cc b/src/EnergyPlus/WindowManager.cc index 482d1191d6c..6cf334c42da 100644 --- a/src/EnergyPlus/WindowManager.cc +++ b/src/EnergyPlus/WindowManager.cc @@ -2628,7 +2628,7 @@ namespace WindowManager { // or, for airflow windows, on either or the two glass faces in the airflow gap if (!state.dataConstruction->Construct(surface.Construction).WindowTypeEQL) { InsideGlassTemp = state.dataWindowManager->thetas[2 * state.dataWindowManager->ngllayer - 1] - state.dataWindowManager->TKelvin; - RoomHumRat = thisZoneHB.ZoneAirHumRat; + RoomHumRat = thisZoneHB.airHumRat; RoomDewPoint = PsyTdpFnWPb(state, RoomHumRat, state.dataEnvrn->OutBaroPress); state.dataSurface->SurfWinInsideGlassCondensationFlag(SurfNum) = 0; if (InsideGlassTemp < RoomDewPoint) state.dataSurface->SurfWinInsideGlassCondensationFlag(SurfNum) = 1; @@ -3820,13 +3820,13 @@ namespace WindowManager { state.dataSurface->SurfWinAirflowDestination(SurfNum) == WindowAirFlowDestination::Return) { auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); if (state.dataSurface->SurfWinAirflowSource(SurfNum) == WindowAirFlowSource::Indoor) { - InletAirHumRat = thisZoneHB.ZoneAirHumRat; + InletAirHumRat = thisZoneHB.airHumRat; } else { // AirflowSource = outside air InletAirHumRat = state.dataEnvrn->OutHumRat; } Real64 ZoneTemp = thisZoneHB.MAT; // this should be Tin (account for different reference temps) CpAirOutlet = PsyCpAirFnW(InletAirHumRat); - CpAirZone = PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); + CpAirZone = PsyCpAirFnW(thisZoneHB.airHumRat); state.dataSurface->SurfWinRetHeatGainToZoneAir(SurfNum) = TotAirflowGap * (CpAirOutlet * (TAirflowGapOutletC)-CpAirZone * ZoneTemp); if (state.dataSurface->SurfWinAirflowDestination(SurfNum) == WindowAirFlowDestination::Indoor) { diff --git a/src/EnergyPlus/ZoneContaminantPredictorCorrector.cc b/src/EnergyPlus/ZoneContaminantPredictorCorrector.cc index 507278dc4d9..21e8235b308 100644 --- a/src/EnergyPlus/ZoneContaminantPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneContaminantPredictorCorrector.cc @@ -2046,7 +2046,7 @@ void PredictZoneContaminants(EnergyPlusData &state, Real64 RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, - thisZoneHB.ZoneAirHumRat, + thisZoneHB.airHumRat, RoutineName); // The density of air // Calculate Co2 from infiltration + humidity added from latent load to determine system added/subtracted moisture. @@ -2160,7 +2160,7 @@ void PredictZoneContaminants(EnergyPlusData &state, if (ControlledGCZoneFlag) { // The density of air - Real64 RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, thisZoneHB.ZoneAirHumRat, RoutineName); + Real64 RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, thisZoneHB.airHumRat, RoutineName); // Calculate generic contaminant from infiltration + humidity added from latent load // to determine system added/subtracted moisture. @@ -2648,7 +2648,7 @@ void CorrectZoneContaminants(EnergyPlusData &state, // zone humidity ratio. The A, B, C coefficients are analogous to the // CO2 balance. There are 2 cases that should be considered, system operating and system shutdown. - Real64 RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, thisZoneHB.ZoneAirHumRat, RoutineName); + Real64 RhoAir = PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, thisZoneHB.airHumRat, RoutineName); if (state.dataContaminantBalance->Contaminant.CO2Simulation) state.dataContaminantBalance->ZoneAirDensityCO(ZoneNum) = RhoAir; // Calculate Co2 internal gain diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index b2bb32613df..519388959eb 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -395,8 +395,8 @@ void sizeZoneSpaceEquipmentPart1(EnergyPlusData &state, : state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).NonAirSystemResponse; auto &sysDepZoneLoads = (spaceNum > 0) ? state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).SysDepZoneLoads : state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).SysDepZoneLoads; - auto &zoneLatentGain = (spaceNum > 0) ? state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).ZoneLatentGain - : state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).ZoneLatentGain; + auto &zoneLatentGain = (spaceNum > 0) ? state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).latentGain + : state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).latentGain; auto &zoneNodeNum = (spaceNum > 0) ? state.dataHeatBal->space(spaceNum).SystemZoneNodeNumber : state.dataHeatBal->Zone(zoneNum).SystemZoneNodeNumber; nonAirSystemResponse = 0.0; @@ -5151,14 +5151,14 @@ void CalcZoneLeavingConditions(EnergyPlusData &state, bool const FirstHVACIterat state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToHVAC; // shouldn't the HVAC term be zeroed out then? SumRetAirLatentGainRate = InternalHeatGains::SumAllReturnAirLatentGains(state, ZoneNum, ReturnNode); - thisZoneHB.ZoneLatentGain += SumRetAirLatentGainRate; + thisZoneHB.latentGain += SumRetAirLatentGainRate; } } else { state.dataLoopNodes->Node(ReturnNode).HumRat = state.dataLoopNodes->Node(ZoneNode).HumRat; state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToZone += state.dataHeatBal->RefrigCaseCredit(ZoneNum).LatCaseCreditToHVAC; // shouldn't the HVAC term be zeroed out then? SumRetAirLatentGainRate = InternalHeatGains::SumAllReturnAirLatentGains(state, ZoneNum, ReturnNode); - thisZoneHB.ZoneLatentGain += SumRetAirLatentGainRate; + thisZoneHB.latentGain += SumRetAirLatentGainRate; } state.dataLoopNodes->Node(ReturnNode).Enthalpy = @@ -5289,21 +5289,21 @@ void CalcAirFlowSimple(EnergyPlusData &state, // Assign zone air temperature for (auto &thisZoneHB : state.dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MixingMAT = thisZoneHB.MAT; - thisZoneHB.MixingHumRat = thisZoneHB.ZoneAirHumRat; + thisZoneHB.MixingHumRat = thisZoneHB.airHumRat; // This is only temporary fix for CR8867. (L. Gu 8/12) if (SysTimestepLoop == 1) { thisZoneHB.MixingMAT = thisZoneHB.XMPT; - thisZoneHB.MixingHumRat = thisZoneHB.WZoneTimeMinusP; + thisZoneHB.MixingHumRat = thisZoneHB.WTimeMinusP; } } if (state.dataHeatBal->doSpaceHeatBalance) { for (auto &thisSpaceHB : state.dataZoneTempPredictorCorrector->spaceHeatBalance) { thisSpaceHB.MixingMAT = thisSpaceHB.MAT; - thisSpaceHB.MixingHumRat = thisSpaceHB.ZoneAirHumRat; + thisSpaceHB.MixingHumRat = thisSpaceHB.airHumRat; // This is only temporary fix for CR8867. (L. Gu 8/12) if (SysTimestepLoop == 1) { thisSpaceHB.MixingMAT = thisSpaceHB.XMPT; - thisSpaceHB.MixingHumRat = thisSpaceHB.WZoneTimeMinusP; + thisSpaceHB.MixingHumRat = thisSpaceHB.WTimeMinusP; } } } diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.cc b/src/EnergyPlus/ZoneTempPredictorCorrector.cc index 4760e730392..30e8d7cce6a 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.cc @@ -3247,16 +3247,16 @@ void ZoneSpaceHeatBalanceData::beginEnvironmentInit(EnergyPlusData &state) this->DSWPrevZoneTS[i] = state.dataEnvrn->OutHumRat; this->WPrevZoneTSTemp[i] = 0.0; } - this->WZoneTimeMinusP = state.dataEnvrn->OutHumRat; - this->ZoneW1 = state.dataEnvrn->OutHumRat; - this->ZoneWMX = state.dataEnvrn->OutHumRat; - this->ZoneWM2 = state.dataEnvrn->OutHumRat; - this->ZoneAirHumRatTemp = 0.0; - this->TempIndZnLd = 0.0; - this->TempDepZnLd = 0.0; - this->ZoneAirRelHum = 0.0; + this->WTimeMinusP = state.dataEnvrn->OutHumRat; + this->W1 = state.dataEnvrn->OutHumRat; + this->WMX = state.dataEnvrn->OutHumRat; + this->WM2 = state.dataEnvrn->OutHumRat; + this->airHumRatTemp = 0.0; + this->tempIndLoad = 0.0; + this->tempDepLoad = 0.0; + this->airRelHum = 0.0; this->AirPowerCap = 0.0; - this->ZoneT1 = 0.0; + this->T1 = 0.0; } void ZoneSpaceHeatBalanceData::setUpOutputVars(EnergyPlusData &state, std::string_view prefix, std::string_view name) @@ -3271,14 +3271,14 @@ void ZoneSpaceHeatBalanceData::setUpOutputVars(EnergyPlusData &state, std::strin SetupOutputVariable(state, format("{} Air Humidity Ratio", prefix), OutputProcessor::Unit::None, - this->ZoneAirHumRat, + this->airHumRat, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); SetupOutputVariable(state, format("{} Air Relative Humidity", prefix), OutputProcessor::Unit::Perc, - this->ZoneAirRelHum, + this->airRelHum, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, name); @@ -3425,7 +3425,7 @@ void PredictSystemLoads(EnergyPlusData &state, Tprev = thisZoneHB.MAT; if (ShortenTimeStepSys) Tprev = thisZoneHB.XMPT; } else { - Tprev = thisZoneHB.ZoneT1; + Tprev = thisZoneHB.T1; } switch (state.dataHeatBalFanSys->TempControlType(thisTempControlledZone.ActualZoneNum)) { @@ -3565,8 +3565,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( } this->AirPowerCap = volume * state.dataHeatBal->Zone(zoneNum).ZoneVolCapMultpSens * - Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->MAT, this->ZoneAirHumRat) * - Psychrometrics::PsyCpAirFnW(this->ZoneAirHumRat) / TimeStepSysSec; + Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->MAT, this->airHumRat) * + Psychrometrics::PsyCpAirFnW(this->airHumRat) / TimeStepSysSec; Real64 RAFNFrac = 0.0; // Calculate the various heat balance sums @@ -3583,8 +3583,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( this->TempDepCoef = this->SumHA + this->SumMCp; this->TempIndCoef = this->SumIntGain + this->SumHATsurf - this->SumHATref + this->SumMCpT + this->SysDepZoneLoadsLagged; this->TempHistoryTerm = this->AirPowerCap * (3.0 * this->ZTM[0] - (3.0 / 2.0) * this->ZTM[1] + (1.0 / 3.0) * this->ZTM[2]); - this->TempDepZnLd = (11.0 / 6.0) * this->AirPowerCap + this->TempDepCoef; - this->TempIndZnLd = this->TempHistoryTerm + this->TempIndCoef; + this->tempDepLoad = (11.0 / 6.0) * this->AirPowerCap + this->TempDepCoef; + this->tempIndLoad = this->TempHistoryTerm + this->TempIndCoef; if (state.dataRoomAir->anyNonMixingRoomAirModel) { if (state.dataRoomAir->AirModel(zoneNum).AirModel == RoomAir::RoomAirModel::AirflowNetwork) { // RoomAirflowNetworkModel - make dynamic term independent of TimeStepSys @@ -3599,8 +3599,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( this->AirPowerCap = afnZoneInfo.Node(RoomAirNode).AirVolume * state.dataHeatBal->Zone(zoneNum).ZoneVolCapMultpSens * afnZoneInfo.Node(RoomAirNode).RhoAir * afnZoneInfo.Node(RoomAirNode).CpAir / TimeStepSysSec; this->TempHistoryTerm = this->AirPowerCap * (3.0 * this->ZTM[0] - (3.0 / 2.0) * this->ZTM[1] + (1.0 / 3.0) * this->ZTM[2]); - this->TempDepZnLd = (11.0 / 6.0) * this->AirPowerCap + this->TempDepCoef; - this->TempIndZnLd = this->TempHistoryTerm + this->TempIndCoef; + this->tempDepLoad = (11.0 / 6.0) * this->AirPowerCap + this->TempDepCoef; + this->tempIndLoad = this->TempHistoryTerm + this->TempIndCoef; if (afnZoneInfo.Node(RoomAirNode).HasHVACAssigned) RAFNFrac = afnZoneInfo.Node(RoomAirNode).HVAC(1).SupplyFraction; } } @@ -3611,8 +3611,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( if (state.dataHeatBal->ZoneAirSolutionAlgo != DataHeatBalance::SolutionAlgo::ThirdOrder) { if (shortenTimeStepSys && TimeStepSys < state.dataGlobal->TimeStepZone) { if (state.dataHVACGlobal->PreviousTimeStep < state.dataGlobal->TimeStepZone) { - this->ZoneT1 = this->ZoneTM2; - this->ZoneW1 = this->ZoneWM2; + this->T1 = this->TM2; + this->W1 = this->WM2; if (state.dataRoomAir->AirModel(zoneNum).AirModel == RoomAir::RoomAirModel::AirflowNetwork) { auto &afnZoneInfo = state.dataRoomAir->AFNZoneInfo(zoneNum); for (auto &afnNode : afnZoneInfo.Node) { @@ -3621,8 +3621,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( } } } else { - this->ZoneT1 = this->ZoneTMX; - this->ZoneW1 = this->ZoneWMX; + this->T1 = this->TMX; + this->W1 = this->WMX; if (state.dataRoomAir->AirModel(zoneNum).AirModel == RoomAir::RoomAirModel::AirflowNetwork) { auto &afnZoneInfo = state.dataRoomAir->AFNZoneInfo(zoneNum); for (auto &afnNode : afnZoneInfo.Node) { @@ -3633,8 +3633,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( } state.dataHVACGlobal->ShortenTimeStepSysRoomAir = true; } else { - this->ZoneT1 = this->ZT; - this->ZoneW1 = this->ZoneAirHumRat; + this->T1 = this->ZT; + this->W1 = this->airHumRat; if (state.dataRoomAir->AirModel(zoneNum).AirModel == RoomAir::RoomAirModel::AirflowNetwork) { auto &afnZoneInfo = state.dataRoomAir->AFNZoneInfo(zoneNum); for (auto &afnNode : afnZoneInfo.Node) { @@ -3643,8 +3643,8 @@ void ZoneSpaceHeatBalanceData::predictSystemLoad( } } } - this->TempDepZnLd = this->TempDepCoef; - this->TempIndZnLd = this->TempIndCoef; + this->tempDepLoad = this->TempDepCoef; + this->tempIndLoad = this->TempIndCoef; } // Calculate the predicted zone load to be provided by the system with the given desired zone air temperature @@ -4077,8 +4077,7 @@ void ZoneSpaceHeatBalanceData::calcPredictedHumidityRatio(EnergyPlusData &state, // Calculate hourly humidity ratio from infiltration + humidity added from latent load // to determine system added/subtracted moisture. - Real64 LatentGain = - this->ZoneLatentGain + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + state.dataHeatBalFanSys->SumLatentPool(zoneNum); + Real64 LatentGain = this->latentGain + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + state.dataHeatBalFanSys->SumLatentPool(zoneNum); Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; @@ -4088,8 +4087,8 @@ void ZoneSpaceHeatBalanceData::calcPredictedHumidityRatio(EnergyPlusData &state, // are currently set to zero when the CTF only version is used. // The density of air and latent heat of vaporization are calculated as functions. - Real64 RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->ZT, this->ZoneAirHumRat, RoutineName); - Real64 H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(this->ZoneAirHumRat, this->ZT); + Real64 RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->ZT, this->airHumRat, RoutineName); + Real64 H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(this->airHumRat, this->ZT); // Assume that the system will have flow Real64 A = 0.0; @@ -4139,13 +4138,13 @@ void ZoneSpaceHeatBalanceData::calcPredictedHumidityRatio(EnergyPlusData &state, // Exact solution } else if (state.dataHeatBal->ZoneAirSolutionAlgo == DataHeatBalance::SolutionAlgo::AnalyticalSolution) { if (A == 0.0) { // B=0 - LoadToHumidifySetPoint = C * (WZoneSetPoint - this->ZoneW1) - B; + LoadToHumidifySetPoint = C * (WZoneSetPoint - this->W1) - B; } else { exp_700_A_C = std::exp(min(700.0, -A / C)); // Tuned Save expensive value - LoadToHumidifySetPoint = A * (WZoneSetPoint - this->ZoneW1 * exp_700_A_C) / (1.0 - exp_700_A_C) - B; + LoadToHumidifySetPoint = A * (WZoneSetPoint - this->W1 * exp_700_A_C) / (1.0 - exp_700_A_C) - B; } } else if (state.dataHeatBal->ZoneAirSolutionAlgo == DataHeatBalance::SolutionAlgo::EulerMethod) { - LoadToHumidifySetPoint = C * (WZoneSetPoint - this->ZoneW1) + A * WZoneSetPoint - B; + LoadToHumidifySetPoint = C * (WZoneSetPoint - this->W1) + A * WZoneSetPoint - B; } if (RAFNFrac > 0.0) LoadToHumidifySetPoint = LoadToHumidifySetPoint / RAFNFrac; WZoneSetPoint = @@ -4157,12 +4156,12 @@ void ZoneSpaceHeatBalanceData::calcPredictedHumidityRatio(EnergyPlusData &state, // Exact solution } else if (state.dataHeatBal->ZoneAirSolutionAlgo == DataHeatBalance::SolutionAlgo::AnalyticalSolution) { if (A == 0.0) { // B=0 - LoadToDehumidifySetPoint = C * (WZoneSetPoint - this->ZoneW1) - B; + LoadToDehumidifySetPoint = C * (WZoneSetPoint - this->W1) - B; } else { - LoadToDehumidifySetPoint = A * (WZoneSetPoint - this->ZoneW1 * exp_700_A_C) / (1.0 - exp_700_A_C) - B; // exp_700_A_C set above + LoadToDehumidifySetPoint = A * (WZoneSetPoint - this->W1 * exp_700_A_C) / (1.0 - exp_700_A_C) - B; // exp_700_A_C set above } } else if (state.dataHeatBal->ZoneAirSolutionAlgo == DataHeatBalance::SolutionAlgo::EulerMethod) { - LoadToDehumidifySetPoint = C * (WZoneSetPoint - this->ZoneW1) + A * WZoneSetPoint - B; + LoadToDehumidifySetPoint = C * (WZoneSetPoint - this->W1) + A * WZoneSetPoint - B; } if (RAFNFrac > 0.0) LoadToDehumidifySetPoint = LoadToDehumidifySetPoint / RAFNFrac; @@ -4282,8 +4281,8 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( volume = thisZone.Volume; } this->AirPowerCap = volume * thisZone.ZoneVolCapMultpSens * - Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->MAT, this->ZoneAirHumRat, RoutineName) * - Psychrometrics::PsyCpAirFnW(this->ZoneAirHumRat) / TimeStepSysSec; + Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->MAT, this->airHumRat, RoutineName) * + Psychrometrics::PsyCpAirFnW(this->airHumRat) / TimeStepSysSec; // SpaceHB TODO: For now, room air model is only for zones if (spaceNum == 0) { @@ -4327,14 +4326,14 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( } break; case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { if (this->TempDepCoef == 0.0) { // B=0 - this->ZT = this->ZoneT1 + this->TempIndCoef / this->AirPowerCap; + this->ZT = this->T1 + this->TempIndCoef / this->AirPowerCap; } else { - this->ZT = (this->ZoneT1 - this->TempIndCoef / this->TempDepCoef) * std::exp(min(700.0, -this->TempDepCoef / this->AirPowerCap)) + + this->ZT = (this->T1 - this->TempIndCoef / this->TempDepCoef) * std::exp(min(700.0, -this->TempDepCoef / this->AirPowerCap)) + this->TempIndCoef / this->TempDepCoef; } } break; case DataHeatBalance::SolutionAlgo::EulerMethod: { - this->ZT = (this->AirPowerCap * this->ZoneT1 + this->TempIndCoef) / (this->AirPowerCap + this->TempDepCoef); + this->ZT = (this->AirPowerCap * this->T1 + this->TempIndCoef) / (this->AirPowerCap + this->TempDepCoef); } break; default: break; @@ -4414,7 +4413,7 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( } // Sensible load is the enthalpy into the zone minus the enthalpy that leaves the zone. - Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->ZoneAirHumRat); + Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->airHumRat); Real64 ZoneEnthalpyIn = this->SumSysMCpT; // SNLOAD is the single zone load, without Zone Multiplier or Zone List Multiplier @@ -4440,14 +4439,14 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( } break; case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { if (this->TempDepCoef == 0.0) { // B=0 - this->ZT = this->ZoneT1 + this->TempIndCoef / this->AirPowerCap; + this->ZT = this->T1 + this->TempIndCoef / this->AirPowerCap; } else { - this->ZT = (this->ZoneT1 - this->TempIndCoef / this->TempDepCoef) * std::exp(min(700.0, -this->TempDepCoef / this->AirPowerCap)) + + this->ZT = (this->T1 - this->TempIndCoef / this->TempDepCoef) * std::exp(min(700.0, -this->TempDepCoef / this->AirPowerCap)) + this->TempIndCoef / this->TempDepCoef; } } break; case DataHeatBalance::SolutionAlgo::EulerMethod: { - this->ZT = (this->AirPowerCap * this->ZoneT1 + this->TempIndCoef) / (this->AirPowerCap + this->TempDepCoef); + this->ZT = (this->AirPowerCap * this->T1 + this->TempIndCoef) / (this->AirPowerCap + this->TempDepCoef); } break; default: break; @@ -4498,8 +4497,8 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( // Final humidity calcs this->correctHumRat(state, zoneNum, spaceNum); - this->ZoneAirHumRat = this->ZoneAirHumRatTemp; - this->ZoneAirRelHum = 100.0 * Psychrometrics::PsyRhFnTdbWPb(state, this->ZT, this->ZoneAirHumRat, state.dataEnvrn->OutBaroPress, RoutineName); + this->airHumRat = this->airHumRatTemp; + this->airRelHum = 100.0 * Psychrometrics::PsyRhFnTdbWPb(state, this->ZT, this->airHumRat, state.dataEnvrn->OutBaroPress, RoutineName); // tempChange is used by HVACManager to determine if the timestep needs to be shortened. bool isMixed = true; @@ -4521,7 +4520,7 @@ Real64 ZoneSpaceHeatBalanceData::correctAirTemp( case DataHeatBalance::SolutionAlgo::AnalyticalSolution: case DataHeatBalance::SolutionAlgo::EulerMethod: { if (isMixed) { - tempChange = max(tempChange, std::abs(this->ZT - this->ZoneT1)); + tempChange = max(tempChange, std::abs(this->ZT - this->T1)); } else { tempChange = max(tempChange, max(std::abs(state.dataRoomAir->ZTOC(zoneNum) - state.dataRoomAir->Zone1OC(zoneNum)), @@ -4585,10 +4584,10 @@ void ZoneSpaceHeatBalanceData::pushZoneTimestepHistory(EnergyPlusData &state, in } this->XMAT[0] = this->ZTAV; // using average for whole zone time step. this->XMPT = this->ZT; - this->WPrevZoneTS[0] = this->ZoneAirHumRatAvg; // using average for whole zone time step. - this->ZoneAirHumRat = this->ZoneAirHumRatTemp; - this->WZoneTimeMinusP = this->ZoneAirHumRatTemp; - this->ZoneAirRelHum = 100.0 * Psychrometrics::PsyRhFnTdbWPb(state, this->ZT, this->ZoneAirHumRat, state.dataEnvrn->OutBaroPress, routineName); + this->WPrevZoneTS[0] = this->airHumRatAvg; // using average for whole zone time step. + this->airHumRat = this->airHumRatTemp; + this->WTimeMinusP = this->airHumRatTemp; + this->airRelHum = 100.0 * Psychrometrics::PsyRhFnTdbWPb(state, this->ZT, this->airHumRat, state.dataEnvrn->OutBaroPress, routineName); // SpaceHB TODO: For now, room air model is only for zones if (spaceNum == 0) { @@ -4630,10 +4629,10 @@ void ZoneSpaceHeatBalanceData::pushZoneTimestepHistory(EnergyPlusData &state, in } if (state.dataHeatBal->ZoneAirSolutionAlgo != DataHeatBalance::SolutionAlgo::ThirdOrder) { - this->ZoneTM2 = this->ZoneTMX; - this->ZoneTMX = this->ZTAV; // using average for whole zone time step. - this->ZoneWM2 = this->ZoneWMX; - this->ZoneWMX = this->ZoneAirHumRatAvg; // using average for whole zone time step. + this->TM2 = this->TMX; + this->TMX = this->ZTAV; // using average for whole zone time step. + this->WM2 = this->WMX; + this->WMX = this->airHumRatAvg; // using average for whole zone time step. // SpaceHB TODO: For now, room air model is only for zones if (spaceNum == 0) { if (thisAirModel.AirModel == RoomAir::RoomAirModel::DispVent3Node || thisAirModel.AirModel == RoomAir::RoomAirModel::UFADInt || @@ -4687,7 +4686,7 @@ void ZoneSpaceHeatBalanceData::pushSystemTimestepHistory(EnergyPlusData &state, this->DSWPrevZoneTS[iHistory] = this->DSWPrevZoneTS[iHistory - 1]; } this->DSXMAT[0] = this->MAT; - this->DSWPrevZoneTS[0] = this->ZoneAirHumRat; + this->DSWPrevZoneTS[0] = this->airHumRat; // SpaceHB TODO: For now, room air model is only for zones if (spaceNum == 0 && state.dataRoomAir->anyNonMixingRoomAirModel) { @@ -4723,10 +4722,10 @@ void ZoneSpaceHeatBalanceData::pushSystemTimestepHistory(EnergyPlusData &state, } if (state.dataHeatBal->ZoneAirSolutionAlgo != DataHeatBalance::SolutionAlgo::ThirdOrder) { - this->ZoneTM2 = this->ZoneTMX; - this->ZoneTMX = this->MAT; // using average for whole zone time step. - this->ZoneWM2 = this->ZoneWMX; - this->ZoneWMX = this->ZoneAirHumRatTemp; // using average for whole zone time step. + this->TM2 = this->TMX; + this->TMX = this->MAT; // using average for whole zone time step. + this->WM2 = this->WMX; + this->WMX = this->airHumRatTemp; // using average for whole zone time step. // SpaceHB TODO: For now, room air model is only for zones if (spaceNum == 0) { @@ -4876,7 +4875,7 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo } // Calculate hourly humidity ratio from infiltration + humidity added from latent load + system added moisture - Real64 LatentGain = this->ZoneLatentGain + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + state.dataHeatBalFanSys->SumLatentPool(zoneNum); + Real64 LatentGain = this->latentGain + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + state.dataHeatBalFanSys->SumLatentPool(zoneNum); Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; @@ -4885,8 +4884,8 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo // heat balance. There are 2 cases that should be considered, system // operating and system shutdown. - Real64 const RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->ZT, this->ZoneAirHumRat, RoutineName); - Real64 const H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(this->ZoneAirHumRat, this->ZT); + Real64 const RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, this->ZT, this->airHumRat, RoutineName); + Real64 const H2OHtOfVap = Psychrometrics::PsyHgAirFnWTdb(this->airHumRat, this->ZT); Real64 B = (LatentGain / H2OHtOfVap) + ((this->OAMFL + this->VAMFL + this->CTMFL) * state.dataEnvrn->OutHumRat) + this->EAMFLxHumRat + (MoistureMassFlowRate) + this->SumHmARaW + this->MixingMassFlowXHumRat + this->MDotOA * state.dataEnvrn->OutHumRat; @@ -4912,36 +4911,36 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo // auto &zoneW1 = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum).ZoneW1; switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - this->ZoneAirHumRatTemp = + this->airHumRatTemp = (B + C * (3.0 * this->WPrevZoneTSTemp[0] - (3.0 / 2.0) * this->WPrevZoneTSTemp[1] + (1.0 / 3.0) * this->WPrevZoneTSTemp[2])) / ((11.0 / 6.0) * C + A); // Exact solution } break; case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { if (A == 0.0) { // B=0 - this->ZoneAirHumRatTemp = this->ZoneW1 + B / C; + this->airHumRatTemp = this->W1 + B / C; } else { - this->ZoneAirHumRatTemp = (this->ZoneW1 - B / A) * std::exp(min(700.0, -A / C)) + B / A; + this->airHumRatTemp = (this->W1 - B / A) * std::exp(min(700.0, -A / C)) + B / A; } } break; case DataHeatBalance::SolutionAlgo::EulerMethod: { - this->ZoneAirHumRatTemp = (C * this->ZoneW1 + B) / (C + A); + this->airHumRatTemp = (C * this->W1 + B) / (C + A); } break; default: break; } // Set the humidity ratio to zero if the zone has been dried out - if (this->ZoneAirHumRatTemp < 0.0) this->ZoneAirHumRatTemp = 0.0; + if (this->airHumRatTemp < 0.0) this->airHumRatTemp = 0.0; // Check to make sure that is saturated there is condensation in the zone // by resetting to saturation conditions. Real64 const WZSat = Psychrometrics::PsyWFnTdbRhPb(state, this->ZT, 1.0, state.dataEnvrn->OutBaroPress, RoutineName); - if (this->ZoneAirHumRatTemp > WZSat) this->ZoneAirHumRatTemp = WZSat; + if (this->airHumRatTemp > WZSat) this->airHumRatTemp = WZSat; if (state.dataRoomAir->AirModel(zoneNum).AirModel == RoomAir::RoomAirModel::AirflowNetwork) { - this->ZoneAirHumRatTemp = state.dataRoomAir->AFNZoneInfo(zoneNum).Node(state.dataRoomAir->AFNZoneInfo(zoneNum).ControlAirNodeID).HumRat; + this->airHumRatTemp = state.dataRoomAir->AFNZoneInfo(zoneNum).Node(state.dataRoomAir->AFNZoneInfo(zoneNum).ControlAirNodeID).HumRat; } // HybridModel with measured humidity ratio begins @@ -4952,7 +4951,7 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo (!state.dataGlobal->WarmupFlag) && (!state.dataGlobal->DoingSizing)) { Real64 LatentGainExceptPeople = 0.0; if (state.dataHybridModel->HybridModelZone(zoneNum).PeopleCountCalc_H) { - LatentGainExceptPeople = this->ZoneLatentGainExceptPeople + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + + LatentGainExceptPeople = this->latentGainExceptPeople + state.dataHeatBalFanSys->SumLatentHTRadSys(zoneNum) + state.dataHeatBalFanSys->SumLatentPool(zoneNum); } @@ -4966,13 +4965,13 @@ void ZoneSpaceHeatBalanceData::correctHumRat(EnergyPlusData &state, int const zo ZoneNodeNum = state.dataHeatBal->space(spaceNum).SystemZoneNodeNumber; } if (ZoneNodeNum > 0) { - state.dataLoopNodes->Node(ZoneNodeNum).HumRat = this->ZoneAirHumRatTemp; - state.dataLoopNodes->Node(ZoneNodeNum).Enthalpy = Psychrometrics::PsyHFnTdbW(this->ZT, this->ZoneAirHumRatTemp); + state.dataLoopNodes->Node(ZoneNodeNum).HumRat = this->airHumRatTemp; + state.dataLoopNodes->Node(ZoneNodeNum).Enthalpy = Psychrometrics::PsyHFnTdbW(this->ZT, this->airHumRatTemp); } if (state.dataHeatBal->DoLatentSizing) { Real64 sensibleLoad = 0.0; Real64 pSat = Psychrometrics::PsyPsatFnTemp(state, this->ZT, RoutineName); - Real64 Tdp = Psychrometrics::PsyTdpFnWPb(state, this->ZoneAirHumRatTemp, state.dataEnvrn->StdBaroPress); + Real64 Tdp = Psychrometrics::PsyTdpFnWPb(state, this->airHumRatTemp, state.dataEnvrn->StdBaroPress); Real64 vaporPressureDiff = pSat - Psychrometrics::PsyPsatFnTemp(state, Tdp, RoutineName); if (spaceNum > 0) { sensibleLoad = state.dataZoneEnergyDemand->spaceSysEnergyDemand(spaceNum).airSysHeatRate + @@ -5254,8 +5253,8 @@ void InverseModelTemperature(EnergyPlusData &state, Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.ZT, - thisZoneHB.ZoneAirHumRat) * - Psychrometrics::PsyCpAirFnW(thisZoneHB.ZoneAirHumRat)) * + thisZoneHB.airHumRat) * + Psychrometrics::PsyCpAirFnW(thisZoneHB.airHumRat)) * (state.dataGlobal->TimeStepZone * Constant::SecInHour); // Inverse equation if ((MultpHM < 1.0) || (MultpHM > 30.0)) { // Temperature capacity multiplier greater than // 1 and less than 30 @@ -5389,7 +5388,7 @@ void InverseModelHumidity(EnergyPlusData &state, zone.ZoneMeasuredHumidityRatio = ScheduleManager::GetCurrentScheduleValue(state, hybridModelZone.ZoneMeasuredHumidityRatioSchedulePtr); if (state.dataEnvrn->DayOfYear >= hybridModelZone.HybridStartDayOfYear && state.dataEnvrn->DayOfYear <= hybridModelZone.HybridEndDayOfYear) { - thisZoneHB.ZoneAirHumRat = zone.ZoneMeasuredHumidityRatio; + thisZoneHB.airHumRat = zone.ZoneMeasuredHumidityRatio; // Hybrid Model calculate air infiltration rate if (hybridModelZone.InfiltrationCalc_H && state.dataHVACGlobal->UseZoneTimeStepHistory) { @@ -5575,7 +5574,7 @@ void ZoneSpaceHeatBalanceData::calcZoneOrSpaceSums(EnergyPlusData &state, // Get node conditions, this next block is of interest to irratic system loads... maybe nodes are not accurate at time of call? // how can we tell? predict step must be lagged ? correct step, systems have run. auto const &node(state.dataLoopNodes->Node(zsec.InletNode(NodeNum))); - Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->ZoneAirHumRat); + Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->airHumRat); Real64 const MassFlowRate_CpAir(node.MassFlowRate * CpAir); this->SumSysMCp += MassFlowRate_CpAir; this->SumSysMCpT += MassFlowRate_CpAir * node.Temp; @@ -5583,7 +5582,7 @@ void ZoneSpaceHeatBalanceData::calcZoneOrSpaceSums(EnergyPlusData &state, } else if (thisZone.IsReturnPlenum) { auto const &zrpc(state.dataZonePlenum->ZoneRetPlenCond(thisZone.PlenumCondNum)); - Real64 const air_hum_rat(this->ZoneAirHumRat); + Real64 const air_hum_rat(this->airHumRat); for (int NodeNum = 1, NodeNum_end = zrpc.NumInletNodes; NodeNum <= NodeNum_end; ++NodeNum) { auto const &node(state.dataLoopNodes->Node(zrpc.InletNode(NodeNum))); Real64 const MassFlowRate_CpAir(node.MassFlowRate * Psychrometrics::PsyCpAirFnW(air_hum_rat)); @@ -5607,7 +5606,7 @@ void ZoneSpaceHeatBalanceData::calcZoneOrSpaceSums(EnergyPlusData &state, } else if (thisZone.IsSupplyPlenum) { Real64 MassFlowRate = state.dataLoopNodes->Node(state.dataZonePlenum->ZoneSupPlenCond(thisZone.PlenumCondNum).InletNode).MassFlowRate; - Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->ZoneAirHumRat); + Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->airHumRat); this->SumSysMCp += MassFlowRate * CpAir; this->SumSysMCpT += MassFlowRate * CpAir * state.dataLoopNodes->Node(state.dataZonePlenum->ZoneSupPlenCond(thisZone.PlenumCondNum).InletNode).Temp; @@ -5852,7 +5851,7 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, // Get node conditions Real64 const NodeTemp = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(NodeNum)).Temp; Real64 const MassFlowRate = state.dataLoopNodes->Node(zoneEquipConfig.InletNode(NodeNum)).MassFlowRate; - QSensRate = calcZoneSensibleOutput(MassFlowRate, NodeTemp, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + QSensRate = calcZoneSensibleOutput(MassFlowRate, NodeTemp, thisZoneHB.MAT, thisZoneHB.airHumRat); SumMCpDTsystem += QSensRate; if (zoneEquipConfig.InletNodeADUNum(NodeNum) > 0) { @@ -5860,7 +5859,7 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, Real64 ADUHeatAddRate = calcZoneSensibleOutput(state.dataLoopNodes->Node(airDistUnit.OutletNodeNum).MassFlowRate, state.dataLoopNodes->Node(airDistUnit.OutletNodeNum).Temp, thisZoneHB.MAT, - thisZoneHB.ZoneAirHumRat); + thisZoneHB.airHumRat); airDistUnit.HeatRate = max(0.0, ADUHeatAddRate); airDistUnit.CoolRate = std::abs(min(0.0, ADUHeatAddRate)); airDistUnit.HeatGain = airDistUnit.HeatRate * TimeStepSysSec; @@ -5874,24 +5873,20 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, QSensRate = calcZoneSensibleOutput(state.dataLoopNodes->Node(zoneRetPlenCond.InletNode(NodeNum)).MassFlowRate, state.dataLoopNodes->Node(zoneRetPlenCond.InletNode(NodeNum)).Temp, thisZoneHB.MAT, - thisZoneHB.ZoneAirHumRat); + thisZoneHB.airHumRat); SumMCpDTsystem += QSensRate; } // add in the leaks for (int ADUListIndex = 1; ADUListIndex <= zoneRetPlenCond.NumADUs; ++ADUListIndex) { auto &airDistUnit = state.dataDefineEquipment->AirDistUnit(zoneRetPlenCond.ADUIndex(ADUListIndex)); if (airDistUnit.UpStreamLeak) { - QSensRate = calcZoneSensibleOutput(airDistUnit.MassFlowRateUpStrLk, - state.dataLoopNodes->Node(airDistUnit.InletNodeNum).Temp, - thisZoneHB.MAT, - thisZoneHB.ZoneAirHumRat); + QSensRate = calcZoneSensibleOutput( + airDistUnit.MassFlowRateUpStrLk, state.dataLoopNodes->Node(airDistUnit.InletNodeNum).Temp, thisZoneHB.MAT, thisZoneHB.airHumRat); SumMCpDTsystem += QSensRate; } if (airDistUnit.DownStreamLeak) { - QSensRate = calcZoneSensibleOutput(airDistUnit.MassFlowRateDnStrLk, - state.dataLoopNodes->Node(airDistUnit.OutletNodeNum).Temp, - thisZoneHB.MAT, - thisZoneHB.ZoneAirHumRat); + QSensRate = calcZoneSensibleOutput( + airDistUnit.MassFlowRateDnStrLk, state.dataLoopNodes->Node(airDistUnit.OutletNodeNum).Temp, thisZoneHB.MAT, thisZoneHB.airHumRat); SumMCpDTsystem += QSensRate; } } @@ -5901,7 +5896,7 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, QSensRate = calcZoneSensibleOutput(state.dataLoopNodes->Node(zoneSupPlenCond.InletNode).MassFlowRate, state.dataLoopNodes->Node(zoneSupPlenCond.InletNode).Temp, thisZoneHB.MAT, - thisZoneHB.ZoneAirHumRat); + thisZoneHB.airHumRat); SumMCpDTsystem += QSensRate; } @@ -5975,8 +5970,8 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, } // now calculate air energy storage source term. // capacitance is volume * density * heat capacity - Real64 CpAir = Psychrometrics::PsyCpAirFnW(thisZoneHB.ZoneAirHumRat); - Real64 RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + Real64 CpAir = Psychrometrics::PsyCpAirFnW(thisZoneHB.airHumRat); + Real64 RhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(state, state.dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRat); switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { @@ -5987,7 +5982,7 @@ void CalcZoneComponentLoadSums(EnergyPlusData &state, CzdTdt = TempIndCoef - TempDepCoef * thisZoneHB.MAT; } break; case DataHeatBalance::SolutionAlgo::EulerMethod: { - CzdTdt = thisZoneHB.AirPowerCap * (thisZoneHB.MAT - thisZoneHB.ZoneT1); + CzdTdt = thisZoneHB.AirPowerCap * (thisZoneHB.MAT - thisZoneHB.T1); } break; default: break; @@ -6771,7 +6766,7 @@ void AdjustCoolingSetPointforTempAndHumidityControl(EnergyPlusData &state, ZoneOvercoolRange = min(ZoneOvercoolRange, MaxAllowedOvercoolRange); } // Calculate difference between zone air relative humidity and the dehumidifying setpoint - Real64 RelativeHumidityDiff = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ActualZoneNum).ZoneAirRelHum - + Real64 RelativeHumidityDiff = state.dataZoneTempPredictorCorrector->zoneHeatBalance(ActualZoneNum).airRelHum - ScheduleManager::GetCurrentScheduleValue(state, tempControlledZone.DehumidifyingSchedIndex); if (RelativeHumidityDiff > 0.0 && ZoneOvercoolControlRatio > 0.0) { // proportionally reset the cooling setpoint temperature downward (zone Overcool) @@ -7113,7 +7108,7 @@ void ZoneSpaceHeatBalanceData::updateTemperatures(EnergyPlusData &state, state.dataHVACGlobal->NumOfSysTimeStepsLastZoneTimeStep) { // cannot reuse existing DS data, interpolate from zone time Real64 TimeStepSys = state.dataHVACGlobal->TimeStepSys; this->MAT = DownInterpolate4HistoryValues(PriorTimeStep, TimeStepSys, this->XMAT, this->DSXMAT); - this->ZoneAirHumRat = DownInterpolate4HistoryValues(PriorTimeStep, TimeStepSys, this->WPrevZoneTS, this->DSWPrevZoneTS); + this->airHumRat = DownInterpolate4HistoryValues(PriorTimeStep, TimeStepSys, this->WPrevZoneTS, this->DSWPrevZoneTS); if (spaceNum == 0 && state.dataRoomAir->anyNonMixingRoomAirModel) { if (state.dataRoomAir->IsZoneDispVent3Node(zoneNum) || state.dataRoomAir->IsZoneUFAD(zoneNum)) { @@ -7178,22 +7173,22 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re case DataHVACGlobals::ThermostatType::SingleHeating: switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToHeatingSetPoint = (this->TempDepZnLd * thisTempZoneThermostatSetPoint - this->TempIndZnLd); + LoadToHeatingSetPoint = (this->tempDepLoad * thisTempZoneThermostatSetPoint - this->tempIndLoad); break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToHeatingSetPoint = - this->TempDepZnLd * (thisTempZoneThermostatSetPoint - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisTempZoneThermostatSetPoint - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) + - this->TempDepZnLd * (thisTempZoneThermostatSetPoint) - this->TempIndZnLd; + LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) + + this->tempDepLoad * (thisTempZoneThermostatSetPoint) - this->tempIndLoad; break; } default: { @@ -7212,22 +7207,22 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re case DataHVACGlobals::ThermostatType::SingleCooling: switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToCoolingSetPoint = this->TempDepZnLd * thisTempZoneThermostatSetPoint - this->TempIndZnLd; + LoadToCoolingSetPoint = this->tempDepLoad * thisTempZoneThermostatSetPoint - this->tempIndLoad; break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToCoolingSetPoint = - this->TempDepZnLd * (thisTempZoneThermostatSetPoint - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisTempZoneThermostatSetPoint - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) + - this->TempDepZnLd * thisTempZoneThermostatSetPoint - this->TempIndZnLd; + LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) + + this->tempDepLoad * thisTempZoneThermostatSetPoint - this->tempIndLoad; break; } default: { @@ -7236,7 +7231,7 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re } if (RAFNFrac > 0.0) LoadToHeatingSetPoint = LoadToHeatingSetPoint / RAFNFrac; if (thisZone.HasAdjustedReturnTempByITE && !(state.dataGlobal->BeginSimFlag)) { - LoadToCoolingSetPoint = this->TempDepZnLd * thisZone.AdjustedReturnTempByITE - this->TempIndZnLd; + LoadToCoolingSetPoint = this->tempDepLoad * thisZone.AdjustedReturnTempByITE - this->tempIndLoad; } totalLoad = LoadToCoolingSetPoint; ZoneSetPoint = thisTempZoneThermostatSetPoint; @@ -7248,28 +7243,28 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re case DataHVACGlobals::ThermostatType::SingleHeatCool: switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToHeatingSetPoint = (this->TempDepZnLd * (thisTempZoneThermostatSetPoint) - this->TempIndZnLd); - LoadToCoolingSetPoint = (this->TempDepZnLd * (thisTempZoneThermostatSetPoint) - this->TempIndZnLd); + LoadToHeatingSetPoint = (this->tempDepLoad * (thisTempZoneThermostatSetPoint) - this->tempIndLoad); + LoadToCoolingSetPoint = (this->tempDepLoad * (thisTempZoneThermostatSetPoint) - this->tempIndLoad); break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) - this->TempIndZnLd; - LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) - this->tempIndLoad; + LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToHeatingSetPoint = - this->TempDepZnLd * (thisTempZoneThermostatSetPoint - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisTempZoneThermostatSetPoint - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; LoadToCoolingSetPoint = - this->TempDepZnLd * (thisTempZoneThermostatSetPoint - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisTempZoneThermostatSetPoint - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) + - this->TempDepZnLd * thisTempZoneThermostatSetPoint - this->TempIndZnLd; - LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->ZoneT1) + - this->TempDepZnLd * thisTempZoneThermostatSetPoint - this->TempIndZnLd; + LoadToHeatingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) + + this->tempDepLoad * thisTempZoneThermostatSetPoint - this->tempIndLoad; + LoadToCoolingSetPoint = this->AirPowerCap * (thisTempZoneThermostatSetPoint - this->T1) + + this->tempDepLoad * thisTempZoneThermostatSetPoint - this->tempIndLoad; break; } default: { @@ -7281,7 +7276,7 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re if (RAFNFrac > 0.0) LoadToCoolingSetPoint = LoadToCoolingSetPoint / RAFNFrac; if (thisZone.HasAdjustedReturnTempByITE && !(state.dataGlobal->BeginSimFlag)) { - LoadToCoolingSetPoint = this->TempDepZnLd * thisZone.AdjustedReturnTempByITE - this->TempIndZnLd; + LoadToCoolingSetPoint = this->tempDepLoad * thisZone.AdjustedReturnTempByITE - this->tempIndLoad; } // Note that LoadToHeatingSetPoint is generally not equal to LoadToCoolingSetPoint @@ -7303,8 +7298,8 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re ShowContinueErrorTimeStamp(state, format("occurs in Zone={}", thisZone.Name)); ShowContinueError(state, format("LoadToHeatingSetPoint={:.3R}, LoadToCoolingSetPoint={:.3R}", LoadToHeatingSetPoint, LoadToCoolingSetPoint)); - ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->TempDepZnLd)); - ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->TempIndZnLd)); + ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->tempDepLoad)); + ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->tempIndLoad)); ShowContinueError(state, format("Zone ThermostatSetPoint={:.2R}", thisTempZoneThermostatSetPoint)); ShowFatalError(state, "Program terminates due to above conditions."); } @@ -7327,8 +7322,8 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re ShowContinueErrorTimeStamp(state, format("occurs in Zone={}", thisZone.Name)); ShowContinueError(state, format("LoadToHeatingSetPoint={:.3R}, LoadToCoolingSetPoint={:.3R}", LoadToHeatingSetPoint, LoadToCoolingSetPoint)); - ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->TempDepZnLd)); - ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->TempIndZnLd)); + ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->tempDepLoad)); + ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->tempIndLoad)); ShowContinueError(state, format("Zone ThermostatSetPoint={:.2R}", thisTempZoneThermostatSetPoint)); ShowFatalError(state, "Program terminates due to above conditions."); } @@ -7336,28 +7331,28 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re case DataHVACGlobals::ThermostatType::DualSetPointWithDeadBand: switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToHeatingSetPoint = (this->TempDepZnLd * (thisZoneThermostatSetPointLo) - this->TempIndZnLd); - LoadToCoolingSetPoint = (this->TempDepZnLd * (thisZoneThermostatSetPointHi) - this->TempIndZnLd); + LoadToHeatingSetPoint = (this->tempDepLoad * (thisZoneThermostatSetPointLo) - this->tempIndLoad); + LoadToCoolingSetPoint = (this->tempDepLoad * (thisZoneThermostatSetPointHi) - this->tempIndLoad); break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->ZoneT1) - this->TempIndZnLd; - LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->T1) - this->tempIndLoad; + LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToHeatingSetPoint = - this->TempDepZnLd * (thisZoneThermostatSetPointLo - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisZoneThermostatSetPointLo - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; LoadToCoolingSetPoint = - this->TempDepZnLd * (thisZoneThermostatSetPointHi - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisZoneThermostatSetPointHi - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->ZoneT1) + - this->TempDepZnLd * thisZoneThermostatSetPointLo - this->TempIndZnLd; - LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->ZoneT1) + - this->TempDepZnLd * thisZoneThermostatSetPointHi - this->TempIndZnLd; + LoadToHeatingSetPoint = + this->AirPowerCap * (thisZoneThermostatSetPointLo - this->T1) + this->tempDepLoad * thisZoneThermostatSetPointLo - this->tempIndLoad; + LoadToCoolingSetPoint = + this->AirPowerCap * (thisZoneThermostatSetPointHi - this->T1) + this->tempDepLoad * thisZoneThermostatSetPointHi - this->tempIndLoad; break; } default: { @@ -7368,7 +7363,7 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re if (RAFNFrac > 0.0) LoadToCoolingSetPoint = LoadToCoolingSetPoint / RAFNFrac; if (thisZone.HasAdjustedReturnTempByITE && !(state.dataGlobal->BeginSimFlag)) { - LoadToCoolingSetPoint = this->TempDepZnLd * thisZone.AdjustedReturnTempByITE - this->TempIndZnLd; + LoadToCoolingSetPoint = this->tempDepLoad * thisZone.AdjustedReturnTempByITE - this->tempIndLoad; } // Possible combinations: @@ -7385,8 +7380,8 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re ShowContinueErrorTimeStamp(state, format("occurs in Zone={}", thisZone.Name)); ShowContinueError(state, format("LoadToHeatingSetPoint={:.3R}, LoadToCoolingSetPoint={:.3R}", LoadToHeatingSetPoint, LoadToCoolingSetPoint)); - ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->TempDepZnLd)); - ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->TempIndZnLd)); + ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->tempDepLoad)); + ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->tempIndLoad)); ShowContinueError(state, format("Zone Heating ThermostatSetPoint={:.2R}", thisZoneThermostatSetPointLo)); ShowContinueError(state, format("Zone Cooling ThermostatSetPoint={:.2R}", thisZoneThermostatSetPointHi)); ShowFatalError(state, "Program terminates due to above conditions."); @@ -7415,8 +7410,8 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re format("LoadToHeatingSetPoint={:.3R}, LoadToCoolingSetPoint={:.3R}", LoadToHeatingSetPoint, LoadToCoolingSetPoint)); ShowContinueError(state, format("Zone Heating Set-point={:.2R}", thisZoneThermostatSetPointLo)); ShowContinueError(state, format("Zone Cooling Set-point={:.2R}", thisZoneThermostatSetPointHi)); - ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->TempDepZnLd)); - ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->TempIndZnLd)); + ShowContinueError(state, format("Zone TempDepZnLd={:.2R}", this->tempDepLoad)); + ShowContinueError(state, format("Zone TempIndZnLd={:.2R}", this->tempIndLoad)); ShowContinueError(state, format("Zone ThermostatSetPoint={:.2R}", thisTempZoneThermostatSetPoint)); ShowFatalError(state, "Program terminates due to above conditions."); @@ -7452,22 +7447,22 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re } else if (stageNum < 0) { // Cooling load switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToCoolingSetPoint = (this->TempDepZnLd * (thisZoneThermostatSetPointHi) - this->TempIndZnLd); + LoadToCoolingSetPoint = (this->tempDepLoad * (thisZoneThermostatSetPointHi) - this->tempIndLoad); break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToCoolingSetPoint = - this->TempDepZnLd * (thisZoneThermostatSetPointHi - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisZoneThermostatSetPointHi - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->ZoneT1) + - this->TempDepZnLd * thisZoneThermostatSetPointHi - this->TempIndZnLd; + LoadToCoolingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointHi - this->T1) + + this->tempDepLoad * thisZoneThermostatSetPointHi - this->tempIndLoad; break; } default: { @@ -7481,22 +7476,22 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re } else { // Heating load switch (state.dataHeatBal->ZoneAirSolutionAlgo) { case DataHeatBalance::SolutionAlgo::ThirdOrder: { - LoadToHeatingSetPoint = (this->TempDepZnLd * thisZoneThermostatSetPointLo - this->TempIndZnLd); + LoadToHeatingSetPoint = (this->tempDepLoad * thisZoneThermostatSetPointLo - this->tempIndLoad); break; } case DataHeatBalance::SolutionAlgo::AnalyticalSolution: { - if (this->TempDepZnLd == 0.0) { // B=0 - LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->ZoneT1) - this->TempIndZnLd; + if (this->tempDepLoad == 0.0) { // B=0 + LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->T1) - this->tempIndLoad; } else { - Real64 const exp_700_TA(std::exp(min(700.0, -this->TempDepZnLd / this->AirPowerCap))); + Real64 const exp_700_TA(std::exp(min(700.0, -this->tempDepLoad / this->AirPowerCap))); LoadToHeatingSetPoint = - this->TempDepZnLd * (thisZoneThermostatSetPointLo - this->ZoneT1 * exp_700_TA) / (1.0 - exp_700_TA) - this->TempIndZnLd; + this->tempDepLoad * (thisZoneThermostatSetPointLo - this->T1 * exp_700_TA) / (1.0 - exp_700_TA) - this->tempIndLoad; } break; } case DataHeatBalance::SolutionAlgo::EulerMethod: { - LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->ZoneT1) + - this->TempDepZnLd * (thisZoneThermostatSetPointLo) - this->TempIndZnLd; + LoadToHeatingSetPoint = this->AirPowerCap * (thisZoneThermostatSetPointLo - this->T1) + + this->tempDepLoad * (thisZoneThermostatSetPointLo) - this->tempIndLoad; break; } default: { @@ -7516,9 +7511,9 @@ void ZoneSpaceHeatBalanceData::calcPredictedSystemLoad(EnergyPlusData &state, Re state.dataLoopNodes->Node(zoneNodeNum).TempSetPoint = ZoneSetPoint; } - state.dataZoneEnergyDemand->Setback(zoneNum) = (ZoneSetPoint > this->ZoneSetPointLast); + state.dataZoneEnergyDemand->Setback(zoneNum) = (ZoneSetPoint > this->setPointLast); - this->ZoneSetPointLast = ZoneSetPoint; + this->setPointLast = ZoneSetPoint; state.dataHeatBalFanSys->TempZoneThermostatSetPoint(zoneNum) = ZoneSetPoint; // needed to fix Issue # 5048 state.dataZoneEnergyDemand->DeadBandOrSetback(zoneNum) = thisDeadBandOrSetBack; state.dataZoneEnergyDemand->CurDeadBandOrSetback(zoneNum) = thisDeadBandOrSetBack; diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.hh b/src/EnergyPlus/ZoneTempPredictorCorrector.hh index 01721743896..b7b00285095 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.hh +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.hh @@ -134,32 +134,29 @@ namespace ZoneTempPredictorCorrector { DataHeatBalance::ZoneInitialTemp, DataHeatBalance::ZoneInitialTemp}; // Down Stepped air temperature history storage // Exact and Euler solutions - Real64 ZoneTMX = DataHeatBalance::ZoneInitialTemp; // Temporary air temperature to test convergence in Exact and Euler method - Real64 ZoneTM2 = DataHeatBalance::ZoneInitialTemp; // Temporary air temperature at timestep t-2 in Exact and Euler method - Real64 ZoneT1 = 0.0; // Air temperature at the previous time step used in Exact and Euler method + Real64 TMX = DataHeatBalance::ZoneInitialTemp; // Temporary air temperature to test convergence in Exact and Euler method + Real64 TM2 = DataHeatBalance::ZoneInitialTemp; // Temporary air temperature at timestep t-2 in Exact and Euler method + Real64 T1 = 0.0; // Air temperature at the previous time step used in Exact and Euler method // Zone or space air moisture conditions - Real64 ZoneAirHumRat = 0.01; // Air Humidity Ratio - Real64 ZoneAirHumRatAvg = 0.01; // Air Humidity Ratio averaged over the zone time step - Real64 ZoneAirHumRatTemp = 0.01; // Temporary air humidity ratio at time plus 1 - Real64 ZoneAirHumRatAvgComf = 0.01; // Air Humidity Ratio averaged over the zone time - // step used in thermal comfort models (currently Fang model only) - // TODO: lagged? could ZoneAirHumRatAvg be used instead? + Real64 airHumRat = 0.01; // Air Humidity Ratio + Real64 airHumRatAvg = 0.01; // Air Humidity Ratio averaged over the zone time step + Real64 airHumRatTemp = 0.01; // Temporary air humidity ratio at time plus 1 + Real64 airHumRatAvgComf = 0.01; // Air Humidity Ratio averaged over the zone time + // step used in thermal comfort models (currently Fang model only) + // TODO: lagged? could ZoneAirHumRatAvg be used instead? std::array WPrevZoneTS = {0.0, 0.0, 0.0, 0.0}; // Air Humidity Ratio zone time step history std::array DSWPrevZoneTS = {0.0, 0.0, 0.0, 0.0}; // DownStepped Air Humidity Ratio zone time step history for 3rd order derivative - Real64 WZoneTimeMinusP = 0.0; // Air Humidity Ratio at previous system time step + Real64 WTimeMinusP = 0.0; // Air Humidity Ratio at previous system time step // Exact and Euler solutions - Real64 ZoneWMX = 0.0; // Temporary humidity ratio to test convergence in Exact and Euler method - Real64 ZoneWM2 = 0.0; // Temporary humidity ratio at timestep t-2 in Exact and Euler method - Real64 ZoneW1 = 0.0; // Zone/space humidity ratio at the previous time step used in Exact and Euler method + Real64 WMX = 0.0; // Temporary humidity ratio to test convergence in Exact and Euler method + Real64 WM2 = 0.0; // Temporary humidity ratio at timestep t-2 in Exact and Euler method + Real64 W1 = 0.0; // Zone/space humidity ratio at the previous time step used in Exact and Euler method std::array ZTM = { 0.0, 0.0, 0.0, 0.0}; // air temperature at previous 3 zone timesteps (sized to 4 to be compatible with other similar arrays) std::array WPrevZoneTSTemp = {0.0, 0.0, 0.0, 0.0}; // Temporary Air Humidity Ratio zone time step history (4th term not used) - // Real64 WZoneTimeMinus1Temp = 0.0; // Zone air humidity ratio at previous timestep - // Real64 WZoneTimeMinus2Temp = 0.0; // Zone air humidity ratio at timestep T-2 - // Real64 WZoneTimeMinus3Temp = 0.0; // Zone air humidity ratio at timestep T-3 Real64 SumIntGain = 0.0; // Sum of convective internal gains Real64 SumHA = 0.0; // Sum of Hc*Area @@ -181,27 +178,27 @@ namespace ZoneTempPredictorCorrector { Real64 TempIndCoef = 0.0; // Temperature ndependent coefficient Real64 TempHistoryTerm = 0.0; - Real64 MCPI = 0.0; // INFILTRATION MASS FLOW * AIR SPECIFIC HEAT - Real64 MCPTI = 0.0; // INFILTRATION MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 MCPV = 0.0; // VENTILATION MASS FLOW * AIR SPECIFIC HEAT - Real64 MCPTV = 0.0; // VENTILATION MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 MCPM = 0.0; // Mixing MASS FLOW * AIR SPECIFIC HEAT - Real64 MCPTM = 0.0; // Mixing MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 MCPE = 0.0; // EARTHTUBE MASS FLOW * AIR SPECIFIC HEAT - Real64 EAMFL = 0.0; // OUTDOOR AIR MASS FLOW for EarthTube - Real64 EAMFLxHumRat = 0.0; // OUTDOOR AIR MASS FLOW * Humidity Ratio for EarthTube (water vapor mass flow) - Real64 MCPTE = 0.0; // EARTHTUBE MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 MCPC = 0.0; // COOLTOWER MASS FLOW * AIR SPECIFIC HEAT - Real64 CTMFL = 0.0; // OUTDOOR AIR MASS FLOW for cooltower - Real64 MCPTC = 0.0; // COOLTOWER MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 ThermChimAMFL = 0.0; // OUTDOOR AIR MASS FLOW for THERMALCHIMNEY - Real64 MCPTThermChim = 0.0; // THERMALCHIMNEY MASS FLOW * AIR SPECIFIC HEAT - Real64 MCPThermChim = 0.0; // THERMALCHIMNEY MASS FLOW * AIR CP * AIR TEMPERATURE - Real64 ZoneLatentGain = 0.0; // Latent Energy from each Zone (People, equipment) - Real64 ZoneLatentGainExceptPeople = 0.0; // Added for hybrid model -- Latent Energy from each Zone (equipment) - Real64 OAMFL = 0.0; // OUTDOOR AIR MASS FLOW (kg/s) for infiltration - Real64 VAMFL = 0.0; // OUTDOOR AIR MASS FLOW (kg/s) for ventilation - Real64 NonAirSystemResponse = 0.0; // Convective heat addition rate from non forced air + Real64 MCPI = 0.0; // INFILTRATION MASS FLOW * AIR SPECIFIC HEAT + Real64 MCPTI = 0.0; // INFILTRATION MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 MCPV = 0.0; // VENTILATION MASS FLOW * AIR SPECIFIC HEAT + Real64 MCPTV = 0.0; // VENTILATION MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 MCPM = 0.0; // Mixing MASS FLOW * AIR SPECIFIC HEAT + Real64 MCPTM = 0.0; // Mixing MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 MCPE = 0.0; // EARTHTUBE MASS FLOW * AIR SPECIFIC HEAT + Real64 EAMFL = 0.0; // OUTDOOR AIR MASS FLOW for EarthTube + Real64 EAMFLxHumRat = 0.0; // OUTDOOR AIR MASS FLOW * Humidity Ratio for EarthTube (water vapor mass flow) + Real64 MCPTE = 0.0; // EARTHTUBE MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 MCPC = 0.0; // COOLTOWER MASS FLOW * AIR SPECIFIC HEAT + Real64 CTMFL = 0.0; // OUTDOOR AIR MASS FLOW for cooltower + Real64 MCPTC = 0.0; // COOLTOWER MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 ThermChimAMFL = 0.0; // OUTDOOR AIR MASS FLOW for THERMALCHIMNEY + Real64 MCPTThermChim = 0.0; // THERMALCHIMNEY MASS FLOW * AIR SPECIFIC HEAT + Real64 MCPThermChim = 0.0; // THERMALCHIMNEY MASS FLOW * AIR CP * AIR TEMPERATURE + Real64 latentGain = 0.0; // Latent Energy from each Zone (People, equipment) + Real64 latentGainExceptPeople = 0.0; // Added for hybrid model -- Latent Energy from each Zone (equipment) + Real64 OAMFL = 0.0; // OUTDOOR AIR MASS FLOW (kg/s) for infiltration + Real64 VAMFL = 0.0; // OUTDOOR AIR MASS FLOW (kg/s) for ventilation + Real64 NonAirSystemResponse = 0.0; // Convective heat addition rate from non forced air // equipment such as baseboards plus heat from lights to Real64 SysDepZoneLoads = 0.0; // Convective heat addition or subtraction rate from sources that // depend on what is happening with the HVAC system. Such as: @@ -218,11 +215,11 @@ namespace ZoneTempPredictorCorrector { Real64 MixingMassFlowZone = 0.0; // Mixing MASS FLOW (kg/s) Real64 MixingMassFlowXHumRat = 0.0; // Mixing MASS FLOW * Humidity Ratio - Real64 ZoneSetPointLast = 0.0; - Real64 TempIndZnLd = 0.0; - Real64 TempDepZnLd = 0.0; - Real64 ZoneAirRelHum = 0.0; // Zone relative humidity in percent - Real64 AirPowerCap = 0.0; // "air power capacity" Vol*VolMult*rho*Cp/timestep [W/degK] + Real64 setPointLast = 0.0; + Real64 tempIndLoad = 0.0; + Real64 tempDepLoad = 0.0; + Real64 airRelHum = 0.0; // Zone relative humidity in percent + Real64 AirPowerCap = 0.0; // "air power capacity" Vol*VolMult*rho*Cp/timestep [W/degK] void beginEnvironmentInit(EnergyPlusData &state); @@ -461,7 +458,7 @@ struct ZoneTempPredictorCorrectorData : BaseGlobalStruct void clear_state() override { - *this = ZoneTempPredictorCorrectorData(); + new (this) ZoneTempPredictorCorrectorData(); } }; diff --git a/tst/EnergyPlus/unit/AirflowNetworkConditions.unit.cc b/tst/EnergyPlus/unit/AirflowNetworkConditions.unit.cc index 2eea2c19960..ff2ca30e7a1 100644 --- a/tst/EnergyPlus/unit/AirflowNetworkConditions.unit.cc +++ b/tst/EnergyPlus/unit/AirflowNetworkConditions.unit.cc @@ -6022,7 +6022,7 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_BasicAdvancedSingleSidedAvoidCrashTest) // #6912 state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 23.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataEnvrn->OutDryBulbTemp = -17.29025; state->dataEnvrn->OutHumRat = 0.0008389; state->dataEnvrn->OutBaroPress = 99063.0; diff --git a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc index c808d9aa5d9..ffba57db953 100644 --- a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc +++ b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc @@ -2245,14 +2245,14 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestPressureStat) state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MAT = 5.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.0007; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.0011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.0012; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).ZoneAirHumRat = 0.0008; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0007; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRatAvg = 0.0011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRatAvg = 0.0012; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).ZoneAirHumRatAvg = 0.0008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.0007; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.0012; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRat = 0.0008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0007; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRatAvg = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRatAvg = 0.0012; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRatAvg = 0.0008; state->dataZoneEquip->ZoneEquipConfig.allocate(4); state->dataZoneEquip->ZoneEquipConfig(1).IsControlled = false; state->dataZoneEquip->ZoneEquipConfig(2).IsControlled = false; @@ -2277,14 +2277,14 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_TestPressureStat) EXPECT_NEAR(91.8528571, state->afn->AirflowNetworkReportData(3).MultiZoneInfiLatLossW, 0.0001); auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1); - Real64 hg = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.ZoneAirHumRat, thisZoneHB.MAT); - Real64 hzone = Psychrometrics::PsyHFnTdbW(thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat); + Real64 hg = Psychrometrics::PsyHgAirFnWTdb(thisZoneHB.airHumRat, thisZoneHB.MAT); + Real64 hzone = Psychrometrics::PsyHFnTdbW(thisZoneHB.MAT, thisZoneHB.airHumRat); Real64 hamb = Psychrometrics::PsyHFnTdbW(0.0, state->dataEnvrn->OutHumRat); Real64 hdiff = state->afn->AirflowNetworkLinkSimu(1).FLOW2 * (hzone - hamb); Real64 sum = state->afn->AirflowNetworkReportData(1).MultiZoneInfiSenLossW - state->afn->AirflowNetworkReportData(1).MultiZoneInfiLatGainW; // Existing code uses T_average to calculate hg, get close results EXPECT_NEAR(hdiff, sum, 0.4); - Real64 dhlatent = state->afn->AirflowNetworkLinkSimu(1).FLOW2 * hg * (thisZoneHB.ZoneAirHumRat - state->dataEnvrn->OutHumRat); + Real64 dhlatent = state->afn->AirflowNetworkLinkSimu(1).FLOW2 * hg * (thisZoneHB.airHumRat - state->dataEnvrn->OutHumRat); // when hg is calculated with indoor temperature, get exact results sum = state->afn->AirflowNetworkReportData(1).MultiZoneInfiSenLossW + dhlatent; EXPECT_NEAR(hdiff, sum, 0.001); @@ -6024,8 +6024,8 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_MultiAirLoopTest) state->dataZoneEquip->ZoneEquipConfig.allocate(5); for (auto &thisZoneHB : state->dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MAT = 23.0; - thisZoneHB.ZoneAirHumRat = 0.001; - thisZoneHB.ZoneAirHumRatAvg = 0.001; + thisZoneHB.airHumRat = 0.001; + thisZoneHB.airHumRatAvg = 0.001; } state->dataHeatBal->Zone(1).OutDryBulbTemp = state->dataEnvrn->OutDryBulbTemp; state->dataHeatBal->Zone(2).OutDryBulbTemp = state->dataEnvrn->OutDryBulbTemp; @@ -10488,11 +10488,11 @@ TEST_F(EnergyPlusFixture, DISABLED_AirLoopNumTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).MAT = 23.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).airHumRat = 0.001; DataZoneEquipment::GetZoneEquipmentData(*state); ZoneAirLoopEquipmentManager::GetZoneAirLoopEquipment(*state); @@ -16245,7 +16245,7 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_DuctSizingTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(3); for (auto &thisZoneHB : state->dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MAT = 23.0; - thisZoneHB.ZoneAirHumRat = 0.0008400; + thisZoneHB.airHumRat = 0.0008400; } state->dataZoneEquip->ZoneEquipList(1).EquipIndex(1) = 1; diff --git a/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc b/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc index 3677c0a16a5..4ab480b5e04 100644 --- a/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc +++ b/tst/EnergyPlus/unit/ConvectionCoefficients.unit.cc @@ -830,7 +830,7 @@ TEST_F(ConvectionCoefficientsFixture, initIntConvCoeffAdjRatio) state->dataHeatBalSurf->SurfTempInTmp.dimension(7, 20.0); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.006; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.006; state->dataHeatBalSurf->SurfHConvInt.allocate(7); state->dataHeatBalSurf->SurfHConvInt(7) = 0.0; diff --git a/tst/EnergyPlus/unit/CoolTower.unit.cc b/tst/EnergyPlus/unit/CoolTower.unit.cc index 79b46a5ae7a..533df9f7978 100644 --- a/tst/EnergyPlus/unit/CoolTower.unit.cc +++ b/tst/EnergyPlus/unit/CoolTower.unit.cc @@ -92,7 +92,7 @@ TEST_F(EnergyPlusFixture, ExerciseCoolTower) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MCPC = 1; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MCPTC = 1; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).CTMFL = 1; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 1; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 1; state->dataEnvrn->OutDryBulbTemp = 35.0; state->dataEnvrn->OutWetBulbTemp = 26.0; diff --git a/tst/EnergyPlus/unit/HVACManager.unit.cc b/tst/EnergyPlus/unit/HVACManager.unit.cc index b48074b4040..c80efbabdc5 100644 --- a/tst/EnergyPlus/unit/HVACManager.unit.cc +++ b/tst/EnergyPlus/unit/HVACManager.unit.cc @@ -103,10 +103,10 @@ TEST_F(EnergyPlusFixture, CrossMixingReportTest) state->dataEnvrn->OutBaroPress = 101325.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 22.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.0011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRatAvg = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRatAvg = 0.0011; state->dataEnvrn->StdRhoAir = 1.20; state->dataHeatBal->CrossMixing(1).ZonePtr = 1; @@ -211,10 +211,10 @@ TEST_F(EnergyPlusFixture, InfiltrationObjectLevelReport) state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 22.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRat = 0.001; state->dataHeatBal->AirFlowFlag = true; state->dataEnvrn->OutBaroPress = 101325.0; @@ -389,10 +389,10 @@ TEST_F(EnergyPlusFixture, InfiltrationReportTest) state->dataEnvrn->OutHumRat = 0.0005; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 22.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.0011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRatAvg = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRatAvg = 0.0011; state->dataEnvrn->StdRhoAir = 1.20; state->dataHeatBal->Zone(1).OutDryBulbTemp = 20.0; state->dataHeatBal->Zone(2).OutDryBulbTemp = 20.0; @@ -423,12 +423,12 @@ TEST_F(EnergyPlusFixture, InfiltrationReportTest) 3600.0 * (Psychrometrics::PsyHFnTdbW(state->dataHeatBal->Zone(1).OutDryBulbTemp, state->dataEnvrn->OutHumRat) - Psychrometrics::PsyHFnTdbW(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT, - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat)); + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat)); EXPECT_NEAR(-deltah, state->dataHeatBal->ZnAirRpt(1).InfilTotalLoss, 0.0001); deltah = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MCPV / (Psychrometrics::PsyCpAirFnW(state->dataEnvrn->OutHumRat)) * 3600.0 * (Psychrometrics::PsyHFnTdbW(state->dataHeatBal->Zone(1).OutDryBulbTemp, state->dataEnvrn->OutHumRat) - Psychrometrics::PsyHFnTdbW(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT, - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat)); + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat)); EXPECT_NEAR(-deltah, state->dataHeatBal->ZnAirRpt(1).VentilTotalLoss, 0.0001); } @@ -453,10 +453,10 @@ TEST_F(EnergyPlusFixture, ExfilAndExhaustReportTest) state->dataEnvrn->OutHumRat = 0.0005; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 22.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.0011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRatAvg = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.0011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRatAvg = 0.0011; state->dataEnvrn->StdRhoAir = 1.20; state->dataHeatBal->Zone(1).OutDryBulbTemp = 20.0; state->dataHeatBal->Zone(2).OutDryBulbTemp = 20.0; diff --git a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc index 4185d2b2c5a..8129933d325 100644 --- a/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceSurfaceManager.unit.cc @@ -804,7 +804,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceI state->dataGlobal->TimeStepZoneSec = 900; SolarShading::AllocateModuleArrays(*state); HeatBalanceManager::AllocateZoneHeatBalArrays(*state); - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; AllocateSurfaceHeatBalArrays(*state); createFacilityElectricPowerServiceObject(*state); @@ -1358,7 +1358,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceI createFacilityElectricPowerServiceObject(*state); HeatBalanceManager::AllocateZoneHeatBalArrays(*state); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; SolarShading::AllocateModuleArrays(*state); SolarShading::DetermineShadowingCombinations(*state); for (int loop = 1; loop <= state->dataSurface->TotSurfaces; ++loop) { @@ -1835,7 +1835,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertyLocalEnv) state->dataEnvrn->OutBaroPress = 101325.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataLoopNodes->Node.allocate(4); @@ -2412,7 +2412,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertySrdSurfLWR) state->dataEnvrn->OutBaroPress = 101325.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataLoopNodes->Node.allocate(4); @@ -2982,7 +2982,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfTempCalcHeatBalanceA state->dataEnvrn->OutBaroPress = 101325.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataLoopNodes->Node.allocate(4); @@ -3194,7 +3194,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestResilienceMetricReport) state->dataHeatBal->Resilience.allocate(state->dataGlobal->NumOfZones); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 0.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0; state->dataHeatBalFanSys->ZoneThermostatSetPointLo.dimension(state->dataGlobal->NumOfZones, 22.0); state->dataHeatBalFanSys->ZoneThermostatSetPointHi.dimension(state->dataGlobal->NumOfZones, 28.0); @@ -3221,7 +3221,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestResilienceMetricReport) state->dataGlobal->HourOfDay = 1; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 25; state->dataThermalComforts->ThermalComfortData(1).FangerPMV = -4.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.00988; // RH = 50% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.00988; // RH = 50% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(25, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3230,7 +3230,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestResilienceMetricReport) // Heat Index Case 2: Zone RH > 85, 80 < T < 87 F; state->dataGlobal->HourOfDay = 2; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 27; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.02035; // RH = 90% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.02035; // RH = 90% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(31, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3239,7 +3239,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestResilienceMetricReport) // Heat Index Case 3: < Zone RH > 85, 80 < T < 87 F; state->dataGlobal->HourOfDay = 3; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 27; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0022; // RH = 10% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0022; // RH = 10% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(26, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3248,7 +3248,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestResilienceMetricReport) // Heat Index Case 4: Rothfusz regression, other than the above conditions; state->dataGlobal->HourOfDay = 4; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 30; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.01604; // RH = 60% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.01604; // RH = 60% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(33, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3740,7 +3740,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestThermalResilienceReportR state->dataHeatBal->Resilience.allocate(state->dataGlobal->NumOfZones); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 0.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0; state->dataHeatBal->Zone.allocate(state->dataGlobal->NumOfZones); state->dataHeatBalFanSys->ZoneThermostatSetPointLo.dimension(state->dataGlobal->NumOfZones, 22.0); @@ -3803,7 +3803,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestThermalResilienceReportR state->dataGlobal->HourOfDay = 1; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 25; state->dataThermalComforts->ThermalComfortData(1).FangerPMV = -4.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.00988; // RH = 50% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.00988; // RH = 50% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(25, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3812,7 +3812,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestThermalResilienceReportR // Heat Index Case 2: Zone RH > 85, 80 < T < 87 F; state->dataGlobal->HourOfDay = 2; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 27; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.02035; // RH = 90% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.02035; // RH = 90% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(31, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3821,7 +3821,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestThermalResilienceReportR // Heat Index Case 3: < Zone RH > 85, 80 < T < 87 F; state->dataGlobal->HourOfDay = 3; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 27; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0022; // RH = 10% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0022; // RH = 10% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(26, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -3830,7 +3830,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestThermalResilienceReportR // Heat Index Case 4: Rothfusz regression, other than the above conditions; state->dataGlobal->HourOfDay = 4; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 30; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.01604; // RH = 60% + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.01604; // RH = 60% CalcThermalResilience(*state); ReportThermalResilience(*state); EXPECT_NEAR(33, state->dataHeatBal->Resilience(1).ZoneHeatIndex, 0.5); @@ -5928,8 +5928,8 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestTDDSurfWinHeatGain) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(2); for (auto &thisZoneHB : state->dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MAT = 24.0; - thisZoneHB.ZoneAirHumRat = 0.001; - thisZoneHB.ZoneAirHumRatAvg = 0.001; + thisZoneHB.airHumRat = 0.001; + thisZoneHB.airHumRatAvg = 0.001; } state->dataLoopNodes->Node.allocate(4); @@ -7049,7 +7049,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertySurfToGndLWR state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataLoopNodes->Node.allocate(4); auto &InletNode1 = state->dataLoopNodes->Node(1); @@ -8292,7 +8292,7 @@ TEST_F(EnergyPlusFixture, HeatBalanceSurfaceManager_TestSurfPropertyViewFactorsR state->dataSize->ZoneEqSizing.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; state->dataLoopNodes->Node.allocate(4); auto &InletNode1 = state->dataLoopNodes->Node(1); diff --git a/tst/EnergyPlus/unit/HybridModel.unit.cc b/tst/EnergyPlus/unit/HybridModel.unit.cc index 6cbf38e1c5e..050b53bfd0f 100644 --- a/tst/EnergyPlus/unit/HybridModel.unit.cc +++ b/tst/EnergyPlus/unit/HybridModel.unit.cc @@ -210,7 +210,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBalFanSys->PreviousMeasuredZT2(1) = 0.2; state->dataHeatBalFanSys->PreviousMeasuredZT3(1) = 0.3; state->dataHeatBal->Zone(1).OutDryBulbTemp = -5.21; - thisZoneHB.ZoneAirHumRat = 0.002083; + thisZoneHB.airHumRat = 0.002083; thisZoneHB.MCPV = 1414.60; // Assign TempDepCoef thisZoneHB.MCPTV = -3335.10; // Assign TempIndCoef state->dataEnvrn->OutBaroPress = 99166.67; @@ -235,7 +235,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBalFanSys->PreviousMeasuredZT3(1) = 0.06; state->dataHeatBal->Zone(1).ZoneVolCapMultpSens = 8.0; state->dataHeatBal->Zone(1).OutDryBulbTemp = -6.71; - thisZoneHB.ZoneAirHumRat = 0.002083; + thisZoneHB.airHumRat = 0.002083; thisZoneHB.MCPV = 539.49; // Assign TempDepCoef thisZoneHB.MCPTV = 270.10; // Assign TempIndCoef state->dataEnvrn->OutBaroPress = 99250; @@ -257,7 +257,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBal->Zone(1).Volume = 4000; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.62; state->dataHeatBal->Zone(1).ZoneVolCapMultpMoist = 1.0; - thisZoneHB.ZoneAirHumRat = 0.001120003; + thisZoneHB.airHumRat = 0.001120003; thisZoneHB.ZT = -6.08; state->dataEnvrn->OutHumRat = 0.0011366887816818931; state->dataHeatBalFanSys->PreviousMeasuredHumRat1(1) = 0.0011186324286; @@ -290,7 +290,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBalFanSys->PreviousMeasuredZT3(1) = -2.909294101; state->dataHeatBal->Zone(1).ZoneVolCapMultpSens = 1.0; state->dataHeatBal->Zone(1).OutDryBulbTemp = -6.71; - thisZoneHB.ZoneAirHumRat = 0.0024964; + thisZoneHB.airHumRat = 0.0024964; state->dataEnvrn->OutBaroPress = 98916.7; thisZoneHB.MCPV = 5163.5; // Assign TempDepCoef thisZoneHB.MCPTV = -15956.8; // Assign TempIndCoef @@ -314,13 +314,13 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBal->Zone(1).Volume = 4000; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.62; state->dataHeatBal->Zone(1).ZoneVolCapMultpMoist = 1.0; - thisZoneHB.ZoneAirHumRat = 0.0024964; + thisZoneHB.airHumRat = 0.0024964; thisZoneHB.ZT = -2.92; state->dataEnvrn->OutHumRat = 0.0025365002784602363; state->dataEnvrn->OutBaroPress = 98916.7; thisZoneHB.OAMFL = 0.700812; - thisZoneHB.ZoneLatentGain = 211.2; - thisZoneHB.ZoneLatentGainExceptPeople = 0.0; + thisZoneHB.latentGain = 211.2; + thisZoneHB.latentGainExceptPeople = 0.0; state->dataHeatBalFanSys->PreviousMeasuredHumRat1(1) = 0.002496356; state->dataHeatBalFanSys->PreviousMeasuredHumRat2(1) = 0.002489048; state->dataHeatBalFanSys->PreviousMeasuredHumRat3(1) = 0.002480404; @@ -349,7 +349,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBalFanSys->PreviousMeasuredZT3(1) = 15.56; state->dataHeatBal->Zone(1).ZoneVolCapMultpSens = 1.0; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.62; - thisZoneHB.ZoneAirHumRat = 0.0077647; + thisZoneHB.airHumRat = 0.0077647; thisZoneHB.MCPV = 4456; // Assign TempDepCoef thisZoneHB.MCPTV = 60650; // Assign TempIndCoef state->dataEnvrn->OutBaroPress = 99500; @@ -379,7 +379,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBal->Zone(1).Volume = 4000; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.62; state->dataHeatBal->Zone(1).ZoneVolCapMultpMoist = 1.0; - thisZoneHB.ZoneAirHumRat = 0.001120003; + thisZoneHB.airHumRat = 0.001120003; thisZoneHB.ZT = -6.08; state->dataEnvrn->OutHumRat = 0.0011366887816818931; state->dataHeatBalFanSys->PreviousMeasuredHumRat1(1) = 0.007855718; @@ -414,7 +414,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBalFanSys->PreviousMeasuredZT3(1) = 21.11; state->dataHeatBal->Zone(1).ZoneVolCapMultpSens = 1.0; state->dataHeatBal->Zone(1).OutDryBulbTemp = -6.71; - thisZoneHB.ZoneAirHumRat = 0.0024964; + thisZoneHB.airHumRat = 0.0024964; state->dataEnvrn->OutBaroPress = 98916.7; thisZoneHB.MCPV = 6616; // Assign TempDepCoef thisZoneHB.MCPTV = 138483.2; // Assign TempIndCoef @@ -448,7 +448,7 @@ TEST_F(EnergyPlusFixture, HybridModel_correctZoneAirTempsTest) state->dataHeatBal->Zone(1).Volume = 4000; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.62; state->dataHeatBal->Zone(1).ZoneVolCapMultpMoist = 1.0; - thisZoneHB.ZoneAirHumRat = 0.001120003; + thisZoneHB.airHumRat = 0.001120003; thisZoneHB.ZT = -6.08; state->dataEnvrn->OutHumRat = 0.0011366887816818931; state->dataHeatBalFanSys->PreviousMeasuredHumRat1(1) = 0.011085257; @@ -578,7 +578,7 @@ TEST_F(EnergyPlusFixture, HybridModel_CorrectZoneContaminantsTest) state->dataHybridModel->HybridModelZone(1).HybridStartDayOfYear = 1; state->dataHybridModel->HybridModelZone(1).HybridEndDayOfYear = 2; state->dataHeatBal->Zone(1).ZoneVolCapMultpCO2 = 1.0; - thisZoneHB.ZoneAirHumRat = 0.001120003; + thisZoneHB.airHumRat = 0.001120003; state->dataContaminantBalance->OutdoorCO2 = 387.6064554; state->dataEnvrn->OutHumRat = 0.001147; state->dataEnvrn->OutBaroPress = 99500; @@ -607,7 +607,7 @@ TEST_F(EnergyPlusFixture, HybridModel_CorrectZoneContaminantsTest) state->dataHeatBal->Zone(1).ZoneVolCapMultpCO2 = 1.0; state->dataHeatBal->Zone(1).OutDryBulbTemp = -1.0394166434012677; thisZoneHB.ZT = -2.92; - thisZoneHB.ZoneAirHumRat = 0.00112; + thisZoneHB.airHumRat = 0.00112; state->dataContaminantBalance->OutdoorCO2 = 387.6064554; state->dataEnvrn->OutBaroPress = 98916.7; thisZoneHB.OAMFL = 0.700812; @@ -634,7 +634,7 @@ TEST_F(EnergyPlusFixture, HybridModel_CorrectZoneContaminantsTest) state->dataHybridModel->HybridModelZone(1).HybridEndDayOfYear = 2; state->dataHeatBal->Zone(1).ZoneVolCapMultpCO2 = 1.0; thisZoneHB.ZT = 15.56; - thisZoneHB.ZoneAirHumRat = 0.00809; + thisZoneHB.airHumRat = 0.00809; state->dataHeatBal->Zone(1).OutDryBulbTemp = -10.7; state->dataEnvrn->OutBaroPress = 99500; state->dataContaminantBalance->ZoneCO2Gain(1) = 0.0; @@ -666,7 +666,7 @@ TEST_F(EnergyPlusFixture, HybridModel_CorrectZoneContaminantsTest) state->dataHybridModel->HybridModelZone(1).HybridEndDayOfYear = 2; state->dataHeatBal->Zone(1).ZoneVolCapMultpCO2 = 1.0; thisZoneHB.ZT = 21.1; - thisZoneHB.ZoneAirHumRat = 0.01102; + thisZoneHB.airHumRat = 0.01102; state->dataEnvrn->OutBaroPress = 98933.3; state->dataContaminantBalance->ZoneCO2Gain(1) = 0.00003333814; state->dataContaminantBalance->ZoneCO2GainExceptPeople(1) = 0.0; diff --git a/tst/EnergyPlus/unit/InternalHeatGains.unit.cc b/tst/EnergyPlus/unit/InternalHeatGains.unit.cc index 2313b840041..aaf60d0ad99 100644 --- a/tst/EnergyPlus/unit/InternalHeatGains.unit.cc +++ b/tst/EnergyPlus/unit/InternalHeatGains.unit.cc @@ -477,7 +477,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_ElectricEquipITE_BeginEnvironmentRes state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); InternalHeatGains::CalcZoneITEq(*state); @@ -893,7 +893,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_ElectricEquipITE_ApproachTemperature state->dataZoneEquip->ZoneEquipConfig.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); @@ -1045,7 +1045,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_ElectricEquipITE_DefaultCurves) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); InternalHeatGains::CalcZoneITEq(*state); @@ -1565,7 +1565,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_AdjustedSupplyGoodInletNode) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -1787,7 +1787,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_AdjustedSupplyBadInletNode) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; EXPECT_ANY_THROW(InternalHeatGains::GetInternalHeatGainsInput(*state)); } @@ -2012,7 +2012,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_FlowControlWithApproachTemperaturesG state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -2238,7 +2238,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_FlowControlWithApproachTemperaturesB state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; ASSERT_ANY_THROW(InternalHeatGains::GetInternalHeatGainsInput(*state)); } @@ -2463,7 +2463,7 @@ TEST_F(EnergyPlusFixture, InternalHeatGains_WarnMissingInletNode) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -2641,7 +2641,7 @@ TEST_F(EnergyPlusFixture, ITEwithUncontrolledZoneTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -2782,7 +2782,7 @@ TEST_F(EnergyPlusFixture, ITE_Env_Class_Fix_41C) // Test 1: 41C; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 41.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.015; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.015; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -2983,7 +2983,7 @@ TEST_F(EnergyPlusFixture, ITE_Env_Class_Fix_39C) // Test 2: 39C; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 39.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.015; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.015; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); @@ -3193,7 +3193,7 @@ TEST_F(EnergyPlusFixture, ITE_Env_Class_Update_Class_H1) // Test: 41C state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 41.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.015; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.015; InternalHeatGains::GetInternalHeatGainsInput(*state); ASSERT_FALSE(ErrorsFound); diff --git a/tst/EnergyPlus/unit/MoistureBalanceEMPD.unit.cc b/tst/EnergyPlus/unit/MoistureBalanceEMPD.unit.cc index 8ef951dfdb2..b77d605f323 100644 --- a/tst/EnergyPlus/unit/MoistureBalanceEMPD.unit.cc +++ b/tst/EnergyPlus/unit/MoistureBalanceEMPD.unit.cc @@ -114,7 +114,7 @@ TEST_F(EnergyPlusFixture, CheckEMPDCalc) state->dataMstBal->HMassConvInFD.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 20.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.0061285406810457849; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.0061285406810457849; // Construction surface.Construction = 1; @@ -234,7 +234,7 @@ TEST_F(EnergyPlusFixture, EMPDRcoating) state->dataMstBal->HMassConvInFD.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 20.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.0061285406810457849; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.0061285406810457849; // Construction surface.Construction = 1; @@ -319,7 +319,7 @@ TEST_F(EnergyPlusFixture, CheckEMPDCalc_Slope) state->dataMstBal->HMassConvInFD.allocate(surfNum); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(zoneNum); state->dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).MAT = 20.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).ZoneAirHumRat = 0.0061285406810457849; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum).airHumRat = 0.0061285406810457849; // Construction int constNum = 1; diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index b1e6d48887b..4d1e2287c7b 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -3866,7 +3866,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(6); for (auto &thisZoneHB : state->dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MAT = 23.0; - thisZoneHB.ZoneAirHumRat = 0.001; + thisZoneHB.airHumRat = 0.001; } state->dataZoneEnergyDemand->ZoneSysEnergyDemand.allocate(state->dataGlobal->NumOfZones); @@ -3885,7 +3885,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Temp = state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).MAT; state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).HumRat = - state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).ZoneAirHumRat; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).airHumRat; state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Enthalpy = Psychrometrics::PsyHFnTdbW(state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Temp, state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).HumRat); @@ -3953,7 +3953,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Temp = state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).MAT; state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).HumRat = - state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).ZoneAirHumRat; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(i).airHumRat; state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Enthalpy = Psychrometrics::PsyHFnTdbW(state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).Temp, state->dataLoopNodes->Node(state->dataZoneEquip->ZoneEquipConfig(i).ZoneNode).HumRat); diff --git a/tst/EnergyPlus/unit/PurchasedAirManager.unit.cc b/tst/EnergyPlus/unit/PurchasedAirManager.unit.cc index c8aa863ce74..c65354826f1 100644 --- a/tst/EnergyPlus/unit/PurchasedAirManager.unit.cc +++ b/tst/EnergyPlus/unit/PurchasedAirManager.unit.cc @@ -131,7 +131,7 @@ class ZoneIdealLoadsTest : public EnergyPlusFixture state->dataZoneEnergyDemand->DeadBandOrSetback.allocate(1); state->dataZoneEnergyDemand->DeadBandOrSetback(1) = false; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.07; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.07; state->dataZoneEquip->ZoneEquipInputsFilled = false; } diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 69768beea1c..d8630d03e6c 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -298,21 +298,21 @@ TEST_F(RoomAirflowNetworkTest, RAFNTest) auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); thisZoneHB.MAT = 20.0; - thisZoneHB.ZoneAirHumRat = 0.001; + thisZoneHB.airHumRat = 0.001; state->dataHeatBalSurf->SurfHConvInt(1) = 1.0; state->dataHeatBalSurf->SurfHConvInt(2) = 1.0; state->dataHeatBalSurf->SurfTempInTmp(1) = 25.0; state->dataHeatBalSurf->SurfTempInTmp(2) = 30.0; - state->dataMstBal->RhoVaporAirIn(1) = PsyRhovFnTdbWPb(thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat, state->dataEnvrn->OutBaroPress); - state->dataMstBal->RhoVaporAirIn(2) = PsyRhovFnTdbWPb(thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat, state->dataEnvrn->OutBaroPress); + state->dataMstBal->RhoVaporAirIn(1) = PsyRhovFnTdbWPb(thisZoneHB.MAT, thisZoneHB.airHumRat, state->dataEnvrn->OutBaroPress); + state->dataMstBal->RhoVaporAirIn(2) = PsyRhovFnTdbWPb(thisZoneHB.MAT, thisZoneHB.airHumRat, state->dataEnvrn->OutBaroPress); state->dataMstBal->HMassConvInFD(1) = state->dataHeatBalSurf->SurfHConvInt(1) / - ((PsyRhoAirFnPbTdbW(*state, state->dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat) + state->dataMstBal->RhoVaporAirIn(1)) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat)); + ((PsyRhoAirFnPbTdbW(*state, state->dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRat) + state->dataMstBal->RhoVaporAirIn(1)) * + PsyCpAirFnW(thisZoneHB.airHumRat)); state->dataMstBal->HMassConvInFD(2) = state->dataHeatBalSurf->SurfHConvInt(2) / - ((PsyRhoAirFnPbTdbW(*state, state->dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.ZoneAirHumRat) + state->dataMstBal->RhoVaporAirIn(2)) * - PsyCpAirFnW(thisZoneHB.ZoneAirHumRat)); + ((PsyRhoAirFnPbTdbW(*state, state->dataEnvrn->OutBaroPress, thisZoneHB.MAT, thisZoneHB.airHumRat) + state->dataMstBal->RhoVaporAirIn(2)) * + PsyCpAirFnW(thisZoneHB.airHumRat)); RoomAirNode = 1; InitRoomAirModelAFN(*state, ZoneNum, RoomAirNode); diff --git a/tst/EnergyPlus/unit/SecondaryDXCoils.unit.cc b/tst/EnergyPlus/unit/SecondaryDXCoils.unit.cc index 6b682e393fa..be3a005a437 100644 --- a/tst/EnergyPlus/unit/SecondaryDXCoils.unit.cc +++ b/tst/EnergyPlus/unit/SecondaryDXCoils.unit.cc @@ -162,7 +162,7 @@ TEST_F(EnergyPlusFixture, SecondaryDXHeatingCoilSingleSpeed_Test4) state->dataLoopNodes->Node.allocate(2); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 10.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.003; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.003; state->dataDXCoils->DXCoil(DXCoilNum).SecCoilAirFlow = 1.0; state->dataDXCoils->DXCoil(DXCoilNum).CompressorPartLoadRatio = 1.0; state->dataDXCoils->DXCoil(DXCoilNum).SecCoilRatedSHR = 1.0; @@ -243,7 +243,7 @@ TEST_F(EnergyPlusFixture, SecondaryDXHeatingCoilMultiSpeed_Test5) state->dataLoopNodes->Node.allocate(2); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 10.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.003; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.003; state->dataDXCoils->DXCoil(DXCoilNum).MSSecCoilAirFlow(1) = 1.0; state->dataDXCoils->DXCoil(DXCoilNum).MSSecCoilAirFlow(2) = 1.0; state->dataDXCoils->DXCoil(DXCoilNum).MSSecCoilSHRFT(1) = 0; diff --git a/tst/EnergyPlus/unit/ThermalChimney.unit.cc b/tst/EnergyPlus/unit/ThermalChimney.unit.cc index 1e95d1cda1c..ddbecabb69c 100644 --- a/tst/EnergyPlus/unit/ThermalChimney.unit.cc +++ b/tst/EnergyPlus/unit/ThermalChimney.unit.cc @@ -1155,7 +1155,7 @@ TEST_F(EnergyPlusFixture, ThermalChimney_EMSAirflow_Test) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones); for (auto &thisZoneHB : state->dataZoneTempPredictorCorrector->zoneHeatBalance) { thisZoneHB.MAT = 23.0; - thisZoneHB.ZoneAirHumRat = 0.01; + thisZoneHB.airHumRat = 0.01; } state->dataEnvrn->OutBaroPress = 101325.0; state->dataEnvrn->StdRhoAir = Psychrometrics::PsyRhoAirFnPbTdbW(*state, state->dataEnvrn->OutBaroPress, 20.0, 0.0); diff --git a/tst/EnergyPlus/unit/ThermalComfort.unit.cc b/tst/EnergyPlus/unit/ThermalComfort.unit.cc index 164841c7dc3..3aecea23a40 100644 --- a/tst/EnergyPlus/unit/ThermalComfort.unit.cc +++ b/tst/EnergyPlus/unit/ThermalComfort.unit.cc @@ -724,7 +724,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortFanger) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf = 25.0; state->dataHeatBal->ZoneMRT(1) = 26.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf = 0.00529; // 0.002 to 0.006 + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf = 0.00529; // 0.002 to 0.006 CalcThermalComfortFanger(*state); @@ -733,7 +733,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortFanger) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf = 26.0; state->dataHeatBal->ZoneMRT(1) = 27.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf = 0.00529; // 0.002 to 0.006 + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf = 0.00529; // 0.002 to 0.006 CalcThermalComfortFanger(*state); @@ -742,7 +742,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortFanger) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf = 27.0; state->dataHeatBal->ZoneMRT(1) = 28.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf = 0.00529; // 0.002 to 0.006 + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf = 0.00529; // 0.002 to 0.006 CalcThermalComfortFanger(*state); @@ -751,7 +751,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortFanger) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf = 25.0; state->dataHeatBal->ZoneMRT(1) = 26.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf = 0.00629; // 0.002 to 0.006 + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf = 0.00629; // 0.002 to 0.006 CalcThermalComfortFanger(*state); @@ -1052,7 +1052,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortASH55) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf = AirTemp; state->dataHeatBal->ZoneMRT(1) = RadTemp; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf = Psychrometrics::PsyWFnTdbRhPb( + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf = Psychrometrics::PsyWFnTdbRhPb( *state, state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf, RelHum, state->dataEnvrn->OutBaroPress); state->dataScheduleMgr->Schedule(1).CurrentValue = ActMet * BodySurfaceArea * ThermalComfort::ActLevelConv; state->dataScheduleMgr->Schedule(2).CurrentValue = CloUnit; @@ -1617,7 +1617,7 @@ TEST_F(EnergyPlusFixture, ThermalComfort_CalcThermalComfortFanger_Correct_TimeSt EXPECT_NEAR(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAVComf, 14.863733439268286, 0.001); - EXPECT_NEAR(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvgComf, 0.010564839505489259, 0.0001); + EXPECT_NEAR(state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvgComf, 0.010564839505489259, 0.0001); EXPECT_NEAR(state->dataThermalComforts->ThermalComfortData(1).FangerPMV, -5.5896341565108720, 0.001); diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index cc2d2f8e8eb..def1044d0ac 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -16166,7 +16166,7 @@ Dimensionless; !- Output Unit Type state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); auto &zoneHeatBalance = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1); - zoneHeatBalance.ZoneAirHumRat = zoneNode.HumRat; + zoneHeatBalance.airHumRat = zoneNode.HumRat; zoneHeatBalance.MAT = zoneNode.Temp; state->dataZoneEquip->ZoneEquipList(1).EquipIndex(1) = 1; state->dataZoneEnergyDemand->CurDeadBandOrSetback.allocate(1); @@ -16222,7 +16222,7 @@ Dimensionless; !- Output Unit Type mixedAirNode.Temp = 24.18496; // 24C db mixedAirNode.HumRat = 0.0121542; // 17C wb mixedAirNode.Enthalpy = Psychrometrics::PsyHFnTdbW(mixedAirNode.Temp, mixedAirNode.HumRat); - zoneHeatBalance.ZoneAirHumRat = state->dataLoopNodes->Node(1).HumRat; + zoneHeatBalance.airHumRat = state->dataLoopNodes->Node(1).HumRat; zoneHeatBalance.MAT = state->dataLoopNodes->Node(1).Temp; zoneSysEnergyDemand.RemainingOutputRequired = -397.162; @@ -17610,7 +17610,7 @@ TEST_F(ZoneUnitarySysTest, UnitarySystemModel_MultiSpeedDXCoilsDirectSolutionTes state->dataLoopNodes->Node(1).Enthalpy = Psychrometrics::PsyHFnTdbW(state->dataLoopNodes->Node(1).Temp, state->dataLoopNodes->Node(1).HumRat); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = state->dataLoopNodes->Node(1).HumRat; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = state->dataLoopNodes->Node(1).HumRat; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = state->dataLoopNodes->Node(1).Temp; state->dataZoneEquip->ZoneEquipList(1).EquipIndex(1) = 1; state->dataZoneEnergyDemand->CurDeadBandOrSetback.allocate(1); diff --git a/tst/EnergyPlus/unit/WindowManager.unit.cc b/tst/EnergyPlus/unit/WindowManager.unit.cc index 523b5fffc40..1883bc2636d 100644 --- a/tst/EnergyPlus/unit/WindowManager.unit.cc +++ b/tst/EnergyPlus/unit/WindowManager.unit.cc @@ -213,7 +213,7 @@ TEST_F(EnergyPlusFixture, WindowFrameTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 0.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 0.0; state->dataHeatBal->ZoneMRT(1) = 0.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0; HeatBalanceManager::ManageHeatBalance(*state); @@ -249,8 +249,8 @@ TEST_F(EnergyPlusFixture, WindowFrameTest) state->dataSurface->SurfWinIRfromParentZone(winNum) = Constant::StefanBoltzmann * std::pow(T_in + Constant::KelvinConv, 4); state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = T_in; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.01; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.01; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.01; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.01; // initial guess temperatures int numTemps = 2 + 2 * state->dataConstruction->Construct(cNum).TotGlassLayers; @@ -544,8 +544,8 @@ TEST_F(EnergyPlusFixture, WindowManager_RefAirTempTest) state->dataHeatBal->Zone(1).IsControlled = true; state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.011; state->dataHeatBalSurf->SurfQdotRadHVACInPerArea.allocate(3); state->dataHeatBal->SurfWinQRadSWwinAbs.allocate(3, 1); @@ -2808,8 +2808,8 @@ TEST_F(EnergyPlusFixture, WindowManager_SrdLWRTest) state->dataHeatBal->Zone(1).IsControlled = true; state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.011; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.011; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.011; // initialize simple glazing adjustment ratio state->dataHeatBalSurf->SurfWinCoeffAdjRatio.allocate(3); @@ -7682,7 +7682,7 @@ TEST_F(EnergyPlusFixture, CFS_InteriorSolarDistribution_Test) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 0.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZTAV = 0.0; state->dataHeatBal->ZoneMRT(1) = 0.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.0; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.0; HeatBalanceManager::ManageHeatBalance(*state); @@ -7704,8 +7704,8 @@ TEST_F(EnergyPlusFixture, CFS_InteriorSolarDistribution_Test) } } state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRatAvg = 0.01; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.01; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRatAvg = 0.01; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.01; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = T_in; state->dataEnvrn->SOLCOS(1) = 0.84471127222777276; diff --git a/tst/EnergyPlus/unit/ZoneContaminantPredictorCorrector.unit.cc b/tst/EnergyPlus/unit/ZoneContaminantPredictorCorrector.unit.cc index d925a332faf..9aa175ca412 100644 --- a/tst/EnergyPlus/unit/ZoneContaminantPredictorCorrector.unit.cc +++ b/tst/EnergyPlus/unit/ZoneContaminantPredictorCorrector.unit.cc @@ -216,7 +216,7 @@ TEST_F(EnergyPlusFixture, ZoneContaminantPredictorCorrector_AddMDotOATest) state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node state->dataLoopNodes->Node(4).HumRat = 0.000; state->dataLoopNodes->Node(5).HumRat = 0.000; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 24.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MixingMassFlowZone = 0.0; @@ -346,7 +346,7 @@ TEST_F(EnergyPlusFixture, ZoneContaminantPredictorCorrector_CorrectZoneContamina state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node state->dataLoopNodes->Node(4).HumRat = 0.000; state->dataLoopNodes->Node(5).HumRat = 0.000; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 24.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MixingMassFlowZone = 0.0; @@ -515,11 +515,11 @@ TEST_F(EnergyPlusFixture, ZoneContaminantPredictorCorrector_MultiZoneCO2ControlT state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node state->dataLoopNodes->Node(4).HumRat = 0.000; state->dataLoopNodes->Node(5).HumRat = 0.000; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZT = 23.5; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZT = 24.5; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MixingMassFlowZone = 0.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MixingMassFlowZone = 0.0; @@ -701,11 +701,11 @@ TEST_F(EnergyPlusFixture, ZoneContaminantPredictorCorrector_MultiZoneGCControlTe state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node state->dataLoopNodes->Node(4).HumRat = 0.000; state->dataLoopNodes->Node(5).HumRat = 0.000; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZT = 24.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZT = 23.5; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.008; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.008; state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZT = 24.5; state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MixingMassFlowZone = 0.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MixingMassFlowZone = 0.0; diff --git a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc index 105c43aa237..1658532a985 100644 --- a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc +++ b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc @@ -401,11 +401,11 @@ TEST_F(EnergyPlusFixture, ZoneEquipmentManager_MultiCrossMixingTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).MAT = 23.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).MAT = 24.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).MAT = 25.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).ZoneAirHumRat = 0.001; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).ZoneAirHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(3).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(4).airHumRat = 0.001; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(5).airHumRat = 0.001; state->dataHeatBal->AirFlowFlag = true; state->dataScheduleMgr->Schedule(ScheduleManager::GetScheduleIndex(*state, "MIXINGAVAILSCHED")).CurrentValue = 1.0; @@ -4396,8 +4396,8 @@ TEST_F(EnergyPlusFixture, CalcAirFlowSimple_CO2andGCforRefrigerationDoorsTest) state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).MAT = 21.0; state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).MAT = 22.0; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).ZoneAirHumRat = 0.0021; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).ZoneAirHumRat = 0.0022; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(1).airHumRat = 0.0021; + state->dataZoneTempPredictorCorrector->zoneHeatBalance(2).airHumRat = 0.0022; state->dataHeatBal->TotRefDoorMixing = 1; state->dataHeatBal->TotMixing = 0; @@ -4711,7 +4711,7 @@ TEST_F(EnergyPlusFixture, CalcAirFlowSimple_WindAndStackArea) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(state->dataGlobal->NumOfZones); auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1); thisZoneHB.MAT = 21.0; - thisZoneHB.ZoneAirHumRat = 0.0021; + thisZoneHB.airHumRat = 0.0021; thisZoneHB.MixingMAT = 20.0; state->dataHeatBal->TotRefDoorMixing = 0; diff --git a/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc b/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc index bc7b325bc81..49c2b47d7b1 100644 --- a/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc +++ b/tst/EnergyPlus/unit/ZoneTempPredictorCorrector.unit.cc @@ -155,7 +155,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) state->dataHeatBal->ZoneIntGain.allocate(1); // Case 1 - All flows at the same humrat - thisZoneHB.ZoneW1 = 0.008; + thisZoneHB.W1 = 0.008; state->dataLoopNodes->Node(1).MassFlowRate = 0.01; // Zone inlet node 1 state->dataLoopNodes->Node(1).HumRat = 0.008; state->dataLoopNodes->Node(2).MassFlowRate = 0.02; // Zone inlet node 2 @@ -163,11 +163,11 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) state->dataZoneEquip->ZoneEquipConfig(1).ZoneExhBalanced = 0.0; state->dataLoopNodes->Node(3).MassFlowRate = 0.00; // Zone exhaust node 1 state->dataZoneEquip->ZoneEquipConfig(1).ZoneExh = state->dataLoopNodes->Node(3).MassFlowRate; - state->dataLoopNodes->Node(3).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(3).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node state->dataLoopNodes->Node(4).HumRat = 0.000; state->dataLoopNodes->Node(5).HumRat = 0.000; - thisZoneHB.ZoneAirHumRat = 0.008; + thisZoneHB.airHumRat = 0.008; thisZoneHB.OAMFL = 0.0; thisZoneHB.VAMFL = 0.0; thisZoneHB.EAMFL = 0.0; @@ -182,7 +182,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) EXPECT_NEAR(0.008, state->dataLoopNodes->Node(5).HumRat, 0.00001); // Case 2 - Unbalanced exhaust flow - thisZoneHB.ZoneW1 = 0.008; + thisZoneHB.W1 = 0.008; state->dataLoopNodes->Node(1).MassFlowRate = 0.01; // Zone inlet node 1 state->dataLoopNodes->Node(1).HumRat = 0.008; state->dataLoopNodes->Node(2).MassFlowRate = 0.02; // Zone inlet node 2 @@ -190,11 +190,11 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) state->dataZoneEquip->ZoneEquipConfig(1).ZoneExhBalanced = 0.0; state->dataLoopNodes->Node(3).MassFlowRate = 0.02; // Zone exhaust node 1 state->dataZoneEquip->ZoneEquipConfig(1).ZoneExh = state->dataLoopNodes->Node(3).MassFlowRate; - state->dataLoopNodes->Node(3).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(3).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(4).MassFlowRate = 0.01; // Zone return node - state->dataLoopNodes->Node(4).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(4).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(5).HumRat = 0.000; - thisZoneHB.ZoneAirHumRat = 0.008; + thisZoneHB.airHumRat = 0.008; thisZoneHB.OAMFL = 0.0; thisZoneHB.VAMFL = 0.0; thisZoneHB.EAMFL = 0.0; @@ -209,7 +209,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) EXPECT_NEAR(0.008, state->dataLoopNodes->Node(5).HumRat, 0.00001); // Case 3 - Balanced exhaust flow with proper source flow from mixing - thisZoneHB.ZoneW1 = 0.008; + thisZoneHB.W1 = 0.008; state->dataLoopNodes->Node(1).MassFlowRate = 0.01; // Zone inlet node 1 state->dataLoopNodes->Node(1).HumRat = 0.008; state->dataLoopNodes->Node(2).MassFlowRate = 0.02; // Zone inlet node 2 @@ -217,11 +217,11 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) state->dataZoneEquip->ZoneEquipConfig(1).ZoneExhBalanced = 0.02; state->dataLoopNodes->Node(3).MassFlowRate = 0.02; // Zone exhaust node 1 state->dataZoneEquip->ZoneEquipConfig(1).ZoneExh = state->dataLoopNodes->Node(3).MassFlowRate; - state->dataLoopNodes->Node(3).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(3).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(4).MassFlowRate = 0.03; // Zone return node - state->dataLoopNodes->Node(4).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(4).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(5).HumRat = 0.000; - thisZoneHB.ZoneAirHumRat = 0.008; + thisZoneHB.airHumRat = 0.008; thisZoneHB.OAMFL = 0.0; thisZoneHB.VAMFL = 0.0; thisZoneHB.EAMFL = 0.0; @@ -236,7 +236,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) EXPECT_NEAR(0.008, state->dataLoopNodes->Node(5).HumRat, 0.00001); // Case 4 - Balanced exhaust flow without source flow from mixing - thisZoneHB.ZoneW1 = 0.008; + thisZoneHB.W1 = 0.008; state->dataLoopNodes->Node(1).MassFlowRate = 0.01; // Zone inlet node 1 state->dataLoopNodes->Node(1).HumRat = 0.008; state->dataLoopNodes->Node(2).MassFlowRate = 0.02; // Zone inlet node 2 @@ -244,11 +244,11 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_CorrectZoneHumRatTest) state->dataZoneEquip->ZoneEquipConfig(1).ZoneExhBalanced = 0.02; state->dataLoopNodes->Node(3).MassFlowRate = 0.02; // Zone exhaust node 1 state->dataZoneEquip->ZoneEquipConfig(1).ZoneExh = state->dataLoopNodes->Node(3).MassFlowRate; - state->dataLoopNodes->Node(3).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(3).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(4).MassFlowRate = 0.01; // Zone return node - state->dataLoopNodes->Node(4).HumRat = thisZoneHB.ZoneW1; + state->dataLoopNodes->Node(4).HumRat = thisZoneHB.W1; state->dataLoopNodes->Node(5).HumRat = 0.000; - thisZoneHB.ZoneAirHumRat = 0.008; + thisZoneHB.airHumRat = 0.008; thisZoneHB.OAMFL = 0.0; thisZoneHB.VAMFL = 0.0; thisZoneHB.EAMFL = 0.0; @@ -516,7 +516,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_ReportingTest) int SetPointTempSchedIndex = state->dataZoneCtrls->TempControlledZone(HeatZoneNum).SchIndx_SingleHeatSetPoint; state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 20.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(HeatZoneNum).TotalOutputRequired = -1000.0; // cooling load - state->dataZoneTempPredictorCorrector->zoneHeatBalance(HeatZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(HeatZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(HeatZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; @@ -532,21 +532,21 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_ReportingTest) SetPointTempSchedIndex = state->dataZoneCtrls->TempControlledZone(HeatZoneNum).SchIndx_SingleHeatSetPoint; state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 21.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(HeatZoneNum).TotalOutputRequired = 1000.0; // heating load - state->dataZoneTempPredictorCorrector->zoneHeatBalance(HeatZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(HeatZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(HeatZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; SetPointTempSchedIndex = state->dataZoneCtrls->TempControlledZone(CoolZoneNum).SchIndx_SingleCoolSetPoint; state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 23.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CoolZoneNum).TotalOutputRequired = -3000.0; // cooling load - state->dataZoneTempPredictorCorrector->zoneHeatBalance(CoolZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(CoolZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CoolZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; SetPointTempSchedIndex = state->dataZoneCtrls->TempControlledZone(CoolHeatZoneNum).SchIndx_SingleHeatCoolSetPoint; state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 22.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CoolHeatZoneNum).TotalOutputRequired = -4000.0; // cooling load - state->dataZoneTempPredictorCorrector->zoneHeatBalance(CoolHeatZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(CoolHeatZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CoolHeatZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; @@ -555,7 +555,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_ReportingTest) SetPointTempSchedIndex = state->dataZoneCtrls->TempControlledZone(DualZoneNum).SchIndx_DualSetPointWDeadBandHeat; state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 20.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(DualZoneNum).TotalOutputRequired = 2500.0; // heating load - state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(DualZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; @@ -597,10 +597,10 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_ReportingTest) state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue = 25.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(DualZoneNum).TotalOutputRequired = 1000.0; // LoadToCoolingSetPoint = ( TempDepZnLd( ZoneNum ) * ( TempZoneThermostatSetPoint( ZoneNum ) ) - TempIndZnLd( ZoneNum ) ); - state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).TempDepZnLd = + state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).tempDepLoad = state->dataZoneEnergyDemand->ZoneSysEnergyDemand(DualZoneNum).TotalOutputRequired / state->dataScheduleMgr->Schedule(SetPointTempSchedIndex).CurrentValue; - state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).TempIndZnLd = 3500.0; // results in a cooling load + state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).tempIndLoad = 3500.0; // results in a cooling load CalcZoneAirTempSetPoints(*state); state->dataZoneTempPredictorCorrector->zoneHeatBalance(DualZoneNum).calcPredictedSystemLoad(*state, 1.0, DualZoneNum); @@ -979,7 +979,7 @@ TEST_F(EnergyPlusFixture, ZoneTempPredictorCorrector_calcZoneOrSpaceSums_SurfCon state->dataZoneTempPredictorCorrector->spaceHeatBalance.allocate(1); auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(ZoneNum); thisZoneHB.MAT = 24.0; - thisZoneHB.ZoneAirHumRat = 0.001; + thisZoneHB.airHumRat = 0.001; state->dataHeatBal->space.allocate(1); state->dataHeatBal->spaceIntGainDevices.allocate(1); @@ -1232,11 +1232,11 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) state->dataZoneTempPredictorCorrector->spaceHeatBalance.allocate(1); auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1); thisZoneHB.AirPowerCap = 2000; - thisZoneHB.TempDepZnLd = 1.0; - thisZoneHB.TempIndZnLd = 1.0; + thisZoneHB.tempDepLoad = 1.0; + thisZoneHB.tempIndLoad = 1.0; thisZoneHB.MAT = 20.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; state->dataZoneTempPredictorCorrector->NumOnOffCtrZone = 1; CalcZoneAirTempSetPoints(*state); @@ -1244,7 +1244,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) EXPECT_EQ(24.0, state->dataHeatBalFanSys->ZoneThermostatSetPointLo(1)); thisZoneHB.MAT = 23.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; state->dataZoneCtrls->TempControlledZone(1).HeatModeLast = true; CalcZoneAirTempSetPoints(*state); PredictSystemLoads(*state, false, false, 0.01); @@ -1258,7 +1258,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) state->dataZoneTempPredictorCorrector->SetPointSingleCooling(1).TempSchedIndex = 3; state->dataScheduleMgr->Schedule(3).CurrentValue = 26.0; thisZoneHB.MAT = 25.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; state->dataZoneCtrls->TempControlledZone(1).CoolModeLast = true; CalcZoneAirTempSetPoints(*state); @@ -1267,7 +1267,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) state->dataZoneCtrls->TempControlledZone(1).CoolModeLast = false; thisZoneHB.MAT = 27.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; CalcZoneAirTempSetPoints(*state); PredictSystemLoads(*state, false, false, 0.01); EXPECT_EQ(24.0, state->dataHeatBalFanSys->ZoneThermostatSetPointHi(1)); @@ -1279,7 +1279,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) state->dataZoneTempPredictorCorrector->SetPointSingleHeatCool(1).TempSchedIndex = 3; state->dataScheduleMgr->Schedule(3).CurrentValue = 24.0; thisZoneHB.MAT = 25.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; CalcZoneAirTempSetPoints(*state); PredictSystemLoads(*state, false, false, 0.01); @@ -1296,7 +1296,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) state->dataScheduleMgr->Schedule(2).CurrentValue = 22.0; state->dataScheduleMgr->Schedule(3).CurrentValue = 26.0; thisZoneHB.MAT = 25.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; state->dataZoneCtrls->TempControlledZone(1).CoolModeLast = true; state->dataZoneCtrls->TempControlledZone(1).HeatModeLast = true; @@ -1308,7 +1308,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) // DualSetPointWithDeadBand : Adjust heating setpoint thisZoneHB.MAT = 21.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; CalcZoneAirTempSetPoints(*state); PredictSystemLoads(*state, false, false, 0.01); EXPECT_EQ(24.0, state->dataHeatBalFanSys->ZoneThermostatSetPointLo(1)); @@ -1317,7 +1317,7 @@ TEST_F(EnergyPlusFixture, SetPointWithCutoutDeltaT_test) // DualSetPointWithDeadBand : Adjust cooling setpoint state->dataZoneCtrls->TempControlledZone(1).CoolModeLast = true; thisZoneHB.MAT = 27.0; - thisZoneHB.ZoneT1 = thisZoneHB.MAT; + thisZoneHB.T1 = thisZoneHB.MAT; CalcZoneAirTempSetPoints(*state); PredictSystemLoads(*state, false, false, 0.01); EXPECT_EQ(22.0, state->dataHeatBalFanSys->ZoneThermostatSetPointLo(1)); @@ -1359,8 +1359,8 @@ TEST_F(EnergyPlusFixture, TempAtPrevTimeStepWithCutoutDeltaT_test) state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(1); auto &thisZoneHB = state->dataZoneTempPredictorCorrector->zoneHeatBalance(1); thisZoneHB.AirPowerCap = 2000; - thisZoneHB.TempDepZnLd = 1.0; - thisZoneHB.TempIndZnLd = 1.0; + thisZoneHB.tempDepLoad = 1.0; + thisZoneHB.tempIndLoad = 1.0; thisZoneHB.MAT = 20.0; thisZoneHB.XMPT = 23.0; From b800be6ed869a3d7f5237bbf6e9f36e6ed845267 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Mon, 28 Aug 2023 16:06:50 -0500 Subject: [PATCH 067/161] Revise exhaust control flow ratio calling for Exhaust System Controls. --- src/EnergyPlus/ExhaustAirSystemManager.cc | 2 +- src/EnergyPlus/ExhaustAirSystemManager.hh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/ExhaustAirSystemManager.cc b/src/EnergyPlus/ExhaustAirSystemManager.cc index 55c200018de..ab75c0be2d0 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.cc +++ b/src/EnergyPlus/ExhaustAirSystemManager.cc @@ -695,7 +695,7 @@ namespace ExhaustAirSystemManager { Real64 Tin = state.dataZoneTempPredictorCorrector->zoneHeatBalance(thisExhCtrl.ZoneNum).ZT; Real64 thisExhCtrlAvailScheVal = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.AvailScheduleNum); - if (FlowRatio != 0.0) { + if (FlowRatio >= 0.0) { thisExhCtrl.BalancedFlow *= FlowRatio; thisExhCtrl.UnbalancedFlow *= FlowRatio; diff --git a/src/EnergyPlus/ExhaustAirSystemManager.hh b/src/EnergyPlus/ExhaustAirSystemManager.hh index 0d2ef96c4c0..9ffd895afb3 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.hh +++ b/src/EnergyPlus/ExhaustAirSystemManager.hh @@ -133,7 +133,7 @@ namespace ExhaustAirSystemManager { void SimZoneHVACExhaustControls(EnergyPlusData &state); - void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio = 1.0); + void CalcZoneHVACExhaustControl(EnergyPlusData &state, int const ZoneHVACExhaustControlNum, Real64 const FlowRatio = -1.0); void SizeExhaustSystem(EnergyPlusData &state, int const exhSysNum); From dfaaacb6f28e44c2e0c237725a9de5659c52a4f3 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 28 Aug 2023 16:24:22 -0500 Subject: [PATCH 068/161] Delete unused vars in ATMixer --- src/EnergyPlus/SingleDuct.hh | 148 +++++++---------------------------- 1 file changed, 29 insertions(+), 119 deletions(-) diff --git a/src/EnergyPlus/SingleDuct.hh b/src/EnergyPlus/SingleDuct.hh index 4a5ed056643..68cfbf9d25d 100644 --- a/src/EnergyPlus/SingleDuct.hh +++ b/src/EnergyPlus/SingleDuct.hh @@ -279,52 +279,33 @@ namespace SingleDuct { { // Members // Input data - std::string Name; // name of unit - int MixerType; // type of inlet mixer, 1 = inlet side, 2 = supply side - int ZoneHVACUnitType; // type of Zone HVAC unit. ZoneHVAC:WaterToAirHeatPump =1, ZoneHVAC:FourPipeFanCoil = 2 - std::string ZoneHVACUnitName; // name of Zone HVAC unit - int SecInNode; // secondary air inlet node number - int PriInNode; // primary air inlet node number - int MixedAirOutNode; // mixed air outlet node number - int ZoneInletNode; // zone inlet node that ultimately receives air from this mixer - Real64 ZoneAirTemp; // zone air in temp - Real64 ZoneAirHumRat; // zone air in hum rat - Real64 ZoneAirEnthalpy; // zone air in enthalpy - Real64 ZoneAirPressure; // zone air in pressure - Real64 ZoneAirMassFlowRate; // zone air in mass flow rate - Real64 DOASTemp; // DOAS air in temp - Real64 DOASHumRat; // DOAS air in hum rat - Real64 DOASEnthalpy; // DOAS air in enthalpy - Real64 DOASPressure; // DOAS air in pressure - Real64 DOASMassFlowRate; // DOAS air in mass flow rate - Real64 MixedAirTemp; // mixed air in temp - Real64 MixedAirHumRat; // mixed air in hum rat - Real64 MixedAirEnthalpy; // mixed air in enthalpy - Real64 MixedAirPressure; // mixed air in pressure - Real64 MixedAirMassFlowRate; // mixed air in mass flow rate - Real64 MassFlowRateMaxAvail; // maximum air mass flow rate allowed through component - int ADUNum; // index of Air Distribution Unit - int TermUnitSizingIndex; // Pointer to TermUnitSizing and TermUnitFinalZoneSizing data for this terminal unit - bool OneTimeInitFlag; // true if one-time inits should be done - bool OneTimeInitFlag2; // true if more one-time inits should be done - int CtrlZoneInNodeIndex; // which controlled zone inlet node number corresponds with this unit - int ZoneNum; - bool NoOAFlowInputFromUser; // avoids OA calculation if no input specified by user - int OARequirementsPtr; // - Index to DesignSpecification:OutdoorAir object - int AirLoopNum; // System sizing adjustments - Real64 DesignPrimaryAirVolRate; // System sizing adjustments, filled from design OA spec using sizing mode flags. - DataZoneEquipment::PerPersonVentRateMode OAPerPersonMode; // mode for how per person rates are determined, DCV or design. - bool printWarning; // flag to print warnings only once - // Default Constructor - AirTerminalMixerData() - : MixerType(0), ZoneHVACUnitType(0), SecInNode(0), PriInNode(0), MixedAirOutNode(0), ZoneInletNode(0), ZoneAirTemp(0.0), - ZoneAirHumRat(0.0), ZoneAirEnthalpy(0.0), ZoneAirPressure(0.0), ZoneAirMassFlowRate(0.0), DOASTemp(0.0), DOASHumRat(0.0), - DOASEnthalpy(0.0), DOASPressure(0.0), DOASMassFlowRate(0.0), MixedAirTemp(0.0), MixedAirHumRat(0.0), MixedAirEnthalpy(0.0), - MixedAirPressure(0.0), MixedAirMassFlowRate(0.0), MassFlowRateMaxAvail(0.0), ADUNum(0), TermUnitSizingIndex(0), OneTimeInitFlag(true), - OneTimeInitFlag2(true), CtrlZoneInNodeIndex(0), ZoneNum(0), NoOAFlowInputFromUser(true), OARequirementsPtr(0), AirLoopNum(0), - DesignPrimaryAirVolRate(0.0), OAPerPersonMode(DataZoneEquipment::PerPersonVentRateMode::Invalid), printWarning(true) - { - } + std::string Name; // name of unit + int MixerType = 0; // type of inlet mixer, 1 = inlet side, 2 = supply side + int ZoneHVACUnitType = 0; // type of Zone HVAC unit. ZoneHVAC:WaterToAirHeatPump =1, ZoneHVAC:FourPipeFanCoil = 2 + std::string ZoneHVACUnitName; // name of Zone HVAC unit + int SecInNode = 0; // secondary air inlet node number + int PriInNode = 0; // primary air inlet node number + int MixedAirOutNode = 0; // mixed air outlet node number + int ZoneInletNode = 0; // zone inlet node that ultimately receives air from this mixer + Real64 MixedAirTemp = 0.0; // mixed air in temp + Real64 MixedAirHumRat = 0.0; // mixed air in hum rat + Real64 MixedAirEnthalpy = 0.0; // mixed air in enthalpy + Real64 MixedAirPressure = 0.0; // mixed air in pressure + Real64 MixedAirMassFlowRate = 0.0; // mixed air in mass flow rate + Real64 MassFlowRateMaxAvail = 0.0; // maximum air mass flow rate allowed through component + int ADUNum = 0; // index of Air Distribution Unit + int TermUnitSizingIndex = 0; // Pointer to TermUnitSizing and TermUnitFinalZoneSizing data for this terminal unit + bool OneTimeInitFlag = true; // true if one-time inits should be done + bool OneTimeInitFlag2 = true; // true if more one-time inits should be done + int CtrlZoneInNodeIndex = 0; // which controlled zone inlet node number corresponds with this unit + int ZoneNum = 0; + bool NoOAFlowInputFromUser = true; // avoids OA calculation if no input specified by user + int OARequirementsPtr = 0; // - Index to DesignSpecification:OutdoorAir object + int AirLoopNum = 0; // System sizing adjustments + Real64 DesignPrimaryAirVolRate = 0.0; // System sizing adjustments, filled from design OA spec using sizing mode flags. + DataZoneEquipment::PerPersonVentRateMode OAPerPersonMode = + DataZoneEquipment::PerPersonVentRateMode::Invalid; // mode for how per person rates are determined, DCV or design. + bool printWarning = true; // flag to print warnings only once void InitATMixer(EnergyPlusData &state, bool FirstHVACIteration); }; @@ -377,7 +358,7 @@ namespace SingleDuct { struct SingleDuctData : BaseGlobalStruct { - Array1D SysATMixer; + EPVector SysATMixer; Array1D sd_airterminal; std::unordered_map SysUniqueNames; Array1D_bool CheckEquipName; @@ -456,78 +437,7 @@ struct SingleDuctData : BaseGlobalStruct void clear_state() override { - this->SysATMixer.deallocate(); - this->sd_airterminal.deallocate(); - this->SysUniqueNames.clear(); - this->CheckEquipName.deallocate(); - this->NumATMixers = 0; - this->NumConstVolSys = 0; - this->NumSDAirTerminal = 0; - this->GetInputFlag = true; - this->GetATMixerFlag = true; - this->InitSysFlag = true; - this->InitATMixerFlag = true; - this->ZoneEquipmentListChecked = false; - - this->SysNumGSI = 0; // The Sys that you are currently loading input into - this->SysIndexGSI = 0; // The Sys that you are currently loading input into - this->NumVAVSysGSI = 0; - this->NumNoRHVAVSysGSI = 0; - this->NumVAVVSGSI = 0; - this->NumCBVAVSysGSI = 0; - this->NumNoRHCBVAVSysGSI = 0; - this->NumAlphasGSI = 0; - this->NumNumsGSI = 0; - this->NumCVNoReheatSysGSI = 0; - this->MaxNumsGSI = 0; // Maximum number of numeric input fields - this->MaxAlphasGSI = 0; // Maximum number of alpha input fields - this->TotalArgsGSI = 0; // Total number of alpha and numeric arguments = max for a - this->CoilInTempSS = 0.0; - this->DesCoilLoadSS = 0.0; - this->DesZoneHeatLoadSS = 0.0; - this->ZoneDesTempSS = 0.0; - this->ZoneDesHumRatSS = 0.0; - this->CoilWaterInletNodeSS = 0; - this->CoilWaterOutletNodeSS = 0; - this->CoilSteamInletNodeSS = 0; - this->CoilSteamOutletNodeSS = 0; - this->DummyWaterIndexSS = 1; - this->UserInputMaxHeatAirVolFlowRateSS = 0.0; // user input for MaxHeatAirVolFlowRate - this->MinAirMassFlowRevActSVAV = 0.0; // minimum air mass flow rate used in "reverse action" air mass flow rate calculation - this->MaxAirMassFlowRevActSVAV = 0.0; // maximum air mass flow rate used in "reverse action" air mass flow rate calculation - this->ZoneTempSCBVAV = 0.0; // zone air temperature [C] - this->MaxHeatTempSCBVAV = 0.0; // maximum supply air temperature [C] - this->MassFlowReqSCBVAV = 0.0; // air mass flow rate required to meet the coil heating load [W] - this->MassFlowActualSCBVAV = 0.0; // air mass flow rate actually used [W] - this->QZoneMaxSCBVAV = 0.0; // maximum zone heat addition rate given constraints of MaxHeatTemp and max / - this->MinMassAirFlowSCBVAV = 0.0; // the air flow rate during heating for normal acting damper - this->QZoneMax2SCBVAV = 0.0; // temporary variable - this->QZoneMax3SCBVAV = 0.0; // temporary variable - this->TAirMaxSCV = 0.0; // Maximum zone supply air temperature [C] - this->QMaxSCV = 0.0; // Maximum heat addition rate imposed by the max zone supply air temperature [W] - this->ZoneTempSCV = 0.0; // Zone temperature [C] - this->QMax2SCV = 0.0; - this->SysNumSATM = 0; - this->PriMassFlowRateCATM = 0.0; - this->PriEnthalpyCATM = 0.0; - this->PriHumRatCATM = 0.0; - this->PriTempCATM = 0.0; - this->SecAirMassFlowRateCATM = 0.0; - this->SecAirEnthalpyCATM = 0.0; - this->SecAirHumRatCATM = 0.0; - this->SecAirTempCATM = 0.0; - this->MixedAirMassFlowRateCATM = 0.0; - this->MixedAirEnthalpyCATM = 0.0; - this->MixedAirHumRatCATM = 0.0; - this->MixedAirTempCATM = 0.0; - - this->ZoneTempSDAT = 0.0; // zone air temperature [C] - this->MaxHeatTempSDAT = 0.0; // maximum supply air temperature [C] - this->MaxDeviceAirMassFlowReheatSDAT = 0.0; // air mass flow rate required to meet the coil heating load [W] - this->MassFlowReqToLimitLeavingTempSDAT = 0.0; // air mass flow rate actually used [W] - this->QZoneMaxRHTempLimitSDAT = 0.0; // maximum zone heat addition rate given constraints of MaxHeatTemp and max - this->MinMassAirFlowSDAT = 0.0; // the air flow rate during heating for normal acting damper - this->QZoneMax2SDAT = 0.0; // temporary variable + new (this) SingleDuctData(); } }; From d5e5689f0b9da6574b643c63fb75d56154bdecd0 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Mon, 28 Aug 2023 23:13:36 -0500 Subject: [PATCH 069/161] Added check and reset for negative schedule values on flow fractions for zone exhaust controls. --- src/EnergyPlus/ExhaustAirSystemManager.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/EnergyPlus/ExhaustAirSystemManager.cc b/src/EnergyPlus/ExhaustAirSystemManager.cc index ab75c0be2d0..3134ddaeb2a 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.cc +++ b/src/EnergyPlus/ExhaustAirSystemManager.cc @@ -713,11 +713,17 @@ namespace ExhaustAirSystemManager { Real64 FlowFrac = 0.0; if (thisExhCtrl.MinExhFlowFracScheduleNum > 0) { FlowFrac = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.ExhaustFlowFractionScheduleNum); + if (FlowFrac < 0.0) { + FlowFrac = 0.0; + } } Real64 MinFlowFrac = 0.0; if (thisExhCtrl.MinExhFlowFracScheduleNum > 0) { MinFlowFrac = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.MinExhFlowFracScheduleNum); + if (MinFlowFrac < 0.0) { + MinFlowFrac = 0.0; + } } if (FlowFrac < MinFlowFrac) { From 98e76627db4cb9f3c710e747e317394a1c4cd3ef Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 29 Aug 2023 00:03:36 -0500 Subject: [PATCH 070/161] Zone Exhaust Controls added warning messaged for resetting negative schedule values. --- src/EnergyPlus/ExhaustAirSystemManager.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/EnergyPlus/ExhaustAirSystemManager.cc b/src/EnergyPlus/ExhaustAirSystemManager.cc index 3134ddaeb2a..6d17a69adca 100644 --- a/src/EnergyPlus/ExhaustAirSystemManager.cc +++ b/src/EnergyPlus/ExhaustAirSystemManager.cc @@ -714,6 +714,9 @@ namespace ExhaustAirSystemManager { if (thisExhCtrl.MinExhFlowFracScheduleNum > 0) { FlowFrac = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.ExhaustFlowFractionScheduleNum); if (FlowFrac < 0.0) { + ShowWarningError( + state, format("Exhaust Flow Fraction Schedule value is negative for Zone Exhaust Control Named: {};", thisExhCtrl.Name)); + ShowContinueError(state, "Reset value to zero and continue the simulation."); FlowFrac = 0.0; } } @@ -722,6 +725,10 @@ namespace ExhaustAirSystemManager { if (thisExhCtrl.MinExhFlowFracScheduleNum > 0) { MinFlowFrac = ScheduleManager::GetCurrentScheduleValue(state, thisExhCtrl.MinExhFlowFracScheduleNum); if (MinFlowFrac < 0.0) { + ShowWarningError( + state, + format("Minimum Exhaust Flow Fraction Schedule value is negative for Zone Exhaust Control Named: {};", thisExhCtrl.Name)); + ShowContinueError(state, "Reset value to zero and continue the simulation."); MinFlowFrac = 0.0; } } From a32294ea4ac77ad7b814fcbb809412d19fb9f9c3 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 29 Aug 2023 07:43:11 -0500 Subject: [PATCH 071/161] Unit test. --- tst/EnergyPlus/unit/ExhaustSystem.unit.cc | 319 ++++++++++++++++++++++ 1 file changed, 319 insertions(+) diff --git a/tst/EnergyPlus/unit/ExhaustSystem.unit.cc b/tst/EnergyPlus/unit/ExhaustSystem.unit.cc index abebfb21d0a..1ce647be21b 100644 --- a/tst/EnergyPlus/unit/ExhaustSystem.unit.cc +++ b/tst/EnergyPlus/unit/ExhaustSystem.unit.cc @@ -62,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -71,6 +72,7 @@ #include #include #include +#include #include #include @@ -582,3 +584,320 @@ TEST_F(EnergyPlusFixture, ZoneExhaustCtrl_CheckSupplyNode_Test) EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); EXPECT_EQ(state->dataErrTracking->LastSevereError, "GetExhaustControlInput: ZoneHVAC:ExhaustControl="); } + +TEST_F(EnergyPlusFixture, ZoneExhaustCtrl_Test_CalcZoneHVACExhaustControl_Call) +{ + std::string const idf_objects = delimited_string({ + "! Zone1,", + "! Zone2,", + "! Zone3,", + "! Zone4,", + + "AirLoopHVAC:ZoneMixer,", + " Mixer1, !-Name", + " Central_ExhFan_1_Inlet, !-Outlet Node Name", + " Zone1 Exhaust Outlet Node, !-Inlet 1 Node Name", + " Zone4 Exhaust Outlet Node; !-Inlet 2 Node Name", + + "AirLoopHVAC:ZoneMixer,", + " Mixer2, !-Name", + " Central_ExhFan_2_Inlet, !-Outlet Node Name", + " Zone2 Exhaust Outlet Node, !-Inlet 1 Node Name", + " Zone3 Exhaust Outlet Node; !-Inlet 2 Node Name", + + "Fan:SystemModel,", + " CentralExhaustFan1, !- Name", + " Omni_Sched, !- Availability Schedule Name", + " Central_ExhFan_1_Inlet, !- Air Inlet Node Name", + " Central_ExhFan_1_Outlet, !- Air Outlet Node Name", + " 1, !- Design Maximum Air Flow Rate {m3/s}", + " Discrete, !- Speed Control Method", + " 0.2, !- Electric Power Minimum Flow Rate Fraction", + " 10, !- Design Pressure Rise {Pa}", + " 0.9, !- Motor Efficiency", + " 1, !- Motor In Air Stream Fraction", + " autosize, !- Design Electric Power Consumption {W}", + " PowerPerFlowPerPressure, !- Design Power Sizing Method", + " , !- Electric Power Per Unit Flow Rate {W/(m3/s)}", + " 1.66667, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)}", + " 0.7, !- Fan Total Efficiency", + " , !- Electric Power Function of Flow Fraction Curve Name", + " , !- Night Ventilation Mode Pressure Rise {Pa}", + " , !- Night Ventilation Mode Flow Fraction", + " , !- Motor Loss Zone Name", + " , !- Motor Loss Radiative Fraction", + " General, !- End-Use Subcategory", + " 1; !- Number of Speeds", + + "Fan:SystemModel,", + " CentralExhaustFan2, !- Name", + " Omni_Sched, !- Availability Schedule Name", + " Central_ExhFan_2_Inlet, !- Air Inlet Node Name", + " Central_ExhFan_2_Outlet, !- Air Outlet Node Name", + " 1, !- Design Maximum Air Flow Rate {m3/s}", + " Discrete, !- Speed Control Method", + " 0.2, !- Electric Power Minimum Flow Rate Fraction", + " 15, !- Design Pressure Rise {Pa}", + " 0.9, !- Motor Efficiency", + " 1, !- Motor In Air Stream Fraction", + " autosize, !- Design Electric Power Consumption {W}", + " PowerPerFlowPerPressure, !- Design Power Sizing Method", + " , !- Electric Power Per Unit Flow Rate {W/(m3/s)}", + " 1.66667, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)}", + " 0.7, !- Fan Total Efficiency", + " , !- Electric Power Function of Flow Fraction Curve Name", + " , !- Night Ventilation Mode Pressure Rise {Pa}", + " , !- Night Ventilation Mode Flow Fraction", + " , !- Motor Loss Zone Name", + " , !- Motor Loss Radiative Fraction", + " General, !- End-Use Subcategory", + " 1; !- Number of Speeds", + + "AirLoopHVAC:ExhaustSystem,", + " Central Exhaust 1, !-Name", + " Mixer1, !-AirLoopHVAC:ZoneMixer Name", + " Fan:SystemModel, !-Fan Object Type", + " CentralExhaustFan1; !-Fan Name", + + "AirLoopHVAC:ExhaustSystem,", + " Central Exhaust 2, !-Name", + " Mixer2, !-AirLoopHVAC:ZoneMixer Name", + " Fan:SystemModel, !-Fan Object Type", + " CentralExhaustFan2; !-Fan Name", + + "ZoneHVAC:ExhaustControl,", + " Zone1 Exhaust Control, !-Name", + " HVACOperationSchd1, !- Availability Schedule Name", + " Zone1, !- Zone Name", + " Zone1 Exhaust Node, !- Inlet Node Name", + " Zone1 Exhaust Oulet Node, !- Outlet Node Name", + " 0.1, !- Design Flow Rate {m3/s}", + " Scheduled, !- Flow Control Type (Scheduled, or FollowSupply)", + " Zone1Exh Exhaust Flow Frac Sched, !- Flow Fraction Schedule Name", + " , !- Supply Node or NodeList Name (used with FollowSupply control type)", + " , !- Minimum Zone Temperature Limit Schedule Name", + " Zone1Exh Min Exhaust Flow Frac Sched, !- Minimum Flow Fraction Schedule Name", + " Zone1Exh FlowBalancedSched; !-Balanced Exhaust Fraction Schedule Name", + + "ZoneHVAC:ExhaustControl,", + " Zone2 Exhaust Control, !-Name", + " HVACOperationSchd, !- Availability Schedule Name", + " Zone2, !- Zone Name", + " Zone2 Exhaust Node, !- Inlet Node Name", + " Zone2 Exhaust Outlet Node, !- Outlet Node Name", + " autosize, !- Design Flow Rate {m3/s}", + " Scheduled,", + " , !- Flow Fraction Schedule Name", + " ,", + " , !- Minimum Zone Temperature Limit Schedule Name", + " Zone2Exh Min Exhaust Flow Frac Sched, !- Minimum Flow Fraction Schedule Name", + " Zone2Exh FlowBalancedSched; !-Balanced Exhaust Fraction Schedule Name", + + "ZoneHVAC:ExhaustControl,", + " Zone3 Exhaust Control, !-Name", + " HVACOperationSchd, !- Availability Schedule Name", + " Zone3, !- Zone Name", + " Zone3 Exhaust Node, !- Inlet Node Name", + " Zone3 Exhaust Outlet Node, !- Outlet Node Name", + " 0.3, !- Design Flow Rate {m3/s}", + " Scheduled, !- Flow Control Type (Scheduled, or FollowSupply)", + " Zone3Exh Exhaust Flow Frac Sched, !- Flow Fraction Schedule Name", + " , !- Supply Node or NodeList Name (used with FollowSupply control type)", + " , !- Minimum Zone Temperature Limit Schedule Name", + " Zone3Exh Min Exhaust Flow Frac Sched, !- Minimum Flow Fraction Schedule Name", + " Zone3Exh FlowBalancedSched; !-Balanced Exhaust Fraction Schedule Name", + + "ZoneHVAC:ExhaustControl,", + " Zone4 Exhaust Control, !-Name", + " HVACOperationSchd, !- Availability Schedule Name", + " Zone4, !- Zone Name", + " Zone4 Exhaust Node, !- Inlet Node Name", + " Zone4 Exhaust Outlet Node, !- Outlet Node Name", + " 0.4, !- Design Flow Rate {m3/s}", + " Scheduled, !- Flow Control Type (Scheduled, or FollowSupply)", + " Zone4Exh Exhaust Flow Frac Sched, !- Flow Fraction Schedule Name", + " , !- Supply Node or NodeList Name (used with FollowSupply control type)", + " Zone4_MinZoneTempLimitSched, !- Minimum Zone Temperature Limit Schedule Name", + " Zone4Exh Min Exhaust Flow Frac Sched, !- Minimum Flow Fraction Schedule Name", + " Zone4Exh FlowBalancedSched; !-Balanced Exhaust Fraction Schedule Name", + + "Schedule:Compact,", + " Omni_Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " HVACOperationSchd, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " HVACOperationSchd1, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,0.0; !- Field 3", + + "Schedule:Compact,", + " Zone1Exh Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " Zone1_MinZoneTempLimitSched, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 20; !- Field 3", + + "Schedule:Compact,", + " Zone1Exh Min Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone1Exh_FlowBalancedSched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone2Exh Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " Zone2_MinZoneTempLimitSched, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 20; !- Field 3", + + "Schedule:Compact,", + " Zone2Exh Min Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone2Exh_FlowBalancedSched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone3Exh Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " Zone3_MinZoneTempLimitSched, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 20; !- Field 3", + + "Schedule:Compact,", + " Zone3Exh Min Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone3Exh_FlowBalancedSched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone4Exh Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1.0; !- Field 3", + + "Schedule:Compact,", + " Zone4_MinZoneTempLimitSched, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 20; !- Field 3", + + "Schedule:Compact,", + " Zone4Exh Min Exhaust Flow Frac Sched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "Schedule:Compact,", + " Zone4Exh_FlowBalancedSched, !- Name", + " Fraction, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 0.2; !- Field 3", + + "ScheduleTypeLimits,", + " Fraction, !- Name", + " 0.0, !- Lower Limit Value", + " 1.0, !- Upper Limit Value", + " CONTINUOUS; !- Numeric Type", + }); + + // Preset some elements + state->dataHeatBal->Zone.allocate(4); + state->dataHeatBal->Zone(1).Name = "ZONE1"; + state->dataHeatBal->Zone(2).Name = "ZONE2"; + state->dataHeatBal->Zone(3).Name = "ZONE3"; + state->dataHeatBal->Zone(4).Name = "ZONE4"; + + state->dataSize->FinalZoneSizing.allocate(4); + state->dataSize->FinalZoneSizing(2).MinOA = 0.25; + + ASSERT_TRUE(process_idf(idf_objects)); + ScheduleManager::ProcessScheduleInput(*state); + + // Call the processing codes + ExhaustAirSystemManager::GetZoneExhaustControlInput(*state); + ExhaustAirSystemManager::GetExhaustAirSystemInput(*state); + + // Test out function call + int ExhaustControlNum = 1; + auto &thisExhCtrl1 = state->dataZoneEquip->ZoneExhaustControlSystem(1); + + int zoneNum = thisExhCtrl1.ZoneNum; + state->dataZoneTempPredictorCorrector->zoneHeatBalance.allocate(zoneNum); + + auto &thisExhInlet = state->dataLoopNodes->Node(thisExhCtrl1.InletNodeNum); + auto &thisExhOutlet = state->dataLoopNodes->Node(thisExhCtrl1.OutletNodeNum); + + // Manually set inlet flow rate to non-zero + thisExhInlet.MassFlowRate = 0.25; + + EXPECT_NEAR(thisExhInlet.MassFlowRate, 0.25, 1e-5); + + // If default call was made correctly, the inlet flow should be reset to zero + ExhaustAirSystemManager::CalcZoneHVACExhaustControl(*state, ExhaustControlNum); + + EXPECT_NEAR(thisExhInlet.MassFlowRate, 0.0, 1e-5); + EXPECT_NEAR(thisExhOutlet.MassFlowRate, 0.0, 1e-5); + EXPECT_NEAR(thisExhCtrl1.BalancedFlow, 0.0, 1e-5); + EXPECT_NEAR(thisExhCtrl1.UnbalancedFlow, 0.0, 1e-5); +} From a3be34bafb95074d9b65780bc5e90b8bc1aea40d Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 29 Aug 2023 11:19:08 -0500 Subject: [PATCH 072/161] Uses constexpr for angle tolerances cosntant values. --- src/EnergyPlus/SurfaceGeometry.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 41a40d746f1..70a2aece73a 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -7677,10 +7677,12 @@ namespace SurfaceGeometry { int Found; int AlphaOffset; // local temp var std::string Roughness; - int ThisSurf; // do loop counter - Real64 AvgAzimuth; // temp for error checking - Real64 AvgTilt; // temp for error checking - int SurfID; // local surface "pointer" + int ThisSurf; // do loop counter + Real64 AvgAzimuth; // temp for error checking + Real64 AvgTilt; // temp for error checking + constexpr Real64 AZITOL = 15.0; // Degree Azimuth Angle Tolerance + constexpr Real64 TILTOL = 10.0; // Degree Tilt Angle Tolerance + int SurfID; // local surface "pointer" bool IsBlank; bool ErrorInName; auto &cCurrentModuleObject = state.dataIPShortCut->cCurrentModuleObject; @@ -7878,14 +7880,14 @@ namespace SurfaceGeometry { surfaceArea; // Autodesk:F2C++ Functions handle array subscript usage for (ThisSurf = 1; ThisSurf <= state.dataHeatBal->ExtVentedCavity(Item).NumSurfs; ++ThisSurf) { SurfID = state.dataHeatBal->ExtVentedCavity(Item).SurfPtrs(ThisSurf); - if (General::rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > 15.0) { + if (General::rotAzmDiffDeg(state.dataSurface->Surface(SurfID).Azimuth, AvgAzimuth) > AZITOL) { ShowWarningError(state, format("{}=\"{}, Surface {} has Azimuth different from others in the associated group.", cCurrentModuleObject, state.dataHeatBal->ExtVentedCavity(Item).Name, state.dataSurface->Surface(SurfID).Name)); } - if (std::abs(state.dataSurface->Surface(SurfID).Tilt - AvgTilt) > 10.0) { + if (std::abs(state.dataSurface->Surface(SurfID).Tilt - AvgTilt) > TILTOL) { ShowWarningError(state, format("{}=\"{}, Surface {} has Tilt different from others in the associated group.", cCurrentModuleObject, From 748ca0659bf770d66e233cc231cd192a0f5a4c87 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 29 Aug 2023 11:26:30 -0500 Subject: [PATCH 073/161] rotAzmDiffDeg(): changed from passing-by-constant-reference to passing-by-value. --- src/EnergyPlus/General.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/General.cc b/src/EnergyPlus/General.cc index 46360edd5b7..0efa6426672 100644 --- a/src/EnergyPlus/General.cc +++ b/src/EnergyPlus/General.cc @@ -1407,7 +1407,7 @@ void findReportPeriodIdx(EnergyPlusData &state, } } -Real64 rotAzmDiffDeg(Real64 const &AzmA, Real64 const &AzmB) +Real64 rotAzmDiffDeg(Real64 AzmA, Real64 AzmB) { // This function takes two (azimuth) angles in Degree(s), // and returns the rotational angle difference in Degree(s). From 4a559a2df3a9a8bd9f63eb03b5686e30523ad8a7 Mon Sep 17 00:00:00 2001 From: jcyuan Date: Tue, 29 Aug 2023 11:57:28 -0500 Subject: [PATCH 074/161] rotAzmDiffDeg() header file General.hh changes for changing from passing-by-constant-reference to passing-by-value. --- src/EnergyPlus/General.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/General.hh b/src/EnergyPlus/General.hh index 7b8ec1d7fd3..1cedd3bd53b 100644 --- a/src/EnergyPlus/General.hh +++ b/src/EnergyPlus/General.hh @@ -248,7 +248,7 @@ namespace General { int nReportPeriods, Array1D_bool &inReportPeriodFlags); - Real64 rotAzmDiffDeg(Real64 const &AzmA, Real64 const &AzmB); + Real64 rotAzmDiffDeg(Real64 AzmA, Real64 AzmB); inline Real64 epexp(const Real64 numerator, const Real64 denominator) { From 68995abb02622d331c4c567ebaad92503010f84c Mon Sep 17 00:00:00 2001 From: Jason Glazer Date: Tue, 29 Aug 2023 14:27:10 -0500 Subject: [PATCH 075/161] Fix to 9241 related to accumulation of values to leap day --- src/EnergyPlus/WeatherManager.cc | 3 ++- src/EnergyPlus/WeatherManager.hh | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/WeatherManager.cc b/src/EnergyPlus/WeatherManager.cc index 4051c7ce412..8958e7aba36 100644 --- a/src/EnergyPlus/WeatherManager.cc +++ b/src/EnergyPlus/WeatherManager.cc @@ -854,6 +854,7 @@ namespace WeatherManager { } if (state.dataEnvrn->CurrentYearIsLeapYear) { ActEndDayOfMonth(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; + state.dataWeatherManager->EndDayOfMonthWithLeapDay(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; } state.dataWeatherManager->UseDaylightSaving = state.dataWeatherManager->Environment(state.dataWeatherManager->Envrn).UseDST; state.dataWeatherManager->UseSpecialDays = state.dataWeatherManager->Environment(state.dataWeatherManager->Envrn).UseHolidays; @@ -1894,7 +1895,7 @@ namespace WeatherManager { } state.dataEnvrn->EndYearFlag = false; - if (state.dataEnvrn->DayOfMonth == state.dataWeatherManager->EndDayOfMonth(state.dataEnvrn->Month)) { + if (state.dataEnvrn->DayOfMonth == state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataEnvrn->Month)) { state.dataEnvrn->EndMonthFlag = true; state.dataEnvrn->EndYearFlag = (state.dataEnvrn->Month == 12); } diff --git a/src/EnergyPlus/WeatherManager.hh b/src/EnergyPlus/WeatherManager.hh index 21560b0c3b4..1bb34dd429d 100644 --- a/src/EnergyPlus/WeatherManager.hh +++ b/src/EnergyPlus/WeatherManager.hh @@ -974,6 +974,7 @@ struct WeatherManagerData : BaseGlobalStruct Array1D Interpolation; // Interpolation values based on Number of Time Steps in Hour NOLINT(cert-err58-cpp) Array1D SolarInterpolation; // Solar Interpolation values based on Number of Time Steps in Hour NOLINT(cert-err58-cpp) Array1D_int EndDayOfMonth; // NOLINT(cert-err58-cpp) + Array1D_int EndDayOfMonthWithLeapDay; // end day of the month including Feb 29 for leap years instead of Feb 28 int LeapYearAdd; // Set during environment if leap year is active (adds 1 to number days in Feb) bool DatesShouldBeReset; // True when weekdays should be reset bool StartDatesCycleShouldBeReset; // True when start dates on repeat should be reset @@ -1284,6 +1285,7 @@ struct WeatherManagerData : BaseGlobalStruct DaylightSavingIsActive(false), WFAllowsLeapYears(false), curSimDayForEndOfRunPeriod(0), Envrn(0), NumOfEnvrn(0), NumEPWTypExtSets(0), NumWPSkyTemperatures(0), RptIsRain(0), RptIsSnow(0), RptDayType(0), HrAngle(0.0), SolarAltitudeAngle(0.0), SolarAzimuthAngle(0.0), HorizIRSky(0.0), TimeStepFraction(0.0), NumSPSiteScheduleNamePtrs(0), EndDayOfMonth(12, {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}), + EndDayOfMonthWithLeapDay(12, {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}), LeapYearAdd(0), DatesShouldBeReset(false), StartDatesCycleShouldBeReset(false), Jan1DatesShouldBeReset(false), RPReadAllWeatherData(false) { } From 9a487bda36c7bc13d63c7aedccccdf6dc2857b08 Mon Sep 17 00:00:00 2001 From: Jason Glazer Date: Tue, 29 Aug 2023 15:28:39 -0500 Subject: [PATCH 076/161] Remove other temporary arrays that adjusted for the end of the month related to leap year --- src/EnergyPlus/WeatherManager.cc | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/EnergyPlus/WeatherManager.cc b/src/EnergyPlus/WeatherManager.cc index 8958e7aba36..650f79fed2f 100644 --- a/src/EnergyPlus/WeatherManager.cc +++ b/src/EnergyPlus/WeatherManager.cc @@ -844,8 +844,6 @@ namespace WeatherManager { (state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodDesign)) { std::string kindOfRunPeriod = state.dataWeatherManager->Environment(state.dataWeatherManager->Envrn).cKindOfEnvrn; state.dataEnvrn->RunPeriodEnvironment = state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodWeather; - Array1D_int ActEndDayOfMonth(12); - ActEndDayOfMonth = state.dataWeatherManager->EndDayOfMonth; state.dataEnvrn->CurrentYearIsLeapYear = state.dataWeatherManager->Environment(state.dataWeatherManager->Envrn).IsLeapYear; if (state.dataEnvrn->CurrentYearIsLeapYear && state.dataWeatherManager->WFAllowsLeapYears) { state.dataWeatherManager->LeapYearAdd = 1; @@ -853,7 +851,6 @@ namespace WeatherManager { state.dataWeatherManager->LeapYearAdd = 0; } if (state.dataEnvrn->CurrentYearIsLeapYear) { - ActEndDayOfMonth(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; state.dataWeatherManager->EndDayOfMonthWithLeapDay(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; } state.dataWeatherManager->UseDaylightSaving = state.dataWeatherManager->Environment(state.dataWeatherManager->Envrn).UseDST; @@ -1579,11 +1576,8 @@ namespace WeatherManager { int ActStartDay; // Actual Start Day of Month int ActEndMonth; // Actual End Month int ActEndDay; // Actual End Day of Month - Array1D_int ActEndDayOfMonth(12); bool ErrorsFound = false; - ActEndDayOfMonth = state.dataWeatherManager->EndDayOfMonth; - ActEndDayOfMonth(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; if (state.dataWeatherManager->DST.StDateType == DateType::MonthDay) { ActStartMonth = state.dataWeatherManager->DST.StMon; ActStartDay = state.dataWeatherManager->DST.StDay; @@ -1593,7 +1587,7 @@ namespace WeatherManager { ThisDay += 7; } ThisDay += 7 * (state.dataWeatherManager->DST.StDay - 1); - if (ThisDay > ActEndDayOfMonth(state.dataWeatherManager->DST.StMon)) { + if (ThisDay > state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->DST.StMon)) { ShowSevereError(state, format("{}Determining DST: DST Start Date, Nth Day of Month, not enough Nths", RoutineName)); ErrorsFound = true; } else { @@ -1602,7 +1596,7 @@ namespace WeatherManager { } } else { // LastWeekDayInMonth int ThisDay = state.dataWeatherManager->DST.StWeekDay - MonWeekDay(state.dataWeatherManager->DST.StMon) + 1; - while (ThisDay + 7 <= ActEndDayOfMonth(state.dataWeatherManager->DST.StMon)) { + while (ThisDay + 7 <= state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->DST.StMon)) { ThisDay += 7; } ActStartMonth = state.dataWeatherManager->DST.StMon; @@ -1618,7 +1612,7 @@ namespace WeatherManager { ThisDay += 7; } ThisDay += 7 * (state.dataWeatherManager->DST.EnDay - 1); - if (ThisDay > ActEndDayOfMonth(state.dataWeatherManager->DST.EnMon)) { + if (ThisDay >> state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->DST.EnMon)) { ActEndMonth = 0; // Suppress uninitialized warning ActEndDay = 0; // Suppress uninitialized warning ShowSevereError(state, format("{}Determining DST: DST End Date, Nth Day of Month, not enough Nths", RoutineName)); @@ -1629,7 +1623,7 @@ namespace WeatherManager { } } else { // LastWeekDayInMonth int ThisDay = state.dataWeatherManager->DST.EnWeekDay - MonWeekDay(state.dataWeatherManager->DST.EnMon) + 1; - while (ThisDay + 7 <= ActEndDayOfMonth(state.dataWeatherManager->DST.EnMon)) { + while (ThisDay + 7 <= state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->DST.EnMon)) { ThisDay += 7; } ActEndMonth = state.dataWeatherManager->DST.EnMon; @@ -1675,11 +1669,8 @@ namespace WeatherManager { static constexpr std::string_view RoutineName("SetSpecialDayDates: "); int JDay; - Array1D_int ActEndDayOfMonth(12); bool ErrorsFound = false; - ActEndDayOfMonth = state.dataWeatherManager->EndDayOfMonth; - ActEndDayOfMonth(2) = state.dataWeatherManager->EndDayOfMonth(2) + state.dataWeatherManager->LeapYearAdd; state.dataWeatherManager->SpecialDayTypes = 0; for (int i = 1; i <= state.dataWeatherManager->NumSpecialDays; ++i) { if (state.dataWeatherManager->SpecialDays(i).WthrFile && !state.dataWeatherManager->UseSpecialDays) continue; @@ -1710,7 +1701,7 @@ namespace WeatherManager { ThisDay += 7; } ThisDay += 7 * (state.dataWeatherManager->SpecialDays(i).Day - 1); - if (ThisDay > ActEndDayOfMonth(state.dataWeatherManager->SpecialDays(i).Month)) { + if (ThisDay > state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->SpecialDays(i).Month)) { ShowSevereError(state, format("{}Special Day Date, Nth Day of Month, not enough Nths, for SpecialDay={}", RoutineName, @@ -1723,7 +1714,7 @@ namespace WeatherManager { JDay = General::OrdinalDay(state.dataWeatherManager->SpecialDays(i).Month, ThisDay, state.dataWeatherManager->LeapYearAdd); } else { // LastWeekDayInMonth int ThisDay = state.dataWeatherManager->SpecialDays(i).WeekDay - MonWeekDay(state.dataWeatherManager->SpecialDays(i).Month) + 1; - while (ThisDay + 7 <= ActEndDayOfMonth(state.dataWeatherManager->SpecialDays(i).Month)) { + while (ThisDay + 7 <= state.dataWeatherManager->EndDayOfMonthWithLeapDay(state.dataWeatherManager->SpecialDays(i).Month)) { ThisDay += 7; } state.dataWeatherManager->SpecialDays(i).ActStMon = state.dataWeatherManager->SpecialDays(i).Month; @@ -2936,6 +2927,7 @@ namespace WeatherManager { if (hour == 1 && CurTimeStep == 1) { if (WMonth == 2 && WDay == 29 && (!state.dataEnvrn->CurrentYearIsLeapYear || !state.dataWeatherManager->WFAllowsLeapYears)) { state.dataWeatherManager->EndDayOfMonth(2) = 28; + state.dataWeatherManager->EndDayOfMonthWithLeapDay(2) = 28; SkipThisDay = true; TryAgain = true; ShowWarningError(state, "ReadEPlusWeatherForDay: Feb29 data encountered but will not be processed."); From 98d23e047bb92a555b7a5ec163fb9e3ccd13ccdf Mon Sep 17 00:00:00 2001 From: Jason Glazer Date: Tue, 29 Aug 2023 16:23:14 -0500 Subject: [PATCH 077/161] Fix SQL reporting portion of issue. Fix calls to createSQLTimeIndexRecord --- src/EnergyPlus/OutputProcessor.cc | 8 ++- src/EnergyPlus/SQLiteProcedures.cc | 6 ++- src/EnergyPlus/SQLiteProcedures.hh | 1 + tst/EnergyPlus/unit/OutputProcessor.unit.cc | 16 +++--- tst/EnergyPlus/unit/SQLite.unit.cc | 54 ++++++++++----------- 5 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 1c5fb2b04ea..94833c5a869 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -3219,6 +3219,7 @@ namespace OutputProcessor { state.dataGlobal->DayOfSim, state.dataEnvrn->CurEnvirNum, state.dataGlobal->CalendarYear, + state.dataEnvrn->CurrentYearIsLeapYear, Month, DayOfMonth, Hour, @@ -3247,6 +3248,7 @@ namespace OutputProcessor { state.dataGlobal->DayOfSim, state.dataEnvrn->CurEnvirNum, state.dataGlobal->CalendarYear, + state.dataEnvrn->CurrentYearIsLeapYear, Month, DayOfMonth, Hour, @@ -3272,6 +3274,7 @@ namespace OutputProcessor { state.dataGlobal->DayOfSim, state.dataEnvrn->CurEnvirNum, state.dataGlobal->CalendarYear, + state.dataEnvrn->CurrentYearIsLeapYear, Month, DayOfMonth, _, @@ -3290,6 +3293,7 @@ namespace OutputProcessor { state.dataGlobal->DayOfSim, state.dataEnvrn->CurEnvirNum, state.dataGlobal->CalendarYear, + state.dataEnvrn->CurrentYearIsLeapYear, Month); } break; @@ -3300,7 +3304,9 @@ namespace OutputProcessor { reportID, state.dataGlobal->DayOfSim, state.dataEnvrn->CurEnvirNum, - state.dataGlobal->CalendarYear); + state.dataGlobal->CalendarYear, + state.dataEnvrn->CurrentYearIsLeapYear + ); } break; default: diff --git a/src/EnergyPlus/SQLiteProcedures.cc b/src/EnergyPlus/SQLiteProcedures.cc index 01f9b3872d4..a53b7adc395 100644 --- a/src/EnergyPlus/SQLiteProcedures.cc +++ b/src/EnergyPlus/SQLiteProcedures.cc @@ -1602,6 +1602,7 @@ void SQLite::createSQLiteTimeIndexRecord(int const reportingInterval, int const cumlativeSimulationDays, int const curEnvirNum, int const simulationYear, + bool const curYearIsLeapYear, ObjexxFCL::Optional_int_const month, ObjexxFCL::Optional_int_const dayOfMonth, ObjexxFCL::Optional_int_const hour, @@ -1615,7 +1616,10 @@ void SQLite::createSQLiteTimeIndexRecord(int const reportingInterval, int intStartMinute = 0; int intervalInMinutes = 60; - static const std::vector lastDayOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + static std::vector lastDayOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + if (curYearIsLeapYear) { + lastDayOfMonth[2] = 29; + } switch (reportingInterval) { case LocalReportEach: diff --git a/src/EnergyPlus/SQLiteProcedures.hh b/src/EnergyPlus/SQLiteProcedures.hh index 956a83827a6..31218178c22 100644 --- a/src/EnergyPlus/SQLiteProcedures.hh +++ b/src/EnergyPlus/SQLiteProcedures.hh @@ -194,6 +194,7 @@ public: int const CumlativeSimulationDays, int const curEnvirNum, int const simulationYear, + bool const curYearIsLeapYear, ObjexxFCL::Optional_int_const Month = _, ObjexxFCL::Optional_int_const DayOfMonth = _, ObjexxFCL::Optional_int_const Hour = _, diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index fd2fc95fe16..0d9f97e7e20 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -775,7 +775,7 @@ namespace OutputProcessor { { state->dataGlobal->MinutesPerTimeStep = 10; - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); @@ -868,7 +868,7 @@ namespace OutputProcessor { TEST_F(SQLiteFixture, OutputProcessor_writeReportRealData) { - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); @@ -1032,7 +1032,7 @@ namespace OutputProcessor { TEST_F(SQLiteFixture, OutputProcessor_writeReportIntegerData) { - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); @@ -1117,7 +1117,7 @@ namespace OutputProcessor { TEST_F(SQLiteFixture, OutputProcessor_writeNumericData_1) { - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); @@ -1392,7 +1392,7 @@ namespace OutputProcessor { { InitializeOutput(*state); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); WriteMeterDictionaryItem(*state, ReportingFrequency::TimeStep, @@ -1826,7 +1826,7 @@ namespace OutputProcessor { { InitializeOutput(*state); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); // Store expected results std::vector> expectedReportDataDictionary; @@ -2383,7 +2383,7 @@ namespace OutputProcessor { TEST_F(SQLiteFixture, OutputProcessor_writeCumulativeReportMeterData) { - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); @@ -2419,7 +2419,7 @@ namespace OutputProcessor { TEST_F(SQLiteFixture, OutputProcessor_writeNumericData_2) { - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); diff --git a/tst/EnergyPlus/unit/SQLite.unit.cc b/tst/EnergyPlus/unit/SQLite.unit.cc index cd0bbaf6982..aec4886b273 100644 --- a/tst/EnergyPlus/unit/SQLite.unit.cc +++ b/tst/EnergyPlus/unit/SQLite.unit.cc @@ -293,13 +293,13 @@ TEST_F(SQLiteFixture, SQLiteProcedures_createSQLiteReportDictionaryRecord) TEST_F(SQLiteFixture, SQLiteProcedures_createSQLiteTimeIndexRecord) { state->dataSQLiteProcedures->sqlite->sqliteBegin(); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(3, 1, 1, 0, 2017, 1); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 0, 2017, 1, 1, 1, _, _, 0, "WinterDesignDay"); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 0, 2017, 1, 2, 2, _, _, 0, "SummerDesignDay"); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 0, 2017, 1, 1, 1, 60, 0, 0, "WinterDesignDay"); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-1, 1, 1, 0, 2017, 1, 2, 2, 60, 0, 0, "SummerDesignDay"); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-1, 1, 1, 1, 2017, 1, 3, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(3, 1, 1, 0, 2017, false, 1); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 0, 2017, false, 1, 1, 1, _, _, 0, "WinterDesignDay"); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 0, 2017, false, 1, 2, 2, _, _, 0, "SummerDesignDay"); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 0, 2017, false, 1, 1, 1, 60, 0, 0, "WinterDesignDay"); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-1, 1, 1, 0, 2017, false, 1, 2, 2, 60, 0, 0, "SummerDesignDay"); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-1, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, 0, "SummerDesignDay", true); auto result = queryResult("SELECT * FROM Time;", "Time"); state->dataSQLiteProcedures->sqlite->sqliteCommit(); @@ -321,7 +321,7 @@ TEST_F(SQLiteFixture, SQLiteProcedures_createSQLiteTimeIndexRecord) EXPECT_EQ(testResult6, result[6]); state->dataSQLiteProcedures->sqlite->sqliteBegin(); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-999, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(-999, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->sqliteCommit(); EXPECT_EQ("SQLite3 message, Illegal reportingInterval passed to CreateSQLiteTimeIndexRecord: -999\n", ss->str()); ss->str(std::string()); @@ -329,31 +329,31 @@ TEST_F(SQLiteFixture, SQLiteProcedures_createSQLiteTimeIndexRecord) EXPECT_EQ(7ul, result.size()); state->dataSQLiteProcedures->sqlite->sqliteBegin(); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, 3, 3, 60, 0, 0, _, true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, 3, 3, 60, _, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, 3, 3, _, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, 1, 3, 3, 60, 0, 0, _, true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, 1, 3, 3, 60, 0, 0, _, true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(3, 1, 1, 1, 2017, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, 0, _, true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, 3, 3, 60, _, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, 3, 3, _, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(0, 1, 1, 1, 2017, false, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, 0, _, true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, false, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, false, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(1, 1, 1, 1, 2017, false, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, 0, _, true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, false, 1, 3, 3, 60, 0, _, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, false, 1, 3, _, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, false, 1, _, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(2, 1, 1, 1, 2017, false, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(3, 1, 1, 1, 2017, false, _, 3, 3, 60, 0, 0, "SummerDesignDay", true); state->dataSQLiteProcedures->sqlite->sqliteCommit(); } TEST_F(SQLiteFixture, SQLiteProcedures_createSQLiteReportDataRecord) { state->dataSQLiteProcedures->sqlite->sqliteBegin(); - state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017); + state->dataSQLiteProcedures->sqlite->createSQLiteTimeIndexRecord(4, 1, 1, 0, 2017, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDictionaryRecord( 1, 1, "Zone", "Environment", "Site Outdoor Air Drybulb Temperature", 1, "C", 1, false); state->dataSQLiteProcedures->sqlite->createSQLiteReportDataRecord(1, 999.9); From 9c32efba15f5aa03fa71bea806a9d87254177307 Mon Sep 17 00:00:00 2001 From: Yujie Xu Date: Tue, 29 Aug 2023 16:29:12 -0700 Subject: [PATCH 078/161] Correct default value for Stop running case it should use the default value, default value of MaxHeatingCapacity and MaxCoolingCapacity are MaxCap, not 0. Otherwise when 0 is input to the function, it will make the TotCap 0. PipingCorrectionCooling default value is 1.0, not 0.0 --- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 0b52142271d..bf9637132a7 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -12204,13 +12204,13 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->OUFanPower = 0.0; this->VRFCondCyclingRatio = 0.0; - this->HeatingCapacity = 0.0; // Include the piping loss - this->PipingCorrectionHeating = 1.0; // 1 means no piping loss - state.dataHVACVarRefFlow->MaxHeatingCapacity(VRFCond) = 0.0; + this->HeatingCapacity = 0.0; // Include the piping loss + this->PipingCorrectionHeating = 1.0; // 1 means no piping loss + state.dataHVACVarRefFlow->MaxHeatingCapacity(VRFCond) = MaxCap; // yujie: default value is MaxCap = 1e+20, not 0 this->CoolingCapacity = 0.0; // Include the piping loss - this->PipingCorrectionCooling = 0.0; - state.dataHVACVarRefFlow->MaxCoolingCapacity(VRFCond) = 0.0; // for report + this->PipingCorrectionCooling = 1.0; + state.dataHVACVarRefFlow->MaxCoolingCapacity(VRFCond) = MaxCap; // for report this->CondensingTemp = state.dataEnvrn->OutDryBulbTemp; this->EvaporatingTemp = state.dataEnvrn->OutDryBulbTemp; From 4a6d80057af8d80c17149109a27f2d254672620c Mon Sep 17 00:00:00 2001 From: Jason Glazer Date: Wed, 30 Aug 2023 07:54:53 -0500 Subject: [PATCH 079/161] Fix the SQL bug right this time like C not fortran --- src/EnergyPlus/SQLiteProcedures.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/SQLiteProcedures.cc b/src/EnergyPlus/SQLiteProcedures.cc index a53b7adc395..20016536130 100644 --- a/src/EnergyPlus/SQLiteProcedures.cc +++ b/src/EnergyPlus/SQLiteProcedures.cc @@ -1618,7 +1618,7 @@ void SQLite::createSQLiteTimeIndexRecord(int const reportingInterval, static std::vector lastDayOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (curYearIsLeapYear) { - lastDayOfMonth[2] = 29; + lastDayOfMonth[1] = 29; } switch (reportingInterval) { From 8dbb9f059187793d01f04d2e06e8bc0487a1ce5a Mon Sep 17 00:00:00 2001 From: KarenWGard Date: Wed, 30 Aug 2023 09:28:36 -0400 Subject: [PATCH 080/161] allow output for Energy Meters for run periods of more than one year --- design/FY2021/NFP-NewSteamFeaturesPart1.md | 161 + design/FY2023/DivertingValvePlant.png | Bin 0 -> 108496 bytes design/FY2023/NFP-Space Sizing and HVAC.md | 589 + ...r Plant Support for Carbon Initiatives-.md | 610 + design/FY2023/SpaceHVACSchematic.png | Bin 0 -> 36414 bytes .../ChillerHeaterPlantLoopEIRSchematic.PNG | Bin 0 -> 126338 bytes .../ChillerHeaterPlantLoopEIRSchematic.docx | Bin 0 -> 138191 bytes doc/engineering-reference/media/DHRU_diag.png | Bin 0 -> 58781 bytes doc/engineering-reference/media/HW_reset.png | Bin 0 -> 22652 bytes .../media/ASHP_Plant.png | Bin 0 -> 30462 bytes doc/input-output-reference/media/HW_reset.png | Bin 0 -> 22652 bytes src/EnergyPlus/OutputProcessor.cc | 23 +- src/EnergyPlus/OutputReportPredefined.cc | 8 + src/EnergyPlus/Plant/EquipAndOperations.cc | 1708 +++ testfiles/5ZoneAirCooledWithSpacesHVAC.idf | 3859 +++++ testfiles/PlantLoadProfileSteam.idf | 397 + ...fice-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf | 11817 ++++++++++++++++ ...ice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam.idf | 10360 ++++++++++++++ ...honPlugin1ZoneUncontrolledTrackHistory.idf | 526 + ...thonPlugin1ZoneUncontrolledTrackHistory.py | 85 + ...eamSystemAutoSize_DistrictHeatingSteam.idf | 3526 +++++ third_party/CLI/CLI11.hpp | 10278 ++++++++++++++ third_party/CLI/LICENSE | 25 + third_party/CLI/README.md | 5 + .../unit/CommandLineInterface.unit.cc | 441 + .../unit/EquipAndOperations.unit.cc | 435 + 26 files changed, 44842 insertions(+), 11 deletions(-) create mode 100644 design/FY2021/NFP-NewSteamFeaturesPart1.md create mode 100644 design/FY2023/DivertingValvePlant.png create mode 100644 design/FY2023/NFP-Space Sizing and HVAC.md create mode 100644 design/FY2023/NFP_Chiller Plant Support for Carbon Initiatives-.md create mode 100644 design/FY2023/SpaceHVACSchematic.png create mode 100644 doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.PNG create mode 100644 doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.docx create mode 100644 doc/engineering-reference/media/DHRU_diag.png create mode 100644 doc/engineering-reference/media/HW_reset.png create mode 100644 doc/input-output-reference/media/ASHP_Plant.png create mode 100644 doc/input-output-reference/media/HW_reset.png create mode 100644 src/EnergyPlus/Plant/EquipAndOperations.cc create mode 100644 testfiles/5ZoneAirCooledWithSpacesHVAC.idf create mode 100644 testfiles/PlantLoadProfileSteam.idf create mode 100644 testfiles/PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf create mode 100644 testfiles/PlantLoopHeatPump_EIR_LargeOffice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam.idf create mode 100644 testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.idf create mode 100644 testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.py create mode 100644 testfiles/SteamSystemAutoSize_DistrictHeatingSteam.idf create mode 100644 third_party/CLI/CLI11.hpp create mode 100644 third_party/CLI/LICENSE create mode 100644 third_party/CLI/README.md create mode 100644 tst/EnergyPlus/unit/CommandLineInterface.unit.cc create mode 100644 tst/EnergyPlus/unit/EquipAndOperations.unit.cc diff --git a/design/FY2021/NFP-NewSteamFeaturesPart1.md b/design/FY2021/NFP-NewSteamFeaturesPart1.md new file mode 100644 index 00000000000..812f357844a --- /dev/null +++ b/design/FY2021/NFP-NewSteamFeaturesPart1.md @@ -0,0 +1,161 @@ +Implement steam features: Part 1 +================ + +**Dareum Nam, NREL** + + - Initial NFP Original Date: 12/3/2020 + - Final NFP Revision Date: 8/22/2023 + +## Justification for New Feature ## + +It is common for university campuses and cities like New York to use steam to heat hot water loops. Often, steam energy is transferred at the building to a hot water system via a heat exchanger. Currently, EnergyPlus users can make both steam and hot water systems, but cannot link them together. This forces modelers to use HW boilers/systems to approximate the steam systems, which isn’t accurate and reduces confidence in the energy model. The request for a steam to water heat exchanger came from Bractlet. Also, there have been several upvotes on the new feature request regarding steam to water heat exchanger from EnergyPlus Github. +In addition, the current EnergyPlus does not allow to use of district heating steam (except for `SteamEquipment`) and `LoadProfile:Plant` in a steam loop. +This PR enables EnergyPlus to simulate `DistrictHeatingSteam`, and `LoadProfile:Plant` in a steam loop. (`HeatExchanger:SteamToWater` is going to be available in Part 2.) + +## E-mail and Conference Call Conclusions ## + +EnergyPlus Technicalities Call on 2/24/2021 +- We only have one phase of steam plant fluid modeling. There is a lot of room for improvement and basic validation of the current steam plant. +- If we are going to add more complexity to remove assumptions, we need new ways to find those values; for example, how do we calculate the quality if we want to remove the quality 0 & 1 assumption? +- New systems could use the current assumption for now. And if CoolProp is implemented, the steam systems can be renewed with an enthalpy-based system. + +EnergyPlus Iteration Call on 2/2/2022 +- Instead of a separate object (PlantLoadProfile:Steam), a few optional input fields for a steam loop should be added to the current object (PlantLoadProfile). +- As for DistrictHeating, separate object should be fine since steam and water use different source factors. + +EnergyPlus Technicalities Call on 2/9/2022 +- Currently, there is `steam` as a resource type. This should be changed to `DistrictHeatingSteam`. +- Current `DistrictHeating` should be `DistrictHeatingWater`. +- In IDD and input parts, `DistrictHeating:Water` and `DistrictHeating:Steam` should be used. +- As for meter names, `DistrictHeatingWater` and `DistrictHeatingSteam` are better than `DistrictHeating:Water` and `DistrictHeating:Steam` because full meter names are a combination of resource type, end-use, etc. which are joined by colons so another colon would be confusing. +- Keep these `DistrictHeatingWater` and `DistrictHeatingSteam` separate for output report since hot water and steam basically have different source factors and emission factors. +- `SteamEquipment` should go on the same meter as this `DistrictHeatingSteam` +- As for Steam to Water Heat Exchanger, we stick with two explicit objects because it's better from the user standpoint. + +## Overview ## + +The current steam loop in EnergyPlus has five objects: steam boiler, steam pipe, steam to air coil, steam baseboard radiator, and condensate pump. The steam loop has several assumptions that help simplify loop complexity and increase usability. + +1. Steam side of the loop operates on constant saturation pressure of steam + +2. Water side (condensate) of the loop operates at atmospheric pressure + +3. Steam loop is to operate in saturated conditions, and no superheated condition + +4. Steam loop is assumed to have no transportation losses by friction and heat transfer with surroundings so that it maintains the quality of steam throughout the system constant value of 0 or 1 + +5. Boiler operation is assumed to generate steam at a quality equal to 1 every time and steam enters the coils at boiler outlet conditions + +6. Steam coils are designed with steam traps, which only allow condensed steam to leave the coil; hence the steam always condenses and leaves the coil at a quality of 0 + +These assumptions are applied to the new objects: `LoadProfile:Plant` in a steam loop, and `DistrictHeatingSteam`. If CoolProp is implemented in the future, the steam systems can be renewed with an enthalpy-based system. + +## Approach ## + +1. `LoadProfile:Plant` in a steam loop : +The current LoadProfile:Plant calculates the outlet water temperature based on the inlet water temperature from the plant loop and user inputs for the scheduled plant load and the requested flow rate. +In the new LoadProfile:Plant, there are three additional input fields: Plant Loop Fluid Type (Water or steam); Degree of SubCooling (optional input for steam loop); and Degree of Loop SubCooling (optional input for steam loop). The new LoadProfile:Plant in a steam loop calculates the steam outlet mass flow rate based on the scheduled plant load and user inputs of degree of subcooling, because the inlet steam temperature and the outlet steam temperature before the steam trap are fixed to saturation temperature according to the assumption. + +2. `DistrictHeating:Steam` : +The current DistrictHeating or DistrictCooling calculates the output capacity required from the inlet temperature to the setpoint temperature for the loop with the given mass flow rate in Watts. +The DistrictHeatingSteam calculates the required output capacity based on the latent heat at the given saturation temperature. +The current object name and meter names of DistrictHeating are changed to DistrictHeatingWater. + + +## Testing/Validation/Data Sources ## + +1. Standard unit tests are used to verify the new modules. +2. Test performance of the new modules with example test files. + +## Input Description ## + +```sh +LoadProfile:Plant, + \memo Used to simulate a scheduled plant loop demand profile. Load and flow rate are + \memo specified using schedules. Positive values are heating loads, and negative values are + \memo cooling loads. The actual load met is dependent on the performance of the supply + \memo loop components. Optional inputs for steam loop. + A1 , \field Name + \required-field + \type alpha + \reference-class-name validBranchEquipmentTypes + \reference validBranchEquipmentNames + A2 , \field Inlet Node Name + \required-field + \type node + A3 , \field Outlet Node Name + \required-field + \type node + A4 , \field Load Schedule Name + \required-field + \type object-list + \object-list ScheduleNames + \note Schedule values are load in [W] + N1 , \field Peak Flow Rate + \required-field + \type real + \units m3/s + \ip-units gal/min + A5 , \field Flow Rate Fraction Schedule Name + \required-field + \type object-list + \object-list ScheduleNames + A6 , \field Plant Loop Fluid Type + \required-field + \type choice + \key Water + \key Steam + \default Water + N2 , \field Degree of SubCooling + \note This field is used only when Plant Loop Fluid Type=Steam. + \units C + \minimum 1.0 + \default 5.0 + N3 ; \field Degree of Loop SubCooling + \note This field is used only when Plant Loop Fluid Type=Steam. + \units C + \minimum 10.0 + \default 20.0 +``` + +```sh +DistrictHeatingSteam, + \memo Centralized source of Steam, such as a district heating system. + A1 , \field Name + \required-field + \reference-class-name validPlantEquipmentTypes + \reference validPlantEquipmentNames + \reference-class-name validBranchEquipmentTypes + \reference-class-name validCondenserEquipmentTypes + \reference validCondenserEquipmentNames + \reference validBranchEquipmentNames + A2 , \field Steam Inlet Node Name + \required-field + \type node + A3 , \field Steam Outlet Node Name + \required-field + \type node + N1 , \field Nominal Capacity + \autosizable + \units W + \minimum 0.0 + A4 ; \field Capacity Fraction Schedule Name + \note Schedule values are multiplied by Nominal Capacity for current capacity + \type object-list + \object-list ScheduleNames +``` + +## Example File and Transition Changes ## + +- New example files for each module will be included. +- Transition + - The current object name of DistrictHeating are changed to DistrictHeating:Water. + - The current meter names of DistrictHeating are changed to DistrictHeatingWater, and Steam are changed to DistrictHeatingSteam. + - Output Variables name of DistrictCooling and DistrictHeating are changed. + +## References ## + +- Engineering Reference, EnergyPlus™ Version 22.1.0 Documentation +- Çengel, Yunus A., Robert H. Turner, and John M. Cimbala. 2008. Fundamentals of thermal-fluid sciences. Boston: McGraw-Hill. +- Rahul J. Chillar. 2005. Development and implementation of a steam loop in the building energy simulation program EnergyPlus. University of Illinois at Urbana-Champaign, Master Thesis + diff --git a/design/FY2023/DivertingValvePlant.png b/design/FY2023/DivertingValvePlant.png new file mode 100644 index 0000000000000000000000000000000000000000..81c036682d52e47dd5762e0627d55aff1c70818b GIT binary patch literal 108496 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 ZoneSizing; // Data for zone sizing (all data, all design) + EPVector FinalZoneSizing; // Final data for zone sizing including effects + Array2D CalcZoneSizing; // Data for zone sizing (all data) + EPVector CalcFinalZoneSizing; // Final data for zone sizing (calculated only) +``` + +The main calculation flow for Zone sizing is: + +* `SizingManager::ManageSizing` + * Get sizing inputs (`GetOARequirements . . . GetPlantSizingInput`). + * Loop over sizing environments and days + ``` + UpdateZoneSizing(state, Constant::CallIndicator::BeginDay); + Loop over hours and timesteps + ManageWeather(state); + UpdateSysSizing(state, Constant::CallIndicator::DuringDay); + ManageHeatBalance(state); + UpdateZoneSizing(state, Constant::CallIndicator::EndDay); + UpdateZoneSizing(state, Constant::CallIndicator::EndZoneSizingCalc); + ``` + * Repeat (with a pulse) if zone component loads report is requested. + * `ZoneEquipmentManager::UpdateZoneSizing` (where all the work is done.) + * `case Constant::CallIndicator::BeginDay:` + * Do some initializations on `CalcZoneSizing` + * `case Constant::CallIndicator::DuringDay:` + * Called from `HVACManager` + * save the results of the ideal zone component calculation in the CalcZoneSizing sequence variables + * Works on `ZoneSizing` and `CalcZoneSizing` + * `case Constant::CallIndicator::EndDay:` + * Compute moving averages + * Save values at peak heating and cooling + * Works on `CalcZoneSizing` and `CalcFinalZoneSizing` + * `case Constant::CallIndicator::EndZoneSizingCalc:` + * Apply EMS overrides + * Output sizing results from `CalcFinalZoneSizing` + * Move sizing data into final sizing array according to sizing method + * Works on `CalcZoneSizing`, `CalcFinalZoneSizing`, `ZoneSizing`, and `FinalZoneSizing` + * Lots going on in here. + * Each case block has one or more zone loops + * Move the guts of each loop to a separate function + * Pass in the pertinent zone or space arrays as function parameters + * Add a section to collect space results to the zone level + * When doing Space sizing, which arrays are really needed? + * All four arrays will be needed for Space `SpaceSizing`, `CalcSpaceSizing`, `CalcFinalSpaceSizing`, and `FinalSpaceSizing` + * It's possible that only `FinalZoneSizing` is needed at the zone level. But will need to search the code to see if any of the other zone sizing arrays might be accessed elsewhere outside of the zone sizing calcs. + +### HVAC ### + +The main calculation flow for Zone and Space HVAC in `HVACManager:ManageHVAC` is as follows, with notes about changes required for Space-HVAC. + +* `ZoneTempPredictorCorrector::ManageZoneAirUpdates(... GetZoneSetPoints)` + * `CalcZoneAirTempSetPoints` + * Add Space-level thermostats +* `ZoneTempPredictorCorrector::ManageZoneAirUpdates(... PredictStep)` + * `PredictSystemLoads` + * Add Space-level thermostats. + * Space-level predicted loads are already implemented. + * Some "TODO: For Now" comments need to be replaced with full Space-level assignments +* `SimHVAC` + * `SetPointManager::ManageSetPoints(state);` + * `SimSelectedEquipment` + * `SimAirServingZones::ManageAirLoops` + * `ZoneEquipmentManager::ManageZoneEquipment` + * Add functions here to distribute zone-level airflows and non-air HVAC equipment output to Spaces + * `PlantManager::ManagePlantLoops` +* `ZoneTempPredictorCorrector::ManageZoneAirUpdates(... CorrectStep)` + * `correctZoneAirTemps` + * Space-level corrections for air temps and humidity are already implemented. + * Some "TODO: For Now" comments need to be replaced with full Space-level assignments + + + diff --git a/design/FY2023/NFP_Chiller Plant Support for Carbon Initiatives-.md b/design/FY2023/NFP_Chiller Plant Support for Carbon Initiatives-.md new file mode 100644 index 00000000000..72298d399d5 --- /dev/null +++ b/design/FY2023/NFP_Chiller Plant Support for Carbon Initiatives-.md @@ -0,0 +1,610 @@ +Chiller Plant Support for Carbon Initiatives +================ + +**Richard Raustad** + +**University of Central Florida, Florida Solar Energy Center** + + - Original Date: Apr 24, 2023 + - Modified Date: May 5, 2023 (update changes to feature) + +*Preface:* + +This new feature is a request provided by Trane North America. The plant configuration(s) described herein are currently deployed at several locations in the NE US. The Trane team has invested several months of development for this new feature and the following discussion is a result of that work. + +*Acknowledgments:* + + - Nagappan Chidambaram, Trane North America, provided coordination of EnergyPlus engine design with 3rd party expectations
+ - Ronnie Moffitt, Trane North America, provided a detailed description of chiller heater heat pump performance
+- Robert Coleman, Trane North America, provided an overview of advanced plant dispatch and controls
+- Lawrence Scheier, S.E.I Associates, model development coordination with historic methods +- Brent Griffith, Trane consultant, provided design of plant supervisory controls
+- Richard Raustad, FSEC, provide enhancements to existing HeatPump:PlantLoop:EIR objects
+ +## Justification for Feature Update + +The push for higher HVAC system efficiency and decarbonization has led to HVAC systems with new designs for hot and cold water plants that use heat pumps to serve both plants. Manufacturers, building owners and operators, and design professionals request improved tools to model these advanced plant configurations for todays HVAC systems. + +From a historical perspective, chilled water plants have traditionally used thermal storage to minimize building peak demand to help utility companies delay construction of new power plants. Current trends are now using thermal storage as a pathway for heat recovery and improved HVAC system plant efficiency. A water plant utilizing heat pumps could make ice during early morning or late evening hours when heating is required and burn that ice during the day to offset cooling loads. These plants would use high efficiency heat pumps and optimized plant configurations that cannot be modeled in current building simulation software tools. A plant design such as this would also require advanced controls to dispatch heat recovery heat pumps, multiple chiller heaters serving the hot and cold water loops, and determine times for ice thermal storage production. + +This proposal outlines a new feature for a plant supervisory controller and an expansion of the existing HeatPump:PlantLoop:EIR:Cooling and HeatPump:PlantLoop:EIR:Heating objects to include typical equipment operating features and limitations. The supervisory controller will build on the existing plant control techniques by adding a new object to manage control of the hot and cold water plants and the equipment serving those plants as *PlantEquipmentOperation:ChillerHeaterChangeover*. The existing HeatPump:PlantLoop:EIR objects will be improved to include new features, for example defrost controls, operating temperature limits, and allow controls to meet either a plant load or a chiller heater leaving water set point. + +The proposed approach would be to develop the new supervisory controller and add new functionality to the existing chiller heaters such that a plant of this type could be modeled. Added controls and alternate plant designs could be added in the future. + +## Overview ## + +HVAC system water plant equipment would typically include a chiller and boiler. Newer plants use heat pumps with diverting values such that one or more chiller heaters could serve either plant (return side diverting valves not shown in figure). This plant configuration would mix plant fluids from both loops. A discussion of whether to model diverting valves or rely on the traditional EnergyPlus plant loop topology resulted in the selection of the current plant topology. + +In EnergyPlus, water plant operation will be coordinated using the supervisory control manager. This manager will identify building HVAC loads and dispatch plant equipment by choosing which plant component to operate at any given time using, tentatively, the plant RunFlag variable. The left side of Figure 1 shows a traditional plant with 2 heat pumps. Either heat pump can serve either plant loop using diverting valves. This concept can be modeled in EnergyPlus using a pair of HeatPump:PlantLoop:EIR objects, where only 1 of the pair can be active at any given time. A PlantEquipmentOperation:ChillerHeaterChangeover object will monitor building loads and manage plant operation. The figure also includes as an example optional equipment for an auxiliary boiler, in case the chiller heater temperature limits may limit operation, and thermal storage, for heat recovery or traditional use, and various chiller heater configurations. The heat pumps could be configured as 2-pipe air-cooled, 4-pipe water-cooled, or 6-pipe heat recovery. This new feature intends to build the basic components required to operate these advanced plant configurations. + +Notes on this figure: + - An ideal HX may be required to connect a heat recovery heat pump between plant loops because EnergyPlus allows only a single mixer/splitter per loop. The ideal HX won't have losses. An alternative is to place this HR HP on the plant inlet or outlet branch where no HX is required. + - Mixing of plant fluids is not part of this feature, which is likely not an issue other than checking plant loop fluid properties and providing warnings. + - Optional equipment shown will operate under independent controls without supervisory control until such time that additional controls can be added to the supervisor. + - The 4-pipe heat recovery heat pump might be placed on the supply or demand side of the plant loop to allow for both constant and variable speed pump configurations. + - Plant loop temperature fluctuations due to defrost are not explicitly modeled at this time (i.e., the defrost shock tank would absorb the majority of this temperature swing, but actual plant temperature changes are not modeled. + - Thermal ice storage dispatch is not yet included as part of this feature. + + +![divertingvalveplant](DivertingValvePlant.png) +

Figure 1. Advanced Heat Recovery Plant Design

+ +## Approach + +This new feature will include a new object **PlantEquipmentOperation:ChillerHeaterChangeover** and also include updates to the 2-pipe and 4-pipe version of a chiller heater using the existing objects *HeatPump:PlantLoop:EIR:Cooling* and *HeatPump:PlantLoop:EIR:Heating*. This new feature will not include advanced controls for the ice storage system or auxiliary boiler discussed here. Additional equipment controls for the boiler and ice tank, if needed, may be added at a future time. + +Trane has provided normalized capacity and power performance curves for heat pump equipment that would be (and currently are field deployed) used in this type of plant. The power curve was converted to energy input ratio to be consistent with existing models in EnergyPlus. Trane also provide a new defrost model as an alternative to those used for DX heating coils. All 3 defrost models will be included in the modifications to the HeatPump:PlantLoop:EIR:Heating object. + +Trane has also identified minimum and maximum operating temperature limits which are included to more accurately model this equipment type. + +The advanced operation of the chilled and hot water plants will be managed by the supervisory control manager. Zones attached to these plants will be polled for loads and summed to represent each plant load. The chiller heaters will be dispatched as either cooling only, heating only, or simultaneous cooling and heating. Controls to dispatch a heat pump heat recovery unit are being investigated (center right of figure). + + +## Testing/Validation/Data Source(s) + +This new feature/enhancement will be tested and demonstrated with a new test file that includes the supervisory control manager using the new PlantEquipmentOperations object and expanded versions of the existing chiller heater objects. + +## IDD Object changes + +Updates to the HeatPump:PlantLoop:EIR:Cooling object are shown below. New fields are added at the end of the object such that existing example files still execute. Min-fields has not changed. Note that default values are used for each real type input filed since these inputs are past min-fields (more on that later). Existing fields in this object are not shown here: + + HeatPump:PlantLoop:EIR:Cooling, + // the following fields are past min-fields + A11, \field Control Type + \note Heat pump can be controlled on leaving water temperature set point or plant load + \type choice + \key Setpoint + \key Load + \default Load + A12, \field Flow Mode + \note Select operating mode for fluid flow through the chiller. "ConstantFlow" is for + \note constant pumping with flow controlled by chiller to operate at full design + \note flow rate. "VariableSpeedPumping" is for variable pumping with flow proportional + \note to chiller operating part load ratio. + \type choice + \key ConstantFlow + \key VariableSpeedPumping + \default ConstantFlow + N6, \field Minimum Part Load Ratio + \note Below this operating limit compressor cycling will occur + \type real + \minimum 0.0 + \default 0.0 + N7, \field Minimum Source Inlet Temperature + \type real + \units C + \default -100.0 + \note Enter the minimum inlet outdoor air dry-bulb temperature + \note for air-cooled units or minimum inlet water temperature for water-cooled units. + \note The unit is disabled below this temperature. + N8, \field Maximum Source Inlet Temperature + \type real + \units C + \default 100.0 + \note Enter the maximum inlet outdoor air dry-bulb temperature + \note for air-cooled units or maximum inlet water temperature for water-cooled units. + \note The unit is disabled above this temperature. + N9, \field Minimum Supply Water Temperature Curve Name + \type object-list + \object-list UniVariateFunctions + \note quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note OAT = Outdoor Dry-Bulb Temperature + N10; \field Maximum Supply Water Temperature Curve Name + \type object-list + \object-list UniVariateFunctions + \note quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note OAT = Outdoor Dry-Bulb Temperature + +Updates to the HeatPump:PlantLoop:EIR:Heating object are shown below. New fields are added at the end of the object such that existing example files still execute. Min-fields has not changed. Note that default values are used for each real type input field since these inputs are past min-fields. Existing fields in this object are not shown here: + + HeatPump:PlantLoop:EIR:Heating, + // the following fields are past min-fields + N6, \field Heating To Cooling Capacity Sizing Ratio + \note Maintains heating capacity to cooling capacity ratio + \type real + \minimum 0.0 + \default 1.0 + A11, \field Heat Pump Sizing Method + \note Specifies sizing method when companion coil exists + \type choice + \key CoolingCapacity + \key HeatingCapacity + \key GreaterOfHeatingOrCooling + \default CoolingCapacity + A12, \field Control Type + \note Heat pump can be controlled on leaving water temperature set point or plant load + \type choice + \key Setpoint + \key Load + \default Load + A13, \field Flow Mode + \note Select operating mode for fluid flow through the chiller. "ConstantFlow" is for + \note constant pumping with flow controlled by chiller to operate at full design + \note flow rate. "VariableSpeedPumping" is for variable pumping with flow proportional + \note to chiller operating part load ratio. + \type choice + \key ConstantFlow + \key VariableSpeedPumping + \default ConstantFlow + N7, \field Minimum Part Load Ratio + \note Below this operating limit compressor cycling will occur + \type real + \minimum 0.0 + \default 0.0 + N8, \field Minimum Source Inlet Temperature + \type real + \units C + \default -100.0 + \note Enter the minimum inlet outdoor air dry-bulb temperature + \note for air-cooled units or minimum inlet water temperature for water-cooled units. + \note The unit is disabled below this temperature. + N9, \field Maximum Source Inlet Temperature + \type real + \units C + \default 100.0 + \note Enter the maximum inlet outdoor air dry-bulb temperature + \note for air-cooled units or maximum inlet water temperature for water-cooled units. + \note The unit is disabled above this temperature. + A14, \field Minimum Supply Water Temperature Curve Name + \type object-list + \object-list UniVariateFunctions + \note quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note OAT = Outdoor Dry-Bulb Temperature + A15, \field Maximum Supply Water Temperature Curve Name + \type object-list + \object-list UniVariateFunctions + \note quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note OAT = Outdoor Dry-Bulb Temperature + A16, \field Dry Outdoor Correction Factor Curve Name + \type object-list + \object-list UniVariateFunctions + N10, \field Maximum Outdoor Dry Bulb Temperature For Defrost Operation + \type real + \default 10.0 + \note defrost operation will not be active above this outdoor temperature + A17, \field Heat Pump Defrost Control + \type choice + \key Timed + \key OnDemand + \key TimedEmpirical + \default Timed + N11, \field Heat Pump Defrost Time Period Fraction + \type real + \minimum 0.0 + \default 0.058333 + \note Fraction of time in defrost mode, default = 5 minutes. + \note Only applicable if Timed or TimedEmpirical heat pump defrost control is specified + A18, \field Defrost Energy Input Ratio Function of Temperature Curve Name + \type object-list + \object-list BivariateFunctions + \note Biquadratic curve = a + b*WB + c*WB**2 + d*OAT + e*OAT**2 + f*WB*OAT + \note WB = wet-bulb temperature (C) of air entering the indoor coil + \note OAT = outdoor air dry-bulb temperature (C) + \note Only required if Timed or OnDemand defrost strategy is specified + A19, \field Timed Empirical Defrost Frequency Curve Name + \type object-list + \object-list UniVariateFunctions + \note Quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note OAT = outdoor air dry-bulb temperature (C) + \note Timed Empirical Defrost Frequency fraction in hours = curve output + \note Only applicable if TimedEmpirical defrost control is specified + A20, \field Timed Empirical Defrost Heat Load Penalty Curve Name + \type object-list + \object-list UniVariateFunctions + \object-list BivariateFunctions + \note Quadratic curve = a + b*OAT is typical, other univariate curves may be used + \note Biquadratic curve = a + b*WB + c*WB**2 + d*OAT + e*OAT**2 + f*WB*OAT + \note OAT = outdoor air dry-bulb temperature (C) + \note WB = wet-bulb temperature (C) of air entering the indoor coil + \note Timed Empirical Defrost Heat Load Penalty in watts = hot load * curve output + \note Only applicable if TimedEmpirical defrost control is specified + A21; \field Timed Empirical Defrost Heat Input Energy Fraction Curve Name + \type object-list + \object-list UniVariateFunctions + \object-list BivariateFunctions + \note Quadratic curve = a + b*oat is typical, other univariate curves may be used + \note Biquadratic curve = a + b*WB + c*WB**2 + d*OAT + e*OAT**2 + f*WB*OAT + \note OAT = outdoor air dry-bulb temperature (C) + \note WB = wet-bulb temperature (C) of air entering the indoor coil + \note Timed Empirical Defrost Heat Input Energy in watts = rated hot load * curve output + \note Only applicable if TimedEmpirical defrost control is specified + +The new object used as a supervisory controller is shown here. The most notable input is the Zone Load Polling ZoneList Name input. A list of zone names associated with this plant loop pair is used to identify plant loads based on "polled" building zone loads and anticipated outdoor air loads. This method is chosen as an alternate to looking at actual plant loads, which can be hard to identify with complex plant topology. Regardless of the method, plant manager dispatch logic will determine which plant loop is active and which plant equipment will serve those loads. + + PlantEquipmentOperation:ChillerHeaterChangeover, + \memo Plant equipment operation object to control switchover between chiller + \memo and heater operation of chiller heater heat pump serving 2 plant loops. + \memo Poll zone loads and determine if plant should be in heating, cooling + \memo or simultaneous heating and cooling and dispatch equipment accordingly. + A1, \field Name + \required-field + \reference ControlSchemeList + N1, \field Primary Cooling Plant Setpoint Temperature + \required-field + \type real + \units C + \minimum -10.0 + \maximum 20.0 + N2, \field Secondary Distribution Cooling Plant Setpoint Temperature + \type real + \units C + \minimum 0.0 + \maximum 20.0 + N3, \field Primary Heating Plant Setpoint at Outdoor High Temperature + \note + \required-field + \type real + \units C + \minimum 20.0 + \maximum 80.0 + N4, \field Outdoor High Temperature + \required-field + \type real + \units C + \minimum 0.0 + \maximum 35.0 + N5, \field Primary Heating Plant Setpoint at Outdoor Low Temperature + \required-field + \type real + \units C + \minimum 20.0 + \maximum 80.0 + N6, \field Outdoor Low Temperature + \required-field + \type real + \units C + \minimum -20.0 + \maximum 35.0 + N7, \field Secondary Distribution Heating Plant Setpoint Temperature + \type real + \units C + \minimum 20.0 + \maximum 80.0 + A2, \field Zone Load Polling ZoneList Name + \type object-list + \object-list ZoneListNames + A3, \field Cooling Only Load Plant Equipment Operation Cooling Load Name + \type object-list + \object-list ControlSchemeList + A4, \field Heating Only Load Plant Equipment Operation Heating Load Name + \type object-list + \object-list ControlSchemeList + A5, \field Simultaneous Cooling And Heating Plant Equipment Operation Cooling Load Name + \type object-list + \object-list ControlSchemeList + A6, \field Simultaneous Cooling And Heating Plant Equipment Operation Heating Load Name + \type object-list + \object-list ControlSchemeList + A7, \field Dedicated Chilled Water Return Recovery Heat Pump Name + \type object-list + \object-list validPlantEquipmentNames + \note enter name of HeatPump:PlantLoop:EIR:Cooling object to control chilled water return adding heat to hot water return + A8, \field Dedicated Hot Water Return Recovery Heat Pump Name + \type object-list + \object-list validPlantEquipmentNames + \note enter name of HeatPump:PlantLoop:EIR:Heating object to control hot water return cooling the chilled water return + N8; \field Dedicated Recovery Heat Pump Control Load Capacity Factor + \type real + \default 0.1 + + +## Proposed additions to Meters: + +HeatPump:PlantLoop:EIR:Heating + + Heat Pump Defrost Electricity Energy + +## Proposed Report Variables: + +HeatPump:PlantLoop:EIR:Cooling
+HeatPump:PlantLoop:EIR:Heating + + Heat Pump Part Load Ratio + Heat Pump Cycling Ratio + +HeatPump:PlantLoop:EIR:Heating + + Heat Pump Load Due To Defrost + Heat Pump Fractional Defrost Time + Heat Pump Defrost Electricity Rate + Heat Pump Defrost Electricity Energy + +PlantEquipmentOperation:ChillerHeaterChangeOver + + Supervisory Plant Heat Pump Operation Mode + Supervisory Plant Heat Recovery Operation Mode + Supervisory Plant Operation Polled Building Heating Load + Supervisory Plant Operation Polled Building Cooling Load + Supervisory Plant Operation Primary Plant Heating Load + Supervisory Plant Operation Primary Plant Cooling Load + Supervisory Plant Auxiliary Boiler Mode + + +## Engineering and Input Output Reference Documents + +New documentation describing each of these changes. + +## Transition + +Not needed. + +## References + + - [Trane Ascend Air-To-Water Heat Pump](https://www.trane.com/commercial/north-america/us/en/products-systems/chillers/air-cooled-chillers/ascend-air-to-water-heat-pump.html)
+ - [Trane Installation, Operation, and Maintenance Ascend™ Air-Cooled Chiller +Models ACS and ACX](https://www.trane.com/content/dam/Trane/Commercial/global/products-systems/equipment/chillers/air-cooled/ascend/AC-SVX002E-EN_10062021.pdf) + +## Code Design Documentation + +The HeatPump:PlantLoop:EIR object changes are fairly straight-forward. New class variables are added to represent each new input field. A code example for the new Control Type input field with a \default value = Load. Note here that the default value is not checked and assumed to be Load. The default field value will be further discussed in the next example. + + constexpr std::array(ControlType::Num)> PLHPCtrlTypeNamesUC = {"SETPOINT", "LOAD"}; + auto const controlType = fields.find("control_type"); + if (controlType != fields.end()) { + thisPLHP.sysControlType = static_cast( + getEnumerationValue(PLHPCtrlTypeNamesUC, + UtilityRoutines::MakeUPPERCase(controlType.value().get()))); + } else { // default to Load as specified in idd, without checking for default? + thisPLHP.sysControlType = ControlType::Load; + } + +As another example of getInput where an input field has a default specified, the Minimum Part Load Ratio field has a default of 0. The class variable representing this field will also be initialized to 0. If the default value was removed from this idd input field, the entire else section of this getInput could be removed and the result of a blank field would still be 0 without the need for the extra checking. This of course does not allow the user to change the default value in the json idd, but the user can always enter a value. Using this same methodology, the default value could be removed from the Control Type field example above. Documentation could describe that blank fields default to Load and 0, respectively. + +The suggestion here is to remove defaults for specific inputs without a required-field tag and instead use the method described above and document the default action (e.g., the IORef says the field above defaults to Load if left blank). If the user wants a different result, the field can be filled in with that intent. Applies to non-required key choices and numeric inputs. + + auto const minPLR = fields.find("minimum_part_load_ratio"); + if (minPLR != fields.end()) { + thisPLHP.minimumPLR = minPLR.value().get(); + } else { // get default value + Real64 defaultVal = 0.0; + bool defaultFound = state.dataInputProcessing->inputProcessor->getDefaultValue( + state, cCurrentModuleObject, "minimum_part_load_ratio", defaultVal); + if (!defaultFound) { + // excluding from coverage + ShowWarningError(state, // LCOV_EXCL_LINE + format("EIR PLHP \"{}\": Heat Pump Minimum Part Load Ratio not entered and default value not found.", + thisPLHP.name)); // LCOV_EXCL_LINE + errorsFound = true; // LCOV_EXCL_LINE + } else { + thisPLHP.minimumPLR = defaultVal; + } + } + +## Water Plant Supervisory Control + +The larger effort of this new feature is to develop a plant supervisory controller that determines building loads and dispatches equipment according to the user specified plant equipment operation schemes. + +A typical plant supervisory control system will include the existing plant equipment operation scheme objects. + + PlantEquipmentOperation:ChillerHeaterChangeover, + Two AWHP Operation Scheme , !- Name + 4.44444444444444 , !- Primary Cooling Plant Setpoint Temperature + 4.8888888888889 , !- Secondary Distribution Cooling Plant + Setpoint Temperature + 48.0 , !- Primary Heating Plant Setpoint at Outdoor High Temperature + 36.0 , !- Outdoor High Temperature + 56.0 , !- Primary Heating Plant Setpoint at Outdoor Low Temperature + -10.0 , !- Outdoor Low Temperature + 54.0 , !- Secondary Distribution Heating Plant Setpoint Temperature + All Conditioned Zones, !- Zone Load Polling ZoneList Name + Two AWHP Cooling Operation Scheme, !- Cooling Only Load Plant Equipment + Operation Cooling Load Name + Two AWHP Heating Operation Scheme, !- Heating Only Load Plant Equipment + Operation Heating Load Name + One AWHP Cooling Operation Scheme, !- Simultaneous Cooling And Heating Plant + Equipment Operation Cooling Load Name + One AWHP Heating Operation Scheme, !- Simultaneous Cooling And Heating Plant + Equipment Operation Heating Load Name + , !- Dedicated Chilled Water Return Recovery HeatPump Name + , !- Dedicated Hot Water Return Recovery HeatPump Name + ; !- Dedicated Recovery Heat Pump Control Load Capacity Factor + +The controls model inlucdes inputs for primary and secondary plant set point temperature inputs. One supervisory controller would be used for each plant loop pair specified in the input. + +A truncated list of zones attached to this plant configuration: + + ZoneList, + All Conditioned Zones, + Zone_FC_07, + Zone_FC_36, + Zone_FC_10, + + +And one example of a plant equipment operating scheme input: + + PlantEquipmentOperation:CoolingLoad, + Two AWHP Cooling Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 50000, !- Load Range 1 Upper Limit {W} + One AWHP Cooling Equipment List, !- Range 1 Equipment List Name + 50000, !- Load Range 2 Lower Limit {W} + 10000000000000, !- Load Range 2 Upper Limit {W} + Two AWHP Cooling Equipment List; !- Range 2 Equipment List Name + + PlantEquipmentList, + One AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side; !- Equipment 1 Name + + PlantEquipmentList, + Two AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side, !- Equipment 1 Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 2 Object Type + AWHP_2 Cooling Side; !- Equipment 2 Name + +The final 3 inputs of this new object holds the name of the chiller heater used for heat recovery between plant loops and a load factor where the heat recovery chiller heater is allowed to operate. The intention of this model is that the heat recovery chiller heater will meet low loads on one of the plants. When any primary equipment on that plant are active the heat recovery chiller heater is off. The use of a heat recovery heat pump is anticipated to be included with this new feature development effort. + +The supervisory class will reside in the unused source file EquipAndOperations.cc. The pointer to ChillerHeaterSupervisoryOperation will be added to state. + + struct TempSetpoint + { + Real64 PrimCW = 0.0; // Chilled water setpoint for primary plant loop + Real64 SecCW = 0.0; // CW setpoint for secondary/distribution plant loop + Real64 PrimHW_High = 0.0; // HW primary plant setpoint at High Outdoor Air + Temperature, or higher, Deg. C + Real64 PrimHW_Low = 0.0; // HW primary plant setpoint at Low Outdoor Air + Temperature, or Lower, Deg. C + Real64 SecHW = 0.0; // HW setpoint for secondary/distribution plant loop + }; + + struct TempResetData + { + Real64 HighOutdoorTemp = 0.0; + Real64 LowOutdoorTemp = 0.0; + }; + + struct PlantOpsData + { + int NumOfZones = 0; // Number of zones in the list + int NumOfAirLoops = 0; // number of air loops + int numPlantLoadProfiles = 0; // number of load profiles + int numBoilers = 0; // number of boilers + int numPlantHXs = 0; // number of fluid to fluid heat exchangers + int NumHeatingOnlyEquipLists = 0; + int NumCoolingOnlyEquipLists = 0; + int NumSimultHeatCoolHeatingEquipLists = 0; + int NumSimultHeatCoolCoolingEquipLists = 0; + int EquipListNumForLastCoolingOnlyStage = 0; + int EquipListNumForLastHeatingOnlyStage = 0; + int EquipListNumForLastSimultHeatCoolCoolingStage = 0; + int EquipListNumForLastSimultHeatCoolHeatingStage = 0; + bool SimultHeatCoolOpAvailable = false; + bool SimultHeatCoolHeatingOpInput = false; + bool SimulHeatCoolCoolingOpInput = false; + bool DedicatedHR_ChWRetControl_Input = false; + bool DedicatedHR_HWRetControl_Input = false; + Real64 DedicatedHR_SecChW_DesignCapacity = 0.0; + Real64 DedicatedHR_SecHW_DesignCapacity = 0.0; + Real64 DedicatedHR_CapacityControlFactor = 0.0; + bool AirSourcePlantHeatingOnly = false; // operation mode, if true primary + plant appears to only need heating + bool AirSourcePlantCoolingOnly = false; // operation mode, if true primary + plant appears to only need cooling + bool AirSourcePlantSimultaneousHeatingAndCooling = false; // operation mode, if true primary plant appears to need both heating and cooling + int PrimaryHWLoopIndex = 0; + int PrimaryChWLoopIndex = 0; + int SecondaryHWLoopIndex = 0; + int SecondaryChWLoopIndex = 0; + }; + + struct ReportData + { + int AirSourcePlant_OpMode = 0; // heat only = 1, cool only = 2, + simult heat cool = 3 + Real64 BuildingPolledHeatingLoad = 0.0; // current building heating loads from + predicted sensible zone loads, air system + ventilation loads, and + // any plant load profile process laods + Real64 BuildingPolledCoolingLoad = 0.0; // current building Cooling loads from + predicted sensible zone loads, air + system ventilation loads, and + // any plant load profile process laods + Real64 AirSourcePlantHeatingLoad = 0.0; // current apparant plant load on hot water + plant served by air source heatpumps + Real64 AirSourcePlantCoolingLoad = 0.0; // current apparant plant load on chilled + water plant served by air source heatpumps + int DedicHR_OpMode = 0; // heating led = 1, cooling led = 2, , not dispatched = 0 + int BoilerAux_OpMode = 0; // Not Dispatched = 0, Secondary Boiler On = 1, + Primary Boiler On = 3, Both Secondary and Primary Boiler On = 4 + }; + + struct ChillerHeaterSupervisoryOperationData + // Custom supervisory plant operation scheme, control dispatch across a set of related set of plant loops + // For two-pipe chiller heater. 1..N chiller heater, 1..M chiller only. + // poll zone list to decide mode between chiller only, heater only, or simultaneous + + { + // get rid of these strings if possible + std::string Name; + std::string TypeOf; + std::string ZoneListName; + std::string DedicatedHR_ChWRetControl_Name; + std::string DedicatedHR_HWRetControl_Name; + + bool oneTimeSetupComplete = false; + DataPlant::OpScheme Type = DataPlant::OpScheme::Invalid; // Op scheme type (from keyword) + + TempSetpoint Setpoint; + TempResetData TempReset; + PlantOpsData PlantOps; + Array1D_int ZonePtrs; + Array1D_int AirLoopPtrs; + Array1D HeatingOnlyEquipList; + Array1D CoolingOnlyEquipList; + Array1D SimultHeatCoolHeatingEquipList; + Array1D SimultHeatCoolCoolingEquipList; + EquipListCompData DedicatedHR_ChWRetControl_LoadSideComp; + EquipListCompData DedicatedHR_ChWRetControl_SourceSideComp; + EquipListCompData DedicatedHR_HWRetControl_LoadSideComp; + EquipListCompData DedicatedHR_HWRetControl_SourceSideComp; + Array1D PlantLoopIndicesBeingSupervised; + Array1D SecondaryPlantLoopIndicesBeingSupervised; + Array1D PlantLoadProfileComps; + Array1D PlantBoilerComps; // Boilers that may need to be managed. + Array1D PlantHXComps; // fluid to fluid heat exchangers + ReportData Report; + + void OneTimeInitChillerHeaterChangeoverOpScheme(EnergyPlusData &state); + + void EvaluateChillerHeaterChangeoverOpScheme(EnergyPlusData &state, bool const FirstHVACIteration); + + void OneTimeInitChillerHeaterChangeoverOpScheme(EnergyPlusData &state); + + void EvaluateChillerHeaterChangeoverOpScheme(EnergyPlusData &state, bool const FirstHVACIteration); + + void DetermineCurrentBuildingLoads(EnergyPlusData &state); + + void DetermineCurrentPlantLoads(EnergyPlusData &state); + + void ProcessSupervisoryControlLogicForAirSourcePlants(EnergyPlusData &state); + + void InitAirSourcePlantEquipmentOff(EnergyPlusData &state, bool const FirstHVACIteration); + + void ProcessAndSetAirSourcePlantEquipLists(EnergyPlusData &state); + + void ProcessAndSetDedicatedHeatRecovWWHP(EnergyPlusData &state, bool const FirstHVACIteration); + + void ProcessAndSetAuxilBoiler(EnergyPlusData &state, bool const FirstHVACIteration); + + Real64 DetermineHWSetpointOARest(EnergyPlusData &state); + }; + + struct OperationData + { + ChillerHeaterSupervisoryOperationData *ChillerHeaterSupervisoryOperation = nullptr; + } + +## Chiller Heater Heat Pump Performance + +A Trane systems development engineering document dated March 10, 2022 included several performance aspects of a chiller heater product. This internal document contained: + + - Cooling and heating capacity curves and IP performance curve coefficients + - Cooling and heating power curves and IP performance curve coefficients + - A graph of minimum and maximum hot water temperature versus outdoor temperature with associated IP performance curve coefficients + - A detailed defrost model with associated IP performance curve coefficients + - A heating capacity adjustment model for latent loading on the condenser fins + - Cooling and heating part-load ratio curves with associated IP performance curve coefficients + + This document was reviewed and enhancements/additions to the HeatPump:PlantLoop:EIR model were designed and implemented. Control sequences formed the basis for the supervisory control implementation. diff --git a/design/FY2023/SpaceHVACSchematic.png b/design/FY2023/SpaceHVACSchematic.png new file mode 100644 index 0000000000000000000000000000000000000000..5a294f7b29d8faa9d2c7ac6906d8705216f206db GIT binary patch literal 36414 zcmce-byQV<^eqYqN{4i(0!nuy-7O*|NF#OVkWi444(V>B`vB4@NOzag-Oc+P{r>K| z_b>Tqy~{%~;cYRHelmF+ol zPVf)Bqq>YZT`WEHYO)2 z_S)^;-W|q|*QQMm53Id|v@a!xTLSSgkOoJ3C6U+>rR1p!9EaHuxvA~o&KTU#QB~VW zk-6145$!6TzLxyChVcPDIGO>~Z1EOpTtePkcplk88{wwTVCr4^Knq=f}z7 zi<2Yh+qx<QI`~>{_lDep1P{+f0ya}@$jDh z&-ba3{QuY2W&gLYk4B!-(9oD#{F1n9=f}a3%i79kLf?>-?2Gpmhy6!TMkEV^q-3;Q z`U*`n-nPhda1r*27Dq)54*K`WiTwNBztK==3J|0iE(9Ltml%+Rhf z)7G6T)$eGEv0Up8YrEP=H@NXs7Tl|bgn;`J{d-LlUaP56jE!jX$zpA>o^WzMUArc3 zJzPXeuTwQXdhkrrf2SZS77VAPs;OC{ODg0BfyzWq|01Ed=#8TF8%X92v;s3mhx>0t zI=Ax~bHAH|mZgEZ4-+q-+uw`kJx3#P#+$uv4A*}pwp|{rb<}{7pUV83U6cR}Qi4IG zw(&v@Kd3SmUfQ%WWn+&jKI@M)=) z##*Q>evESx@CkE9QVr3qKvR;yD|*jPG5J~J{v8kh8|JHeDvIK3zCD>(S)~c+jy}ser*7A)?Z<4U|ZyjCOf!WUgHxTN` z#7@ncK;`*;`95pQtpi_O{}1<*_Ij$##ioyZ@uHQVLK}j>jKu!WkZXkT zX4Mte`jw9{NM4hcXAYkfYgf$+EesL$Ee1s7XE;Sr2+w;;q`1sluIMdGzdQ*{&p%gd z@xGhC``;&)2GQ}heZT}=3QbU#mQ5m+S~SMucW;#KT=UJoZnBN!@MgH+KI8<$c|ucb z0#i#RqtJ0gVw+G=)bu?Rtf5@i5ClgK)%5>oIDrAv{}rqTzJK>W0qAG> z7Z&A;{(|DD-;@_gdR>t0vte^+5S>5R4(jJlM&E2L?;fUh-bvEcpAxgs$Yt&u!^Vbv z7;_Y+$>g*TCg|UY>O7Yv@=8i2x5+_4uOI(k;QSx@_etyV;&XG?99z-Q zs1yI6QQ)a93^=QXM0WCWVNf*nH!#p8!X9P(13=8dundLzhGkzg-!$Qm4VH{Hi$7+# zqr|`N*l; zcRJB;a6*|Z)h7)l*BEXurYGB+3IDoqsKqQx9Tx zwA$4cO3dk7Vchc=79`jl*A)pp>vt>r+nZdeq2h366W=vUS#ZQMDTF<~=vrYzR*0-7 zi&5Tr9!c>=FlyvM=S0q@jctW(ZZD5)=gPd#Uh)q33kT#X#7|Q6?5{QKlsaliJjeS? zMS*q}>=rJx-{$wEapUrIOeOH+S6Eb+eFj^k9127Ulv2l0;eZ+8- zI*@ENFLD263^W68p&eW6Wl$(}L-foEz#}!N6jB$<|XKJdlPs19R zIs&n~*!^K9rVkBgN5IMf8r#^PJ`YK>>2 zjxrM1%D4xl(I!fsx!j~Y%o@OV$MhAZ$ zh5UHIX-uhY!F7pzx9MVWMJH;NZ!0HeJ~pZyIZaY6eq+Ww9V0%vP%4DLRz4t7^i=5N zWPJcF9(D-6*qZRpLnIC_*CIf=6RjXdEl0MEoa%Y}lSN)-iapAR*2-*uzP_}Tv#kDP zNVKIE*%2gPe&>60Px|AS(Jqvqr_mynx`!_`I6Ds6w0}W?Wm~SKxr&l~OO8XrgnCXR zQu~}=yD!$kZY%ma=oad+nHlJ7=e46-8XSbD-srOTVF&H*533K#)K|I~U-4*$H*Yl=g}@pH;Wg(Xska}&;03* zk~Dn^c(?K!oV$WZIkf3MjONJgbH~)$8mBC?XjgVRCnpQJI~*Q%U_EK_IFtXqWZ345 z=A~)LVGa!0Ay1RT_Wv4h{MPcc=FqFvIW1275fpc5IQikYp*FvAj z8Jg!dz&-WF>IGIh@x$HH13Ad%2JV77uMpn3tswD!Yu5&0n9XT(7{a)4d%(2lN1p-_ zKOC>s^(8jHXPKwvCpk{-V%rP-_3e#B06GdL-}0yB>zy*JDOq;a@9!V(F0>ZJ&LU9WKhsn-bIzG)uoRy|FzRAWY-1f`2M6H zd$n_V>j31syv*6LQBUgb4==6<6YrT8N-jTgs?%PG30$-1+jH?(k@&{+WK1g zUN3C~dVKU}gY?b70hAbJfzJG?AFT&zS#ds`WliTvA1S-`)_6YzsyPO_Z)2xAPinWZ z_mHiT=nsHQrfI>p!+tAk{hKfd_uX0v_IAA6~b{&6Cfq*iR= zO{U~c?+;;imiY%v>;~7P@p^`v^NvH#GYQdx_qOYCy0$1AF0RX;pENK!3!zbuedHK_bw_ z)JvR4sincxcGD7#*4oT{+Sl;3Yks)DS&4Jom7(oVy1+j%AwDu*xV<{julVpF!@G|1 z19Cigr>bH+UH+cMjmv(ub9t)e-Wh6+alT<+E_y`UJ&kIhvN$sG!WE|eBl@1mGaM(!el%9uT7xzZ;hXIB| zc0M@+xjrbN#< z1+P&FH;ml!ut5JrdrAEIlD!XWE=28RkTIuX(V6k?aHb#Whok~i zvdO9i3ak=?7VmvNwKrP98|{u4c0G5U3(_t<@eBr%T6*?U(C6fQ?nAsK?3M$DQ zAyrE@ph$D+S5(&Ap!^uC=Y49$lxW0QkIk-(G=4~&L*@aKm$|9K$pCL7^>$g~egh=T zMBEIUSlk32hp2tX=iZSwtkTK~je@uc1F_*5=McARUYa~cTaA!Ca_I`cNEi{q4o4SX zknyx}RZpjb9tLfQ*CCnZ{az4vY}US-n4kEq8Zz97bLgplz=v8IpTsP0C)Vt%-7o$I z@dfLHlu=pg_i}Q^N0dJ+dLH~jMt7F4My6hew4etv)(u=7rha_`W>^+hv?;b z8~r$IH-*7o@VeWPl%o)e!3y^?lvU5$f8{qPv-219Az_1@=W|bF)phc`&jq$*DVx^M zlH%KG5;$CT-@2wbv>_2fchfe~eMF26En4o*L6vv4t<|!fXL2ZM9||(B`cP^sHN+sM zsvs)W=Vbl9auGtuvZ=z8G)hWK+Sh}90RsFc7V4fltJ()NXvf$@t2)V6 zCs0I;#@g`5#x{voN3aCS%BFPU;dVo`@hq&%cts~oQO5|0fOpxxGCV_xi%k;pHESBN z$xUc?$k-_HY~(lgjq-DzR|iDfC-$WG6rO>O$rjdG!>A;9m91F%J&ImxE!N06*spb} z%))j=-xlx^s0rWGGQaAuw?r@bd54p;DmrsWsYJqQHkh(Sfpv3|5XYjwO_L%t31vu| z(5k#y;Q?uh^PKnfSh`s#OCGu1;Yvr~ld*giSG(})V8Qo-ht7V-OE9=sl`ZpUgQQ}n7lGdMy;42V9 zNFg>VOrH~cAKZeUV5iWCyh>>`A`*JOioBd)&kh&jHGKymRVY6)#_dua&WOb5aQ&Mp z23;S?{KPx!4?s>lQ)8tIU_^p{($dPEsFb7PSCAt7&R72jk(x5*bi zOA(aG3}zg1ZNB2?GHb!oGEb`>sIKcavRw}rSM*j6`GR+k(n;?k5FStvePA^Suh)8_ z`TY2S)xpi6Yx7#3y%?)<`|7Y4hQGW`5#2ZrjRu2_^A}GHV$%}pI!pODjP?A_+jO)| zr%6**@4gN-7<8G!c>xM#WuB$1<-Q@=WoL3g>8KM|11QwqVXKZSw*9Vy^PR>r?jr|5?xc?u4Kpc?;Sdc(VQamvO-Kb7HS{!Wbe&~w+A!`5+hLfVA7zS&l(>Hp#0kf z+4Ee41XMJwnhc52il~K#V$?TJ>2-rd?7XY+$^#_tPzSt&`^*v1(3F3i&sy2)Aj^@) zRpMPHtA2^F^|Hi7PSo3BtWX)P{4QHZ2Uie-eze8S8nn}%5%-bSLgFwmNmOs#p1m)2 zWr1;AE^?i8=~8;{K43SqpS5LvA$*SQ8N?A}(v!pji@v;0)U*X1{+Kt8x`I8GUX~Jp zn9e&s7mZ8x2C{oc5KoHyy&hTf`FLTMaD_FI%WrXOH$4O6Za(&ulc6mv`z{}@>Z(CB z{Ovnrf*@g{#gp^OJ-1>}DkDId%l6ez;^C&^LaT$>phQ4rRVJ^u`|9{Jp)1*B8oiWN z4Wd_S4J>$vZ9LWJ8H1!RUNz%6M^oE_<+MyuU~S@p z9{0V}k1yk0@*JCBF_AY6Bza{W(Q#20meXg0{Iueie_6x{L%1cf6QRyDVYy(zyXeK;HJ)AJh^a%`#~jW8KkU+yz3+Am zTr~{zE-Y8^+uJcrrG#^$-$+tJqQdnKo{j&WNFyQfN{vetZ3lbCUW8ZgBIfu$p zBV`|N`6ce`?H(Od%9`5k(8|JXfJ)m{jQZs%;yq_EE2ZYZ9nG5`L`)?~4{SyGlG1n` zJ)cGVL2YBVcQ?KEJ0Umd_8B~}cu<!(S6JXj=|(@>gCz0&@ZG(2HPtD5%4 z$$vE|vDG;5fUJQfW{nzVVLw4}at{d$3oPH1XB^z@s`Fx}ML%-WgpqvfW1KqN2O zoUA<(TBMc;fF?W<(|q9Pcr8pDBV`OnKnmAZX;oU^J%F1G1w@oyS<&Vlp^g}b|E_4i z`q#C?Co5R5#)r;X2^uPoD9LTk#gy>v5X2?#&OsGCyZ7s4)i7D}`tfH9Qt7k@lXqmh zL*oeI))55LkB1UVKe&j_ci)c%6DbU^KJ|pptuJ@-+6)x2o-UuwAZ`(QcC<=_QP0Q1 z>v@PfTssuY=jmRdVk{%REOObBXWG~ju&huAkgN0?=>xY<`=P{H5+P1h5;yE~H@UTH+t9rAm2BwuQK;g6`nl+sKD%eM`nSGPn87$c(UejW0S3F>W!SN_k96 z;+9UTL1>g|TxyNbjG%)a(ff+zQJINDI!lqA7V|N^nfu!(IP<|gFB@dLF>$0hzPhQ+ zy4=&g-7v=@zV{2JdsLy8ymCZ*bgJTDWT+}nMbGsNKiz5nhyD`;GHvJ`}7$YA=imP%{;#N7SN^fku-1HufC?8f3#BvIbLlFC} zxW7&A`&sUZ#O2_4ynsha@p-sedU7%E7;!_bK&R!DsD4rLYxI=3bl>AYz2N56E7 zhB||B7g#mA$l6}zu=na{01EKoISob+_b_4eq5pEe=$$20I%kW4;Wb_2wJ_j;8Ar#7 zx7B?pa zjs|4~5ANzT2Wmzz7+&P6R;*D(bsX2JXg(J6h&|F5x&fjtn51PZEB^sg&567|wE9(T z)Y3+RJD`&Rp?nV|pkb5btppS`x86%jPCx+?@*2**1|(iIwS=#LIH7@O#Wu3sHV*c& z=q(D}oGjYTRGF&=V83t*_0Z)V?#`x)nj^Uwk^FN^o~xwoN`E63_Hcqq(=`b=Z{rQ_ zIgG2x)Ng@09Popdzo(dBeCX118h4b!8gNi5c_ zV@bh<5p41@+Mhw3;Dm1FCAV|akGw|x@>Ao@exs(0>x%ZEO zOjI@4Jnm=3B4F0RE5%{N08ds>9FFau3s8=%6ko13Mnz;s$$ThnFV7x;-$q^_r8hMB zFC}W?01LweY4?Ea0RmtbUP++3Q5$ehN|q> z00D6m)Tn24>T;O;zatI1Ly2wEM3%_~UC^)3b~a{#%Cj?xQ=Ta5(>#~|mT7rBSAo!V zsYJKVrGEzS<3;Bcql)tauw`H@0n|E&#o`ZlHb4wO!es4%R4Y|s*oH8H6a7{CmD%2G zOWeXMNC{9#c46hl{I-bcTSKmM6AGrgDjNW3d)&|H%e?r>`U^)tm z-0LKfj-MZ9>K)CYbpGwV1AlosSUtE2q*v&hoWmqKjouHofFo3;G32`|z~f1i~2H4J!~@ocCtAp&*6Z89$BfW^`8# zdJx*SQ*|^3;2^ft?4|D-0ysv|&6%qF{`RQfNr3npF4b=|1eD+k32d@~m^$TiH|0|w zWj!Q#@B^acVLemXr9=$%Px#!0LG;UX9%_$N=qG1{`Z=$S#G$|K2cm(%hfSDFU_~eA=J>t58jKZ( z;aUO&o<$`|`M~xubdz?hL(865Ea<1cV7pH%<=V@?vq<7%m99(VvC(03*`0>i2z@{w z$z{?IGgoiwWuZwh2_gt5;~zz01nlYSDQ=A2{$cNtR$NPC72&hkem#%dqn-uqZApqY zwEa;9R%fx7#u5E3b`)qh3ese==ILJZ0>=95M41+Vdt90A6Z`V5eH4I+JsXJ4kPBz-a5z=XmVCOSkL1Vh{IsR!@po z`7ubi7@+spJNnw>!`$H%yh_n@5~>BU>w~HN6UA1X=7Z={-9`6U_BWaj6&>8pT{cDc zj~dTldd}GP17e-ZSx6i6*qag^{C$1Dy?dMKc<1@aI9}^%?0xbF=ywAqTk;{+zBJCB zGRa3zFpEiG07%!>ZN+FKJrwbP9_b{z^U(6{f`;bjx4fal?T|Hy@>ke{?$5r&*lkF& zjMcA;pcEC+)9^E$bi5lBs@ogQ4bj~&Xmk`F;t9cl2*p_f3q;8Ry@#N|JWt%7n_|7) zen*-gdCc_ZE)r;%Fs2UI8#UBt2O`p^#n%zP*MDxlN93sdh^jA~5=43-v5q++$l z%_)UcKkzG&bDyJ8)79iAbmKFDI&WZ zwf~;BYq@iQ@<2|Uq}J+3A1b1U^S=p*pZraM}50^fGm1!uXRABh_ z90m2Wh_hrTjJ>(nAda%`jig3GLuY65z+=U{e{=|AJqych=4wIl9Z2C(kgOAyY0ZSY zwUwXlqA~56i$N>vG7P94{gxhROU=KNk2eYIAseVF>A=|0mTcEdTw0>1*MiHM@mVr- zvFYPM97OC5CI#@j#4G*gMI)NAFz%Xc`gj3hp&*tYY5gWlX+)PhX(C1~u}z@HfmVRYZ&Xd;eD#s3I zp^8LO=*fjrNRwqa8nYzh7qV^J_q@+*NZ|r6&b3ZbTzv!FHXOm-KQXq_x<73 z%52hEakl2eMu3%7fWt{3akVH3I-fgM)e4ho3RZ*JzdLl&0 zw0y^dba0`k#{JY|e$shs^x64!vXxuuffoT~P&fT>twR{M>_wpq<3q3m3 z7ArI!CX3a!3$s$A7NJ6B9ep?`TqbBy_I@x9#S3V6+gVm|M=>Zk!T~u|H!C7RWDb<^ z?>sD_TKZ%$J<`9U=E{Gq{drq&c72#YtQ>9&nU8a7w!kT*s}vAN7hVDx1*GKPZsz*d zfhGE*_Ry&im65jw=rx5dzwIjRTF(Tg7Gv#JW_)Ocl_C?3r925JT)d}aMw7QEwe5G{stH*p;BZc_q&_%YIPm68QQ$!kNA!bvxJv)U@Tfc< zkU}iSYA6>Lw2#Fa{rvI?W9s~Et#x9uuZIN8=n~GqP83gNB$X$3OvQt}H!4LH%=e{> zBw@eh;eKWE)) zOf{L!w2%8J0A`8>#7(Kfxc{2>a)b)=RIjM0KU))cxCZ_HZY@n&LiHw54>$;Kw(hlG5bZt z`y&&7`9HWnmcm&N#-)Gr+KZa8^lK3#oxj+tpw?lSEL|GqkeMV7yM;Q-YmEY-k+n4i zgKKq2KXcs|E6LTun}l7n^W7Psk)r9mckuwzYtMk3uVm_Kp5|@_+dflB0g|f) zHwk>ai*Cj+?G!PDkhPRNjM=i6qTy^(*RRHE>bb}7y6Z!$pvBt1^MaXFc|$ZKL1joc z!=KU5+LU+~es3c`@tr}|hG+b>t=7NSSrJ;mE zarM?Ly>7|7anKuP41xBr%ty3DsB6NE5R&o-!1LxT`j}HToYg~FB_wUiaes&#Zs+a} zYJ+#NcF^JQbR;Y^YYd%%4pbQoe?Z|w8#c1RRS0(fdLE#{oHaV0@KRpK8TAo9Y0I`S z3_61qE*j^wP%e{RY(hj1Ps`KY8O{VjSKGa#OHJ|5f5T_gD771~4)SU7WXVKO0H~vc z@aJ#nEe=lcyKejtAt72#f_eICZtR(Cch-_V-&9y3<}uN;vpKcGKY_Lm^KYcAr3K2C zY!lYyjDw=9=rJbQTW*ijO^6bQrqAYB{P*wIk3{t}jK>SqY`tRl4DQ}<#@UGK@)R2z zXxu$pIX`38Zy4X}seZkh76U^WSq+QHUz&7`g}}1eoz~*mJXp&xSuwzNz)I`!Zm2># z{GIW1jifrvQ>h75d(?Qz@85xK%P59k#YLm?OY|@AXMB6rW9{7BX`ncp&Kf(-?E>`I za^CaVz2fT-8aJ4MMW{s@TTS%-a&4g!#z8Ke0!N19-_jR{k)rZ*8gN!D^hr-&dFYK; zf}0;un4JYFp8i-Y#fQNMFZUC2r^w`PXKn>w%7@FIw$D!}h+rOy6%v>mPyK6i-6?%; zxN5XEFPk)N2(A`nR^;%c0!IHoI~zaHP+b03#K`+q;-vV=^h*<=&0elfPM8CKhHanM z)y9J!79IIQFLLPu$R5C;oM2E3;2L64VEE~u+xA2|Z*}xJi?1DgTEO8B$`x}`?mq{w z|F=SD^^h-rGt{|$^?r5mfm7dyuC3*^zXkdUTeMsh9MlyZIbiux??zQH@I2}gD|^?} zUh^{+{Mpu6euM&Zm<|jor8UH=DiB=4uEhVI@~D87o<->DXaE(4wlK`+Iknp^Q2PhB zw;~!h>`JUYg&YvZENqf1TPh+~bbxGleI!QhOXU=k#AT_@1_Pj>2D%rWho5gT{yV5K zilG#*#?yYKDzY@4s`H-7kkB>;vBp@>NF_o5(6gf(DCb1|^D-Uj`P`k^CKXyEmNs91 zxX3OS9VMEPD(;Wd#|v!5g=dhaJh$JKC-zF9oN;GC49KwBi2eRuHMF>^KnHLWbw!wz zHgaV4J1c>dF5gxYc{)$G#)@Dta?c~zgN$JRP&S#B{rHl3O093UCzPk#CcEclO&(O` zFM99|$a7u4JtY&GRh+*Pm_ig8JgHARoN<=OvqG{OnbY(IDV!ELVAC30lo>BDOYb8} z878H^H*XpOQ?DOLPy!Twww}=RDb-@>w}OK~WcxE*KpeQ#98~Y}AVa#*A-{4^J?CIA zDvQ8vwA#!i{ ze8nLp8hpF@^<^pK-(kVQ`CnhmJ^dL&AE>Y;b$S9g7OeXXpZlJ(yWay;-^3Ed|AHqA zIHr0HE~QcDzcNA88W|d?G#(8lJO{u}H1E*QY+E2!NCy1sIUNasFN~qOz=f3rbK#U$ zGBW)A!^{j-e|`Pvd#M+1MHpUvt8PUp^v-FN8oRqC|P|_|IG`^9cg+t_i$VQ62+~dL@n3F2y5@2dM$ajI!UWT_IKm1UJ zhh{F2!MvH(f;1rFJ_|4}woo4OG_P}QEx!#w6FK&S(x+Be1RUFi%D;oWeqIWHYXu*C z0gN+m&%{>d2 zJa$UjW^1hcV20Y2QSwF+O5|kiQ<)l zz~D!aWoODyOU3nJyg-0*9gUEMsc1PA7#pirL(hwfbQ+R^WcgPb;DA@xevH9`X!*y< zprgjmf!&#^1@1|3B5_KixYYAhQPs3I!BjbIIo0FgTcM^z0!!SKmuy!i4|WUUp;cR@ zX}_=iTDQNhuRsfWr|AvEy7}$j6e0qI0J*wFh~B8i+GLq_)pNb?H$_OdbNGXqaJ7Q-;FbWCF%{fo0IRsEEy4Cg{pn0j&%WC3otOKt*br z1Ig9k$(~>{T%{Dg5v36R_SUm0gM&(Mx6tl&X6K3WrRfUej%PSg$9d=gmKe26?jid= zb2fGURv+}d&L(WVSh&AT2clD!viH&mh?4bo5B{kSc-!b=a|lH1deg}Fok#WQ3=bYu zuwrq2tbQYn^uK4xCMC{}R%@--i^A*+zP~9jsm) z)yOtLxWBfJD64S01uLD$h@|Th4`xeU)DG!OXU@^b=NhR`<(fgiOMqi;?!K}AT6&{Q zqsP@VQa*!?C$rWIJ)u5cD|WQ9lCKzaj;R|&JcOg@ru1F)VLr}Abs8E~kj6og`G8Gy z0SPWq;!mH*p`|Aguc>O#oVihtrfNa?C<$I92{5j+{y9+=f7L7cIZz*4b|v@dV?f3* zh-efna=C6m$HB*Y@mc+`e^x)DRqu7hP_dq$IDuZJ6&kLV-T38=G^K|6aK~yW=OA(% ztHFL+1oF5S(;vR04TMjb+w}|#TAl?bZ94|oCK6HgMynNve{gN&Zj7*T2zN=YZMEOpZqWddX*e2fFmx@(b-f-CEbYQGpO2GP~fSHaLl>a zTCtE)GD3o6uiu^%iV_$C?~85H%gT^fk%4fyiBc}MOO37vDL!A6Nf5+or9&Y#rc$0D zUT}I{JGrv6d0rkul*XvbJIdNcSWs8JQK*{6M5e_cA-#3!6greFEQh~1hoFT&tJBbM z_j#|25DXLvVxQtLy2>FVU%~u@z_92^G1mpJ(JWzM?}vAo`hL#x-Zf}NuxE+hBW3d( zY7D}({jl?NrKbZkn+>1VMw0KoNja0x4Ov|!*2s`ot<2C}%$JRtsdpcd;`Lp$q0%OV zK%TX*%NS205A8&Y*Bc7J=FpuqDGd_=j^big2r>j$JBd(J$|0;>~;15VE3T4w|G^Nj`eFH zj5c<2>@T=dKfre8Do8#Nn;^FL21vImTHqh&2R?E@cTI`Xaw zNpWlVSkp&WUT(nFIgg#~Of?q5DvP-a#)A)8Nf_0WSX^aa3hFn)d2IGSFf5#UFl|4le#|z23vgYaq_K$I;Fi~-0jjxJx z4By_sB^f0LtVuUU9NllYc)L*Ds3|5HhmvsjEntZ~?`XE?4hNZ*{1&h@Ko+`@k)3y^ z+4WvVrvhs^evLm-gW4J3QlfL!Ild4f?E*UJ`&jB&!zb;Go=6mvGw%dx85CndF)Be! z0y80s+88yHxvR9_?4aR_>luPLOyu>|Q09O3k66ih2XozNu&_vu z?t;cXd%^%bt#$E8Mq)&J(6S=U^JuQPoH-FOPQTUuZ6MIM>TPNx420s{eda*#ABF9V z|6EmS;gAnHSq}woPw>7~uUpW^aPK!?Vq4^QI0#A}#WKUK9T1iX%3%LoQvMVu&65!^ zcXcySrw^amxBQU)T~iuYE++l{G{5byUJMdxomQd?L+*CkpPw;h z!sepZ$N-+K(qxpa`jJ*_qy%OvNiziJU>=*<*McTB&OhmvIUIh=@-6`ZG5#kT=>Ic> zS^I(Wf5EfpP05Ek4A4nf*E$@>th=ok_CUmknTX*+w$DjIWR$oY1e8taE=n3L_iMNC zd6sLkTp>-Jzv5bDGN-xn;jjc&VR$505Lgi0B33TXO9*~i+&DFn190;~m(h`?e=<>N zd?KL*5{pw?Jj`7-|B=x5C8D9*P^9H6RR#e89C*TTvAi~r-EXe51F6n+u7~2|uaf*Q zO3_7|n~5^-KY8`#J*^gUE@X`nfd3j)!bns_^mStzr(fkihCacf*iEDLN6Y=eNCm3f zXqGZi{@IXIdmSi9fD^_~tKgftt!W@T8eoVlhEr*tg_JK7O0<%P7_=$`svYf+*SHxK z#;xh}a1$*)51=!0P~^s%_n9suC0P%av^^yv6q(?PX&T@8uZ#^?srlD^8cC1DCsSYQ z7=!veXA}p!0j4a~*2%(d=uXTB$w0$oWTUfeXJvEyzc;-^>mQmmlqs(Is`FI4=#@}$ z1Z>Ki4GmG2$o0i=e32w!)rpX1zEXmXzuF_%hZDpV3nrPDg%5g|08ISAKTwH-j!^Tt zU;x*K>g0KFaW@X~V>O?kR#sTYi&Wrl+;P??K&i=I&%+u@fT*w~4+a5EilbCcGAlHa zpz{GET;$qfo^7n_yVfDq5BFaTk6d*7HR-IcGgg88=8ar{?hei z-MkI7DQNrvX5G(Th0!~Jck2dCLnNlxr(3oHmZNmM_=S=t1HV!Qr|{kK7BRbSi;+3$ zD*+LP1x^9MeyXC7465D0Eb`9v;eU<>(5TY95b8n!$HnuPpB z?~fwd-UpHskO5~43)OLm!7Yu|)SA4-T2F-Q5}^+e)D}+GuUdf7%eHg&;kxX>Azj

9A+@pJq{k^;dCPYeH_X}E%t5KUA62!28^r+eSxi$A^i(~Cd-NZ*=ZM9MdfwRf4-ZE`6P8?1+_=IzqDrrEC3<^YKHla|bMjX_mA z3%S|{SsC_4w#~-F=#pkn5GS3_*Fkv{^eY7k;x>R{Zq0QQczD-O9DLYKC&KjwCT9@1 z*-zmXuzKv0Qzhn$WukG{fhGKH#`#31&^^Nz%yVFmW$xjj?|V{4AI0^yH9Tz;CqpHd zR<7}$RKmS%@<%5qrXZ`91Y$#S7mnn0vrGVgl>qG6@}hdEa{RexWpUpJ%--3-tVEr- zyg+KPwyI+(ce|C@_^#&a5sQ;};Z@AI6(%Zmz?r%v=#gN%U6>8zF+CFp$;*pJ!FjfP zVrm8Yf``SP5z}&GgcCPstwQU5go`>f%erW?g;ux|w(ptE9<35cWqfD}QdnPrFkc0e zZ)5jS5C}Ws0PCFW+Hu5(=#CV1)e!TGLCupHX~M03*SezRp7(Y|pQ}=y6fYlkao-G5 zla%`iPt{97pS$N<7BCgIBo!XOG`o!&ZKnrzF_K0Ns>TK4JAtk*ZKNI?lG2SvVJyzm zOE*E04yBJ{RqYODp8FPFcDv`~utM&-Ys2lN;^2YI3LGP~w(|@{n>dnePgx+^VB^6v z>$W;sBlVU7ma9Nk0o{RT0HgOnas+F*1b{c2bc12OCi>_1lD!U}?ft(l`hQNaDziu= zlv4&`6j4663y?N;7`MXtI7UKtrP*%cZF5_OW`FV~jyn(tsMRPuvEWt^(c) zjCXCv2$WXi;kfYo=l)TP)f<2M`da+ugN+P?9%IQJW07`F9$Ow^=mUFsLcuSb^7%6@ zC*a}!P5EdHyL?f0cW*8f=_NSK>u$jxe}BE8V6vBf*W8E6&ba--JciAu1@G=F&*4+5 z6)i-F`goO(g75nIGpkup32-F*TdV3PV9}3tPd3uqj7kT;-@5+<1sf1_$!Cy>GBrP#JtWL}V z#G%ff1sx6LSTv1CQY=oyGT#O(7yt|8AKh|mGE+ImNN^$N(?(sj%cyak%A(-T^)FRG zWio+XsR0E0k}SRbqu{|=xtLNocY(m}m`y`|+sez4(eWPS^P_kcSnB>gbtXzkG~IFs zFLI8hia@jcDHG&O)m=Z%<&F6iICh}B0FfUuyOEK_gNpBvIIZW1+PMd{Mh{xo3z0gs zLuqO|Ek5hrG?-^&BPs$)ofip^k8RC!r|R-Xo`yx<(kZ&%!MtY4hOFgKF)|&rFJ+g% znAMOh+tpF0G;fdA_UZ?1or9R>))-C(O3(wr?ucE!af2 z*hT}Q(kWwGwvb&G^)GE?W(2I5^%%fkhOUocjg8 z(aw^7K&YYH&RrfwNPnzzMmade(hmYA1e2g^un z@pN$yr$FF><)RMt9xs(4LKhZ>6c4)?*Bo~_8ATJTE4#T_mK+}Jc^N z5a2QA2zG*cdK9dMmJCK%$Vg5b#@pF)v1bNL8IZ%3OrKn_vQA4v?Ws>^^LLXIpVQY* zu$X)|lkjIGCw@|}&NDoFUMc)=a^f3o`-6C5CRwZTx4NAe@>|J?kAh!zJNdt0a^k-S zFrg?x|5U&PkvJld!sljfFhY~8z#=~xFrf$m!}K?GasN5Dwl}7MkvK+Ce+@7}x8eOK zfCRE=5^I-1qw z3(n3V#18QG)-erqKlI`Th);Ef#{Hwm)&Hx=YGJv6dYr#oWi&Zr7yjrG2W(Y|nM!HE~mAvoe+^So?@vjupC% zXiMJj>(-Ksplr1%beF7_0i4vss4!Pf-Jyq;j07DtGSds4Sa^oDz!5B`HM9e|*l{l- zBe-s8?F?7xoKj>+At-C`s)e&SV~RM-HBeR+po7*@fScsN5g}NUumRV0nLa@SRH=%Q zfyBItnvGD&>A{&o+rto+EpRZ(5_teN>uz?8Lo`9w_Uw2GL|mt{TyGcaygk(jIhMq9 zB>SgKjXlM@%~H(ncma2I5(cL*7mg=gb&#yY*~`Ac_JaiUw^O*w1P2=H$(Sp%MoiML zj+~Z`{@C6=t8zR&EyDUmX{XJ`F%LdWS+|#ZFw<@lL{TdF+5&31F8TydJWcL3RdC}~ z<%yMI*F+9DB+fzR2*^%W#??hUJO}o50lSuz^4aY2o@!KmqY3Bv950Q%8+HcKx@H~F zTXaM{`nm;A$2B7Fo9TCKvEH`v_l6Mw4CwW`bAZxFFgr=e>d!lMy+pAcbiib(Cz?-Jou;XTtb)j*Dq0cOR^o6=U{d&qLoj#t z$(b0B8Iy%)g?JQu~Iw1f~b=aj&qn75c3Erx9>WEMOM2KlI|`5dJH&yawU`dhS?mB9il+DHub ztKL}e*)u%Jyvirz zn~>!AIl}zp!3*ztW4&jK^!3nD}S&W*s-M=wmLAGMDLgiZ-Sq_nWTKW`}?7 zhwBg-iMow>pN)+z)0zG5WJ3h7ODfnsZ)wQxx>;IxT@*WZzSho4^rYiM>}+LwaCgk6 ze6wq>*V{$F)2XIA;i52JH`PE}nx&fZm_vnj??h^4*G`QJ@n{a8HePDFIskVSimK*eN($k(2L$LSUzK$|8C%2b!(D8P(9YCE=du>A~q0!NqWUcgJ zNfUR9(QZ}_jMEK)M2%1J@?haLyV%n=035Dz9l-?r^)TtZr3TLZR z=26@Zc#!5vV^ZxlOQdAo zqnKaMbOK$j)Rc_aX}CnKMb;4LYo=PWRBpc){Hs#8FAC}y2b_0r1&!P9 z-2eCsQn&Y2ZtydR_?mm)l)9<+|Lnan`Hsr%!&@f5C3X96lcT4Z_;)9(e(bvRpCU>B zOnM}O{oIBm7{xJ>y1%qfi4xC>3?w|VHh*S%B!$8FKLL~w93#-bkse7x@OP=+eov2t zkxw*le<3~cZrt=rkNh{LNB%yDzRty7>5;!~G6sBq>a!K-i#UsqKC|CJ+$-|&|A#d2 zy~xKu7Q;_*-{YwKaO5L)*ZzMT`iMXeU!|{vKBD&)rB5>-?~DE`^YPb#iLcDZ7dU)@ z!=K}wRjFDIe0S#K@|O7sanzoS?0`SbShpZZ7(Tn3h8--AAjF(ElFFr5Q8-UDkiplY zh@ydLsD_cGD_*P_?Zpl2;GA|WE4euo_|@|56oSTU2aJ0hK=7xVO>ThdURYScbZD*s zC%6KWe$z&IUP2AqXPhki9vC7`3CY9dx~%J%RRO?=hOZw`E@a(>@M0f>bM4vc;|>M1 zBEYgK=kvznGyQ}CXE}!Igpb^bzxD@&<^5&UX`q13b+YR zQ*q(IVzAbokDs6Lb$dp3a=_^7mTh6>giaR=+G69@Ke7Y4(KiqO>A>{zB#{8KMl6&u1~5P(1D3L!Yr0H$Xkm04{x-@H>M)>t zMPo5{K&#o>p}WJT0-`OX*H^O<8corv+k8`!n(Hr9?*uSEp6XJUn|tQt=AQYOx)|*G$pBfbQ-ZF2 zrN(JHZ2B{(&<7MvqAS+V`!NcWg1ZiS0aCjsZ_a1XXpBs~eaZ{zSh^~Jyy$~hL3Pr! z1*P-CDj8>P4Ku_+l};W`T>q-f$9E^&PYeF#%tywmDCL#;_{;BX|IU>f{Vm4&qwtnS$@>uees)WcI8I_*)75BvtkeY9z(yfFc%mUyZtV~_i zDVy;s=cJJmd;TFRl?2Q!A%h{sr@xj%qYfSVp}H}EMmGE~i8F1q$ZJPAi*9Z^Bi~j* zU`NDlUJ6(J6vD`X7LF;%(Peu?W}b$8-$mSwRXqxxGIo2BXcmObaxkvG6COlU95bhE zImltVa&q*ryodeJ^8Z-D4Xq-n(eUm%H2F{*r6fz0cvjTb1nqvneKdHG|aSzwj^ga zRC9RJDNK}2!*G+p-4>h8!E7BkUrLIQ@T^OiKxE4exe&EXqWQi7uBt=ZBCo66AMU;GP%2;}y%hF+iuOQbGRYe^-sRES?UjX>!YVQ#o-R)e1U|{R7$!ss^s>-T2H0#+!cn99Sxzk zTt}kEi8D;f?tQ!M0sVN{M!gn7rzP^wdSEweV*rC}*zL~XSaM|&WBZx2Lomr&Do zCsa>LdhZc@v2_R* zvq6=rxt0NevFa`fyV@f|JiMT2!_!liT(p92_+~9`HLutAnqPP zcZ7jcIPzWM(kDRrUU4ag{oe8S?q2eLB8c(NQPO+I;f0c3DCw6*Nss_@EChYS_x?UP z{2i2ZUkY9*>DNI?Fpd01KTs0=hs2cl?S4}ddpz^vNH31`;z)npoXno~^@QI07XFMQ zL5Ti=BP9@jl<3Jsvf(|BBwVsA-AarB*%MB)z>K*dYJ}Zzx=5R93Tjl^1^~Xr>v8k)ZX^2Xc5_O>-rKp7jLcr5sNrcl57h$K;UjwGS#UiCz5O#4Y(C8niCdWWQPB(O}=bWxk2M*3cbL=m#Sh zp8*M5Ai5LI$>Q}U6cBI2k~5lJ5;EI)xWyoeNhHA9l&ZqAkDL55wAlh4*B zaY2HG?4GBLMj3UxnnrP1YuT<5J2l5EFl+XVG?H&6r%E0{p_mSK8Pe>j5`(OCTr1S^ z9gGi}JuhP@tB`o>P4SIC94HYui#_ctfaPSUdxScuPbC$o z&J^xp`cf10IV*`nG`I? z#X;ASANSgNb{?A#sVQ*Fc#jMY2qG(n}-fNB%yxu7(&6ldaCkqBMmLek%>#{SLo8h(< z+ZUG_yruUk;=we&&yrp)%3mwy`U<7_YsFk&3HbGV_&VT^v80!;{G8Fym@vGzSyJ#_ zmh=+vV=zTdynk8C55477nhSC2BNz_J_amt!N6gb3dx^_u?N=Kj0WZywXDDq~%#BT~l|4GQ`W52}bEB6Cs zc@rajep&u5g7m326M`5>`0#1(_~;!U{W5%nqxS?WY~XL>qer6nskVv#nqP6G=iKnl zk$xwRgg<4Z{}29zBjL{`iZ6%WLDD-&dIw2=9we3eNJZr1KjB&DyCCV&G;y@_Nt~DL zJ`U$AY?{!0-F$ADHK4PH*o2M`J3OMgNa&Cj)RAq=6(@=-q@hlMkZ!V=@`wB7*b3rJ zDd-TaDYwMT@fYe3nw35ZP* zDkjX_#1CaB`v!L08TR3t66vh?Hikd&RECB->y=S;^AR?unJ zwWzBhyAg{F-MH&Y++5KKblmh5X!j4;ix@;M1z^*7gd&9oi zk(VfJm|07A`HH$YRVinAXN&}b;@MWl>MCr5TZtCaA_xbB@TQ}xZ=|B1i=j&LgEQr) z+_jF?xI}`PpRUg$C6-Z^Rl^96G6mjhY>sI|VRdQ;Y-Gpk$a)TMa7>mYac&{ft#|1m z6U`hx+(u+9uf9Bk9>m_f{E&dv{k8<6b{&TqxLoN^Iw^jcWf+t~41QhQzuiRf8PJx% z-J_EtFWIA|&fMUX@p*^Nr#a%!#>rB0NrW{;Xr_KF0*@{m3FYh?T`c7$@{@L_54+)T zW`$W>E$(K=w=|jRcs}0^5*~6PHF8s;@@y6L{XsO2NY-o_x5aU%yV#Q@^l?H~uE;Ch zjyV&pK3MZ$LR)@*DVZ_}dB|dnk$1T0b{&K26}9JT<6K4C`^5nV_8?vOaD)^eL?L{H*nC8StBiW{L)Y z(>OdZm~7nt`2jDpb&`6^&`ivh!^X}YJKyp$GjGNp&~pv=9YeGGEBj3^GYE>H>;X{z zPmrb8RZ71#ZbDJ|mkQo6h~xz1fv{fVrVY!(EXDtF+(eNG{idndPva&6$Nrq+?FDI| z1Wpn^f}1|t-=i2pe;+r!S)qjfS5zo{#7*CWOkZ4#_cEn-&h&d5;bR+$5TG{{Z;uS| zQ=I8FWqM2r@098HqD<6^l-AaX56<+*L5zCTExnVbchdAuntsL=-yum%N1uJfuMQafO=fn|CzgV7#YT=5KQ9$#iTx_*@y@$W$Jjj2118FgxgHl(bQOee4bB@)HdX_a znh3EWM|0Z-e7QT5bwT+%FFSU70NRr_Mc}EpBh$5*WwOjz#wHZfCEFAUG|S+#h8f#S zyNtGxNvviIhvRV|@5_AKbp<5Q+&JaA{pNHo;h@q+!APv**0`jrQtf)aToT*G$c;>} z_ST|NOraW-ac^A(oJ}X!Ol?LQ#O1Lbhc(~~z}wv>c1}q)>r#Z}bJIf-5iT{i-YL?t zMYzn>9pRwTyX|F=xzw$(P7Q^d#6>D_jFFOrBu6cbJtt~f?}NtsA8lln5r^7x&QuRX0oJZ^KJN zjBevT2~$o$nq3F!A@<}ztrbSg_Da?o{n7| zUoZ^Hdty1JPO)+B!;&7R0N_@?bTF$3#&nAQo)@*L36z*^_8h2ckq%5-8dA6WQkG0E zKStqJN;CpyQJmZKAiwF6fzY}0z7Gg}DA-tj224lnB#(X%47?%aL79&aJlBMxh(}dQ6XdlmI;1+qzO0 zNI`Z4++*gSxz;iXklGcmGx?V^MGd*VtO9Gm`-VM*We+0ql}#A9dsc-G9uE1iiN{-a z@vRSaJKr$3+Urmb(huCiI*%*+up|3y8z09%oj)RR_w9i29soG{QRlQtAOAeY)@R%G z@$J6Mk+1*CXTUed-|G#3eAw4W=l#42k1hls&LRIOTcRETcuiP;_kaIs4*9PM)Ti(K zZUl_#5Ndy4;Q#Bf|4+hB55M`ZV5jfFrmvm%Z}X=6KrXueP2}_z zV*1EbUj5XAF8#zW{y3LH-XcWLxAHJa*TeV+C;P{TefW(x(A5txum3c-fHlh2nk@)vzD*`(6D!_y7ZsWR=~M*8l#`>E+e`{Og{qmaiTE5&!we{rlW`=~(j7 zf&PJ$KYgdYHtcCloABDw!E z()QZUy(yBUPT!%|JM?;oUO!V_MV>+~FCWL0{;`DmCiHSO;Q_s#tswPVL0r&~J#4Ss zzVeOxL+cvwbZk7XL@s@8s1@(-oU2^<3$64Wd{zD6z8KrF#nrF@XPK$%#RxBwzZCsV zI3RI-Fr*tHc=)9$^a)=pD0CdQv7@%^lHJkdJ^eQ9FL)g5H4Y~QTS2Go_;ht2fxI^l zy+JC{N#D}^4BigjRx}iC3#$ruZtoMoGvNJ4Ob>>&8I%_&*j_G%b{(}WYLK~_F=Omf zCRanpKcoI6Tl!W!39xm!-Xu*s zOiQ>qn~tv-VJ~+w;Kne59S)V(G4bV=gqaF*c$AS#x<9MuqNl4h+sHu(1G4C)#6gDT zZL*9fVc(#`GtlAPWbIQ8o^(_LhSjz_o(XK`2jJVodio5()Skbl))poz9rX6752L_nSiZL5Y zh66OvWA4~E{FW4^wRnk~XwFP8m==|ki%57XO_GXfa)7cIPA$+4cfV#45Q9c)X{Bd& zR(dMw+~Y=tx(w(Ww6`RkpKpgb#M)xggVE5_oUM;w zU?x<59#5y{P!@pi@+qn?aZXNB%neiTp6VSwoo7l(5cibcto>>&)ca7zoj?tV$lV4a zMcr69Fub@u0%$vx3z@^_yu@1>#_NzK*>rS6a|+dC`V0t5trEq_SQU2ZUc9}U zmo7$kM=)||?^um}c0!PJEGZy~Gh{MQiF8K}mr}o)Tm#%l6*+O(As-f)tO2Vc%nUJUo72 zdD+B3J^=BvO|Y+7UV(nX^2{g88&SeJaAV?KCqvz&f}m9`)wLCov}veHwq6uB?tmn) zY)CU9xb(TnbpTscc{(~bGH*5>5i!LnNKJ)l2{0S&_KNbYelpaI&nf|DLb8}zWI~BoOre4qxYR?UN3QpVX8E`HYP6X;^T1(gB2bS7iRs!7q2X9#}L`XT|n934H~1}%_(f@-1Em5t96`R zgyR&*Ha(6;A>W6*LCN?O(cMwQ;3e3z*QUI91+Er7Whc!(46~RbHmqAe7P82OV+f(! znD+s(ia7x#F)Dii*fR;%?onN_2E}KE2 zxm4vrp&sg@Vq;JV#=0v{9T>Is+U_yB2vK|^18v#GHioxaR*QOYv5siFK_gkd5Q^*t z__)JOQJ*huZ`~}E$K!~L4qTXpy`R_QH0hYsx+{lLNffwc4VrKbA7<0UNPcEPQJTbrnX6I&~@^@(3L@s>~;ObWj5qB+=5s$OXk?m<0TAZq0n66sTn4 zL0~pY7q_lj2I@Me3|JcNjAORjc|?pE%3-u_s)dblhq`1nkNZ8&NlU?JO5ipON7#Iq zZ6iBW;aQ({q{+E~sGpK8eA3p6xR@-512YNd$RgwnKPD1I9%`mFA=#0lHW`7r@a!i{aI8@P*FqGs0qksYRyP6`X%%*fd6mCsRHn~>-~=zraA>}6no**lVYZC(F6al8k``>i#hH2!NV@-P~qSq>6Dcdkb_ zEPa38`PCGUKq!RxJ18EGVHo|VAl~2YK!(042}S==Jn!9s>|Gi97CZXyRfa++!B7lC zyrB$5e~|;(V`_NUhW<`X5s81(PZ{W^T@lHDqn{jm2W#(O?H#QBd1dHqW(@Ol9%L$g zI-SEyW%{|XUn?Yv#>1}|nRu#1!^06GBf2G3GiTzSnKWZlJJxOV#qz?}={gnq7fuUUGW(g9n*1(g&sM>CnWzAhKJy?$630LF>Ui z4Q8|xdH+-{2qI-b$+GFbBX}EL&!H?IQCg(TtEZV#afG0mJwwbzf_>B2UK-k>&tlt~ z?q?ok$?jNa4-Ybe826dZLe>WlvfOOYIYpQ&C>s^)odDbAw=!3$euj;ebDP42Qg+*k zG+@lw?=}`dMrh*)vt^6H*mhLCB+jHkSAVtJw_Ru?w)fNPT05Vqd`*ea`#@G3{19QJ z7M=2~ST2H@IcK`toA>-vZ)A`1BZOAHqj|ZWkZE^}OR`N?I9UL=}2HlxJ7G0i%o!hGAB7So#*@P*P>OgO7V*rScE~-H>gz?Rld(xgMlM zj^L`>YvqmDY(i_s-pzDQlb1;q#%|xj#eF$EdyS`twqK7$4x11#2subfbb3ohKWX%_ zL-YhtU2>?v<(5K-b8giF71oQw%xd1~|D^6nSigUQXj8|xB(X= zMx_k_dTv;QdpgSu?F-_xBA0J;O#B(*v`zuv=$QC3#OWFE>m3uno+Doe{E|351HRGM z@vGzS)yBuKh|~I&ztJ)A195U5is;QZ4DR3k$NnbPgrLMPwY$fO`^i8F=rh&?b2QI0 z!t*TsQr3iG1pK$KCY*%-9BX>v83>7?$e*+ygD~p5tO@x;`T4a4Ci2hHf&MD{v5yzy z?;=d^_G9mm=|2LQNCsw5mZ855nI0M97ub(IW`uXd^gAIYa&@%FKDv+naSS2e3DY}a zdM8XjSGvXa07$P2q3?K)(ZiKrcq4PNLY!x?qM=^(U?0hh+)a7r8PG^TmzoZ;T46QG9NIpW;SJ-0*xe4ex|sauBR2#DYZnN8VhhV++UOf>86Dr_&EbW zx&-B5!z&7Dm0hW?>*m%e*vuFSVJp$@5M{ZDbU`ggiNhSVFm+lL zbSfjc8A7qB*<)ljh;h6R`OZmJ#h=ZKC-lGtOb3;$y}gO7H<&pcDMN!rc7A|7nv+}H zxY=?&==3Ip*-8@C-jNMpsVreA z&xaPXPpGV#x1C+y5~E|}o!$y0pTyYQ<8^Tk0~Q#%>tzYD>2j)NT0N!9Dz-%@TNgrS zxt50S0niOpaB|0^Mab%>aOr}#v;Xv4seXDNF(EGLN zVKYI2lzoopUDYZ3t+71?@HDH&K5@oskez`3>Fp3193I9|AP)%;z?^899z5j>ar#&w#ZJ z%v{)sh;l>dNfxZV#{eoo7?(Ve30C!W3UtI9_m&p%H}oDmUi1-6pHB(D&U?(l+L0Wd zUi%+gcD~-of1LN&KdD{`U&S)Nj3J?ffMWCmj=W+>2#-TJ#t^@nA>j}~z0G=l*2A8H zptt3WUqB=nqVNy$HyB0fAJQEn82LeWNMZ1Ib%!YYfh3vtkYRhQ(|qEbbm#F2-Dl7# z7CltPLv}*_IRzquwgK{R6Z1ZG6GKC;gf4w5o!ePX;3wNIZ_Zx^sbGRXx71+cs*GUp|Ub#k{miv7T@#TA;FLr1l1j)(0Kf&>d4VHD%HTkVDs zo4JbATH1O1eQ8RxP46ANPBX2x+Pb4)f@sC8G4n3?$`92W(Qc-jU)io|Lg#CQ2ocwH4K2;qg3OwH0I43}5e; zI>MiK zN)ckTJ&DFXTPvi=`i9yv+Jz%*d0W@H%I+_iPFz$aTOX<{iZ4<^m`NURsXe%to2Sk0 zi``wX>$Zcva48omh-)g{!!kGYO401R7H(U9*RO?x&bSqmVgy;-PF9*I0JP{Yyc@uk zW_ib@y6m3;$EVn&H!Bf&Rf+4}edn_#;MZ3o#>`V(Q>@;XBj&ji-&V-!9G!Y-$P+oy zLthzv{b9jc$y9wCW*lPzg=V6;+$l<9fxrgZ2abJI^z&8HH>+y)*b3y*7w)u#w;&a; zMDA9YH=N>p0H*-BThwj5qUrJ5tqT*5P8=2y&Y{n2YWr-rhtw+Eh`kM&0RS@>yKdG7 zX(oj!p?GfY3_Cy9J1#E0V8v(kWvpD?&|;Is2Qq}E*1USxE1m;btu!JLipk|bFo;tO zA;cqdJJgq@NqKpRf--JywWA1SlnQX+( zLwzE5e^i(9S?qB(_yM|<&ytky8|0yQ13|{Ld%myp`@Syavn1u+;QP9i@3q0#AMAxL z<+G~A-Qd@CDH-IAF6E1rh<%*2!F{`rXv--eEqd-Gkaas2%m7c7H+eSr(*hlTO31?@_zA z8UXlV_l^d@OKSI00|0^~_(=mG&`*;F08(s1=`8HPlO1ir`iP3UaPzpDd_(OF1u1XsuDk7S8(t#0E7^-{i8G|*8oH^PbvSRN zyTK;H4I8x-q8rX&xo%ICc`0Pg!LV(bAW>HZ%)&{_LgUzM@CQO$0|dC>WiIxc?##;| z1$O{Mg`YG4PDd{iNPT?09-2caJC@S+s~$_W1+Tjao%Mj-P+n6Jr_j=rgPd^DCcS9# zR@CqiXNbc&xK>gosTDW}{Yd`08TLyc+UP@PtyeJ{q&1^lPL-#*xr66`Jb;^v(?;+( zS}$A!EHwcG6TC0@;VLY16jmg4T}mmc-3{JAZk?&O@*v%AaBl0k})q@#N{9fpC-${v&V_y+KdbsmSu1KC7_VIECjAfpWR5jDGB z!Ys-z(h9S$P_j-(htQGsd{g2m?E7_9!dOVkxSHeeTI*q!?~&DQ;kNb;KhP$jTrq%! zjyk4xnmZ2QJmKUkU9+Jfr^Qa7!)u!kc@9hZnnPu1&{=lyJ>Dt(t`@+y(dQ&utZ?X} z3!xhwlZ%DB@$GJBn7Yv)RZLpMLz}|h{v=mBzitl;5&_yqCYHQL4&h-4twhPSQd{SU zlcaM3s5q%YpESyVAqdBZRx5g44O8S@NVime+Yq?CBFH+#WLRF1k-*ezy+roVkgOd! z+qOp|w!;&{DvNf`4i}@m)3`jCtd6RWgK{Rn2TGy~YCVAq_7_bjl=i8#v$CrC!2LNP1o4@KjV7CIWv^~?nO*+yU z&vUmddsJ*sq_WZ>V2mNASh9Z-wUaDN-(I&LOYLOd3Kz?8+W8u_!>5Y;=TJKWgI9mo z1pf$3er#$m5QR7vMA^5g!3Y*5DB`1+Yr+$r!NEU++F@fQVn0ajNRWV@u@Qnoe+IRi zFu)ho?z!^*&8gjc)&HP&4{GF$@7nQ$`1N=cZYE!g(nq31q9OTu;f!zwt zPHm950V1E2u>)Mw2ejkr7R=^mWACRfuFQiF$uNSphe&X47yj&9o2_x&I%YvHMavTap=7u%V6K$W z)fL%p>_{=qh1b@6-sXnXb61DUE4d&wFkW2n1w1o5V2-rY&>CEbY>+Zu-U78w2$AU@ z4+;=&3|Q$FXhzATfu)C|ytGn5P5r}ZD>X%XhFE^}WS`4qqjw@acA>#(lPHtFbI9k{B z5$u}?zA4M|>}^I57}yltE?@(3+XJ8l=%B9Ac+FE#NILa(=OSKqx@dBg-%;@F&%x+4&b~pGe;(6EaT*JJQdEPEcXqFauNMxd% zu~eI65zAE|Gynz>Ke4ybCAou0 zgq|`fKOJI%(7R;QAPis`7$=FD>3tLI{Z*unKuG*!NCjie-3!=uKe8Ebbn{0E-Y-SDipQaJKsD8PnNy>f zhx_0B`+o&D{JyE_c^~U+v^H){PybV~#;reWt?0%(GF|huGgigZ9s9JZd8(!7ucjYP zmG;GXhb*a{q2ILq%lW^8{4hP71`ejkHFmd?HAnzPMM$=j)&LegxdU|1|zAxV;x<{`2?E>dvSB=^5bO zotK)0r~g4})G$DNXcq`!086iM{B0M=j>lp0qq{%|Cr}XlrfBrfc7ZsF{L6_^<8Q>M z@y8_9LyY<{OEtBN$1K%9L5v!KIT)vad6w#vllwyxR3JGixV)O5`VIO4De9?%d`wS0 zrl%g$Q`BR6>MsZ>x2_cHpQdBqlcIh*Jq3F!SA|w8`$~!$nx&}YNs9XA^b~m6I8W14 z7k#%dhil-Bdw#k>2Ya8SxVlYi7O|*vgTdvA2o86HyCEWXLnk zS>DKdbM3Eyqi!%K4ux8eR#%R(E=6r0#wQ&C$>Rpj&HXjwYvYXE2wT@N5ePJ)W+HZyqE-^3 zLo1_i*SaC^t6j~TGjtDWM^BU3oTRAF0%0}1bAXq%-swRXs32W0tF`AsCbV*r?dh^w zSx10h?T1;4`f~8^Qq+ATL~HbJ5M6D#a@ZR?^pg}dAi9G`R=SLU*S##~dEA-_dW$+@ z=clT-4UZ{Cv6B?_R)Lrsjkpy>t3x>7Ul=$Zty-WMMJ5(t(58}hyzuyx~M?cq3&us*#f!YFP7e( zC5L9|l8f+)+vx({C#+I-uG%}R9R(;>&|=urjGR^s{zhJLwRp7)Cn)#2OJTRo6=_$f zUx)DSqC#ZUO9dNSgD9VPSPi^Lv18NjQlE!>RZ1isMRVX=)*Y71D6PZsl*>tPJT5fBZ3G}j{$;ye89XSp5>!#|ce;xFKO*c+~gJ-FV3>pi&M zgX{f6xE@Z!07Fk%U0-lL?2mChc*b}yxE}Z$@j2}L`(SVCAs=Ax0rnnXk9vT;zX0ql zH_;&dEZD2m%ik94$%_q>4K435vF4+JdsTeV=_^`a!e&t#iG-ABeAr_CX1vd2(%Re2 z*;XO*FlZ4DoDy_DM|DTYLN%3RBX7hT7F%YGM+|e5jz>G%q?|aU_L=fV7w(W&v(8IQ+nGMR`jXS~HrHfW9?-$jXTSNe{UtBo+CduxWAtjJ7 z78^kbS&ZjWi|$v56QMbJbdErY*k?&t%Vq^KWq3E(MO8U^v|2hFHrNCbwBNJ`7#84C zaXQV5EC)KZEGpr&I8+8q$E(I;Ds?Xhno4;cWZ##W`&nTAL$aK~PT2ES~AvugnAhO)>V3E!wpBAI|;ms}=S z9k()<(m_MfzdhI+pPIE({|MN77W%#$ysLe4N)KGmY;6h|yE@jZ`fTPy+aXAd@U{T& zLL@jMo0C_eIea;sfrH!h3Id;!o$U5$U&-ex&P(xbaMEV-uWh6yr)^!>ESnsFW`$kO zuw;2o5c|Ubm9{s;{52QFNWYZB%^7mw+K|V1*xu5`rCoJ=<6$U%H|Xz+ti3q!))lYy zP)jSo1uqP@4+B`W8u2V`Naa$1m}=gvWdw8kBq?rYAwlS62r1n@Qo~Z#ZnXiM}`k(!`2@R_Sl>31`n|J zPf8>K-~bMND8nOG9K^1OHw+Kp5D25$X~h4L3=bp;5+c9J+J2JZ!65kUu=g(*9u5Q0 z6HA&m-)DFz4o-?z?We7=En@&YojS#--?zTa@?he1jNY{WV0rJ>|KE${O+OBb0QRTN z<9Gwl-cxDIa~qdWl|MGzVh*G}mt%|aX8x0v#gt?jBB#&vtancpw0t&oFW>a!8%gxb zIf=%y#OEN;+R1H@ae^a#hZz2!>4hDrOW`$EI_5y?6`-?v!b%kPI zX3c$>G#8!Ib3Ad-r@faP^!}Fd(31bx*OGtW*awcC3_ft|hu~OWTtFJokH?sDT4nwF z1-DQL!ToaW@9W6e@8?92hH(LSr?TB$Y70W+RmYtec0dU^{FZqV+*0JUAj(N_%g$x{ z+5+oKPa8yd+QmC7l`8zOi8>UYm6KosK?#80n{m?D7y5vPg+;0t=SsSYMIm6$39&FR zXAuL=0S&EkXzOOURmTjms;<2&5%iko#36T|h>M+y-A?p0qg~v%GYzab5#51grzUDB zcGucGZH^XdIgy*MObCe!_oQZUoC82J_WWYsx-PlC2s?XctY(9F1w@fQ~y;2t2^ z6YN3U9u#sP>{3zPjYHGW^TgZQzSMc2grrF;O=_HvObL~{T-s_b5uBEye%rdPDhflx zFV0UXQwKs?#~v3Y?Wxt&VSi!`3~WO6vhc0tt?7gKI<_%!d+E2n4e91l;25+WZsMtT z;M84U85Ld9Q+3$XcY_z9kJ3v_1NL#VUY|=F3e-KTNo$0|c8)|K=wc^Z zGuJF^a-1otj_;iGE#i4@axiN}pBwg(b8D|vdkIP$eK>?Ae4$0bZcV*lwK|dDibZaq z9C-T;1XHoNTJy);u8g|GuE4;P@u|g>Smne>oFNk`oCW?&X>G&PngQ9-W_JSE{0JiALhDk0xlYyVu{~^;NrEhKU|TcMO}hdLCOfmX6S~qb zg|s~uBA!+1Dnxd+e=%dJ65oTr$eWz=t{s7Hk9^OPBYk!t-|$T zHz#}9fLCo$3WKrsyjJ>au#^`^ylBx?Etz=+ZkIP2qcNDC)Vz*q9Z-1I0$IqT$O47V z%cv<@TgDG1xN+_VEl@$3>n7qfG+HQD;criSETC13?+j_5ILG6)jB;IxIt9tXl}RB= zMV&VS8WQxNzv?Bwl4*D2F{-#(OgqSw6qlZOQjU5ri+%MwQ=Q3T` zbN@3pn@^q4`=v}gFvXNR=M|>XFkhCko$&2sbS~kW$%wIXxv4bN#Ct~z#AJX;r`~Y< z{P%1FbkvfS@4U37>vX}nD|bil`!#VBqSkl z4F0jz*dT%4b6eiS2ggx0`g}>>&qwn7%W1gzBiTrxPuWPOpZ-FZ!!LhrGLo6c{I6#o z`7qG@OFN8}_=z@Fb0vMsxN<(1eH?gxGyUS3MLnJR8Bzao=;hKMZ;E$m%e$f9mHGJH z=JR!A{bQMr&(Yx%x8&}h`P{6Ez1K-Zo_;!Szoyy0^rL5)QZmm>Zu;VW33r$JOO}k! z6EX3mrz@LkiY@&6cIzeCy#0QpYC9Z;$>~l1fAWrR5b>kwuYaz+ z@ze8Pes7`1ZNVlgN%IPAb0^xG}hCds+BPV`zNApat@ zSAH)y7s6Ycd{~P1x~Lj}H+4)sLv{c~;?kHGw7P&DbOea`8w-@A9ZYI|9ICr>tPp@% z>fJ6-vi;_qSX?VqKv!%k+zlcpgG;W>c8NoUq;BY;WGccO-3U@LyQhL;S#Ii#XUaxT zcaa6Hcb>}b7*JP8jW|JAVB^%4G&gC$U$T2Zti}OLwcgiBvyl3;%J6zRJBPA4QpH81 zu1%uhFen~U(uM_@S^{}tsomHvl7))7y$NjGWZ4x*b&*;0F7)Mn?nCV96fL654ZDHy zOc2+nh~2R?gW#3Gw>-TPK|swQF!5|5=Y^pd96-3lRdxwcZJj&1lZtJF@uxw+xe}68 zR9HkuZ2W{yR5;3*bWG2@2i9Z!?uRUy?Yp=C3AyT*P08Tfai~e z=~h63!4VtPnbk6!D!SXacIQ5&CN%kECdY7Bb$+nhwWNrIfqPYnm`mf`7OQYX$9z6i zlYZfs{&_Esj%*>F79m*`m*v(Vv$o^JCbVYlLdPN%3~qGR3lW-7JFRY+n~CuLRUdm% zDsmRa%{XO3pbJdkVwpf85?+?sbyIJbLuhIf9ecvTb0_r5kT|}; zhyO9X=ud?5m$LGXneo1z;<1YIQGBFo^h-o2&Q93HMDTcvh18OoQKz_=P@2{BGN`H{HQs#)edk=EtTn zeft#zd?#^#H!QmK9kRH1@yiSD*dSi`oAO6_5Bdp z-x1~dSBJ=cj&J@>i0m^}e1OCmBu;Je4M#*-ZbhL}f{MureC5gi(a6r1NbuePJmNC{ z^>N@Fls$G9IC4)w@Sn)|TKG#_zBqyczX9lU^nnQ8h z5O@=;xwxj+q1+#xN&qZq4wBng3Cv@RWF`Z}MwXPI;8FuB6$tv6{ zH*--HA}g?t@&DO7&nCC6rO$sA*RyYS3;USJVXJnl01}BHL1dD6hnzEr^y!x*Bv~5I z$dWDJduUd$Lf|G{tyu84voCXLt zKqTyNrnUAK`Kfzx&V?j+cb0w24*iSaJ2Z&~zlSL=2>^3+up=EATORcEMBCSG* z%dL$^C(PS(a9&YfQyn@oBR1|KK-rA~xW4}xH2OS;@M(~Kc8ot(0U7#_0sTvJ_g^Ox ze#jv_j38~sCt$mQIV?&80)`T3D&`e&Z8_Ae+$%@AuB_B@L=}jKI7U5ef<3c*!7Ob~&>v6*&^n`Kosx6)An*sry|O^3B8lqZ0GJ_A>{9Td4e5TV4GG^Q3>6sB3+lo+B&C%%$0 zOnDkSKn$Osmdcfu1sQd4f1kp7EdsJGhkX()L6XfTL5hl71Dkpss7)X`@MWLgSmaUw zk}!;lgqs^ojMkoZ0;a)YUvxX2Z>n8iJDe;iCsOWs1t3=iP!A!v1C82ga=h&ZfQ}(U%{2{AY|$a4 z4T4lhib}CY3i8omhbAm=o3r(bn3@u8q^r@L%!%wlsyweH=iH`uIt1@Qe}MUxDYyBg z#hEw3LI)-CehZ)n!q$qUs_Hszxx?Io{-O7PgQj>UH+DJ29`{r?hIp_FcJAm+6!{l* z=r#lg+cE+igZS|;;!1J}`m&gJHR|S2C3k2%dO?6-Qv<3z9)?$5=!XL)G{7migyTn% zzqck-rnPNaUNs`$PR?8N@+d|p)sGS8r<@`|qa=z#p9}S?tJ{5N z7v}zkoI`*@!M-P!W8hL`+oNSQp;Lq#V|BB}One%w<;G3piX%3IkW6cG-falhs0yI?ZyaVuI|364{Nu4<>A3 zp9cZ(R51i}>juOz%neghz5<{|LF)VAH^vkv<;)c1+Ny>&Mqo-)is; z-uKw}Uex!x!PD;UhZ_B{*?y-+H3pXtt@1zY~z>CQ^-+^>26K0-_XJ{$YN zj_cP#pjMgKuqly(LlM}$X#+N!bkcG@4+-}sqTLuX@#;P!qicAHB5+P1i2 zHcr1nN8Gd|AY!{2skO-A=^^NWPz}$Xvw*E$DUP_cM=V>8_~4p)KeI>daNL=_oo4x1 zGF9!D7Ih2_st2Lf%yVH`U$VY%A5hY*|&EhPdvGuv6W=m6wCR zJuc67Ie>qo!7UPlH++IzmRakUTUVSH9GGcqYS(r-L|~v4ScY4|7U#?6_q zNUnH+FAKaowq}A>Y3r9oxNIW83U?IgXJ<&}=JR<@xAN1VcB%C1Oo!L4mP33n4w-~# z=`#Cn;k4Ce7O9EE=>XEDpkYh_(Bj&VChQcL)($GX z%lyeaVq0mSmRF*LGqn-6z>sY6WN362g_LPiRG2|r4rj&m+&!q2qgJsM?3|MOd{YE# zLmFlx6W+Q~H&Wjy+thX&OUDBSUd$`z6}#)czk%#fx%#y;!k7yLWMBwMILz2EV9v0oZW3Doq$geDl2sphh2~0v zd$j_nnL?xw0);-RN{3q)9X2iNQ&@R$=S^4XjbRBPD^#OT%6a7bSXZ1;_i@SoV>l;|j}YQXZAfHAra;!+uKX%+^hfp8+`{!r zc@;QrcdzCa`X8%-KNkM}!OGpg(^B@qaPBL4$9pVR+Mo;CA^5Kk>)S6DwSR2Eye^f0 zoWa+B_BSuZ{}n~ZpY7aVg&Jcd{A2qH;W)#<%~khyN6nNgM~i z-gErx)EEbG>|2sS|2Q@NRB`-HjsI5E_|ph_r^bJEYTVuGI-lRE@jrnY|Kk5%P-Ef` zP-6(Aex)giJsIok*ce{>0DY0h`f&8`-1wavzjNbvZv0Q`?IS0q6$p>sKHtxc_ry1I zV}F6anH$T4L3M9)W1!dmC^yDJo0f2B*QTRTY=#;PaAS!5J(8keX$6e5Z<2o6!a3p; zL|o$2x%Df;z6_$V3$MyyryER4t~5-g;AK3f!R!K2e^O71pvCu#z66D{o?zL=U_clZ&pPCkHs$32QM5w%?09m^ zy6|tp@f7Fy$PJlwG$dlXhsKcB>Nwl1;(KW7cfw3Fsf`$>F`Lm$h^0S~|f5LS`H3hSuQi4!obb6;TT1EZSTO5zJvjHcWQIEUCUK zuB;9DEOK!HFUF}6Hdu2#^5+`w=IFBZb2?>7zveHroZGrcv1A*kYX)(XqD;`di20Js&c^Vg4s7Gba?2fluyxiR9pp)5%!5Sy#hL49DIu?DHHb?C+_LBw~xKl4JS;%Adgg}Fib}A zln7~~ssb%KR1JjXlZ~_jxS(K^4WbRz3{Og`9uzItAn>aeF8h$IX*OeiR>D5GCo4WMIg+?G`Q zH2AT(O>@zNV@`nE*qyHAq%k?WjUsuUb=dvS3UNBU~`+# z``SDW{?X<(pZB$S)nIzfxl2qwHlv4Y`>p0SpZB#{{qie9n)4V$g#YBl``4S>FxcbE z-c&a=Uu$k7nvd!V`m^RX@9g-`S~;O#|L9EL52c|Wxb0_KhyVNgYx!Xq{joiQ zP?p0vjC+~$OCTuD(bx~q`6b}{j{YgN{4fsU-`OMx!C?XdSNaCu@A^NfJ${Yfk|YH_ z`Ryai`1c`P1P9*{?%$?Y(Cee}o%JoTA(dqnx}r}+LRC%pgO=b;{- z3NH`!j87Zd?Lp3-r|0RpQtzYRdZ3q88RpaE?tXA?f7D@qznwQ@m-v4xNgezu=KAH0 z0tMqFimtxu5B!4vcRmZs%WwK~cI#iXLqg#6cMt46L>%T{=Z&1qQAPYdk<9nmDAfl-RivvRFHopy`4gShF%0JAmV58m+n^}@iX#Eq~f8) z@iJ2Jys7<95W7X5jk?~7ReV*Qo=JBJ&z5;6X)<2xRuyNr*-F zjNf08cl{oV9XIR9!aTwm3w3R$4+M0dCyS@S+0K+J->MF8>{IHn+%}ii!tc&4JqTQB z_JV#?QFI9Mc9ciWwz14?PaE3k<%4=fPq+IQ3O(63%mS~-)L+^|P01Y8oZ8kr#)A{O z@rKvhNd`bL(v&oib5y9a_=IGFbD@&<245;}@^HqrO%%K`o2$$-$J$uKA3MdQX+I4b z7l=-Y=>^5I)%fk@>K`l7I?C1&>VV9Hj2XHX=PLHxk(vQxBj5|_D``?l^&xD{C{(A_ zAS7w!Ni|?D3eFk=;rQ6k0ddH9+QI7-FV8JRX^J2p(UZ${(+Np$La5*3eTgspKKEl0 zMU`rAZp>gU$Cp&3qh}|oE}YMao9rrTCq*PmBvTu)ame#cMUF_NQ+qc&@Z_1q)NNAx z6^=~kf#6b5Pq2zYOMe%UD|U`|wyFpTTgw`Bsk86dYqn>S@oR&Q`c9WC{JyZi)3R)CTH|ff&3Oi@luqSd~brT<}%g>-)`i zBI59@F~SjD5`;P~d&l3AC=Ta^4&e8>mfJ6bDyaBjmDX4qd~m$$;0k_hO&-j%?6_9} zFAc6m&63(lyOA|{1*IZ8pO$1kDSUo1C%qi7qo5cEZ*#yYSGg!7`y0^;4$^Lg^4$3C zXa)CKwBkgG8}S6`@?7mKL6>>Wuw27q#dI6nopD0AY7nuc2a%0Xp0+651a^;~aVk3z zl3F55zrAs!c->d4xNVKJ4ZA}(cds*FcbI6F`>|%&+kH;MZ!Ox`j^GtO0XZ6pbJ-wr z(}9V1^tn_9-q{Y+Si#PcCSlmAK{`oCucx3YD{RiiSjvL<0f18-{bx#|aV>N0P|0S93@95?o-MpilzdgG7SN3FkYw-MaG_zp@#eQf5HjGAS9HNL9aW-(vuv?mZ zHu(F2aW)KuK??md;%q2|A>S8fqX^;=F#Lo{wnqL&KA6sAW_=od*7r_1+UVj(BerMqC4E#q4UD@u-RVW7gineun7rVK%w`>=OAmM1{UCc`z)T$1 ztLka{gbvv{Hgt|SaRFZq-?q8Reb5>On(cOSUZ~;JIZMjq`+5LVdJD$1A7;Wz7 zV<4sxx}y6~67Q^R_@4&DA;Th(H(89**tNx~1N}m;8bkLo`Xa z+FZwBjh^b$#Ii7afC{|8vnUGuU80$M5c#@g%@sfMfi-kx8EhqAKjf-Mpw}4)snSY` zuB;i$_Bdt11Mg|@Y;i`0*%E^|J2k1!7d+?F@VG=NPV9jZHDK)+NWheqloSV$aZ#z= z#W#T?TPPrUJ4l)pW`zcx+H7t0UQ|=o64iahkaQLAXwo5yDKaOTCcPdmP(>Qx4MExiBt!F)Wr>Y9O<m zGbK);O7V2Vx^lMIoX4wgXIC9asyZoH)etrvED86)-K4>=B5R2zo!L;X$8CDaRf}AZ z;Y!Uy%k|WyI)X%A&>VK<3cBHZ?zYK7)4I=JRai!b?&oyt1jZkeqqnDp@elV=;FmVSQRZ@l11&M=G0-7bVB1^oqMUQW4=!4$ z>!l|y__gd+k-B*JP8_P-G`9M%_dTW>MwhB*6X?8EudSmR*K-k;!AuBQc(X&w zuTD4qNHMAcZdd7;;(UPZbaLI(EX1A(M-rhE2jcwD*={eg69oh~3H`KeLlZ}NZ}YfB z-vIF+D80F9p+oR^W-Y$?&3<-j96b8jvG!;WKB4dBqOgrx`aqb~?$T7A-}~8=bi{p* zg^_eXJQ6>H0kIK^0I+bf1yOWL?q1O?j-$D4RQy(vE@SB@?Axz zT%+|E_JT_r*8%b_;moAY3==r1+|1?#NEDLY=g#4FgzMBTfIMdOL!2wbmJ|mC=jaKX zd2ePf8c!x?>Gq)?n?TI;#u|Gpp-;@9=@C9jz=fhI_4wJr|8>rMUmekGc;M_^{K%PS zKNWhs@_6&MyXEoM(;)UZ z)*mnF!g@3-_Yg}rQT2ZHWnvHRQI>)tur%Gpqqe5@{i7-s`noFPc|r5Xvk1u5|U zqkcGNLr|FfGc>F*2m!xt_}>NEhz9`p6=)+qe(oK#y@R%Q(Dn}6{#~FAhcSwwnGad6 zFQ%v;4%+aa(Jwh03O=9tM$q=~e(#{|9kjiJHu@d3{R==Fwz-huH-R=8Qs9MFLks{n zq%Z?utmAZLNqQC4S!O*AR!4#DfZ^)uhHzg-`*jb61938Pv5F0QfU|zV!Xc!*O946K z;!1-G!F%ztg0`k|+O7e@u)KkrmFcXY&3u5idAOesXK<$xzO;2wvCgu!R?r5(?agRe zc?4%-@*2?n1lr^WXv1%v+Vkr=kn-%TT9!?DIMca#Qs=VAhX7{7z1ulBlm+t6X-MWc z>jj)0@axbG=yG;0*S6lGz5@}*qq>qhaN5Oj;aQU{z6xEu0mXi7E>%@O_7PHbh0bYu50P5%#+aw3wzy#BMHD3q>F0?iYKxGPo}RETh__QCGzP$LBhFh9N-|T zN;>ZA6P{STBE*qFIJ97{Nq#}qEOM|@C<;x>$~o8j8R~g3rxp^XW2?lPTkg4NwRA)h zByQpEMw`7VLUub(6OTJQzB_ZJ=9cWV!pe#EmW*lQz!7#wkqUHO@Afj8=OZg%i49sP zb4nm%39biCPb-ZZ-2Lnb_xme7@Mm&+F#s>Ry0}oetLQT)9}$$ww@qk zNqVxvO7p3K(V(q0*ORCg~CTQ!*MZ!_rR>r+!RE^q`XHX(tr z*!5^BRJMKVw%(1x5c7U1>|JPB=ff?E^qy};y-#|B$Xl))4gwC?#SNLv^G3K35TL@y z5eZhCj8W3l=)^R!uPo^tg{`8$5cL7ke3h_49|@b@x6b1n{&XKo z<=y;!a6Df9JCU|+`6_AqDa?~vcn-YBU)D!V@l`2?U!9k)ptq#_2I>Z3B=LK(+iGv; zbn*JWZtfl%pE%k(k$a2CedI{*#oR0AdW_Wft#46Nh4o0>cJ&HJ@*dK z-T~S>K>L1xwsGV1zC^sQYuMkY)&^k(TxfOBl}VVF@IDSXFtM6jEcIN3u508bMVq>YdqiVn*rj5peJHzONL5dc_+ zR)Cg?mm#L1pbzIRl7ap{BJG{aX)?|#eSX@D*FvzXs3(xq$*|50u{Vt)efP!c(q#KZ z4A@y{vOZA-do|c#H$2QUS-hAN<76}`TnT0}7|Q|J;dp?I)6A$5zMGBFvKVKUE%3@T*kCD6j1jDL z(W0A8m;AilfL@DC6q4N6`j`h?JQ628C0Vs)h4QFlJyZ5k8C0klAFoYff%kbUVch|| zU0724|LmRFlA}nnhF|5}GdAqon4Jr;h<)F=lf)(gLI{L_r$0hub!}PIReh@4tb4>o zS`wM*DI$W1@Xy?TPox`vKHIYkcMfW7b`;5x?x~iV5=Rsq$m9bWDz2ffZwklER>yl zG`dT3VV#>lKMiVo{vNq|Mi(P=lXl={0&!;RSA$6jCc9Pel$#lGFBG6d5<>;;A4?73 zA4I!{%e#w1_$(Qt-5wx7T|qAHp|%B{fY9Kwa3BfgJNRiM&qL3=g?PP_aJ{ZJpT~JU zv#u9;*dfy3Dk*Fk-zreSo~_dJ9nt0pi?6%5=lerqlghrPi{qFZp=O#ezV;#A2n}6# z@+pb<#|q8YtP&hMk;t8cIUG#J<<6yJw+?jORH$;l+6lUi_YQh1xY>I+b#}pCON$w@ zWCa(~zPhGJXkF8(QFPKsPHKbA1sw7?b_BKpHI1@(Ju`W#h+>(-1niTBPw2T3RkM0S zbMpcX&3w6?j%!Z-aHC9Fb7}2#2RE740vr`(gL5)^*KYUQux#+lW3VW9(%MMYt2?V$ zd+ZurvMQm}>k%9W?^&+x(eEp(`3d~=-u3Bz{WSP9`04k^)6?J&;HP)j%g+t2h3kfi0TUJpYScL?J)YDB{w8XnMh@7mRwrsGo;Xp((Wxy`)+FG>npNm))%)ycP;h z`C1$$Fd#Oe(@}s10BXhyat2LAICB@w-h|A&*8or-Yz5%w7=trqw$22aW_V{FY(e#;Y_FsnK02>33N{qi4~hjw8BZ8> zZ8tnt8l6%Q%2J3jG^B|u))J&aq(R}n`$~>wTU`_J7>jZj3ym`&Oz?sZPGTJ>Sc0!)N?B~ zx(pLl7T7Q`z}H+vw>v=I3%Q&nI613YtjcZ|&J^I_#?h;ZPz6?x_(~8#!VYDUM0zY& z(Z<&Huzgnrdbe*-GieGz)ajzhqlS)K=Sslm&CK8SaHf{co~dtS8pt<}m9jP749+F; zc)BZe+7m&B0bVv))leaup&L00h&Z?;WdCBGk(p7{YX|jp+hw~GRNG~BvVwW~0HeZ{ zzh#1QBsa4Q>kxl6DQz(9bIV>&pqu5a&$kRt)g7k+cLQiIv;oI1T8ASPCBZ?ZTb`^? zzJYu8ux+Wee9L}nz`_7cCL?=10Dy%%{iZ;7w?1PbJ`a(H{wd-1u};h5$MTOhM6OvN`G)qfR$} zZxttQ9sZAjPqHBoVh~TDkf`Cy@&irP30yZG0&cw;0Dy`bz9*dA1cH5~M*x+97yxdSZ zrON|}C;=;Ww!;>;z@<}{eqTY#`y}QMDgQkUzE|k}k1GE?4Zc_C{xgI6fjVAYXqhI~ z?+}!#QeD!sq`}dXqnD|}gzZZ=96JZogKg+WGIv9nb z8XmuLchzR(EkP&^?Tgut08z{rx$kmM`9<4L8!+PMSKT4p+AkCKBZ01o#92B{$3GK z3tmFeCFW^GP9NH^XKj)fb9ynS7jya}%!wxQB*Pb1hh4m{@0F{#8OXHpGG#5Ut)sii zIi(ZU&YrE`R%NZWK?vkd<$@rU`%^29-8rMNjk`x^2i`RUqOo!9YTT6pjrpp$o0H4* z=pAV1$_<;n0SKl#%y)38s_|*CD9@PNpK|}u4eW5{@FBR;_GaH(1>MOIYagw&o&;pz zsf%6(+pbCsj2(GAs9XkpxOcW=_*Qb1ehYwt{A3^yVY5YeiSgvU^Rs9%w=KAB+qP}n zwr$(C_c`0Pakg#Swr#ujce`KR*RO8>1)ZuSm8_NZLn<}1=E%q#cr}oet=^YFcKF~T z=sj6kW+Dnrs>U-p)8v#yU#}1%e^>^ER^8Dg8nkoP+dyurG{t#Tc4{GjS@LN#a5IHx zb#H%}757_LVO7Q+V7Dw?HojBJ(GvLaZ6Csm9RqQ2iOn5FdS@GHaombuc!6GBz<$@?E|BAuZEbDGGjQOz*C=F1Pty@HP)`2 zX#(u{;L0Sm;_j&iPe(N8P;s|-xO*R>7pWmD4_p>v)wGZZy{q4@8Pwmw{x|YQ>^COP zEK;I>P|72Ga6cObLI8G7LPop~*}-Z9-B<6;6dfV$~cykHow5P#s`F&oQd)2j@FYsc|`XD zXBRkqgpt`!d&Sb*fvQuo@b4g3W9#(d@YLmcdaJxi#+e~J-dEa%z?{sI-}c0z@qqPe zOna@bMPq|vYj*9n&guw@S|!9BYm!nVyeCP3TgWD^ew__CcE}yEz85@gS2bHtN&O&@ zZ4Q{fs%hj4Y=*@|uR)Uxvg_MDax!VRZjDgmNENSdDt)^9#TIAVwb#u9>CsT?w^O%B z{wcj`Qg}ISWdEm<(r1GKIi4^_oPZy%zL4doJfxeDWyGtU*^d5n>c5+N(#xS#J)g7R zf!eP~?;5g}E|NLlWcvNz{yvs#n7>c#Qw-hDen5q1w3_h&7v>|X)<5X`ABkjs3vs9d zyxk-~{|JUYYZc{Tb8%$40BDtp*BV=h+OQZX?WY`Hvl6y^w0kXL)lAoRGS|4c=Afrww=}<0AI^FzJpS1(VdBA5;~RP17K0W=nVB1sQ)TTO!3J zQ$LY$?&cK54@&!VNyEGgsPW|WIR4N#neeAT6vMbw=}3942&h;0#DoNcbgCsN6XXdx zSF9CAt=@K?$S%@C{iTnU((&cXROAMvuUE^l$vME%Wy9Rr&?Du*p$)9EjPH&-nSO4d zjRw6WJXe{`;kxCy%vF?S$nX(Ni_#ZPn@swV>|d-2q5MHJysvD6zw7=hc_jb?lsW9A zHB2Yt{$&tuP;3{eM*!crPx#?9f(RwIqt*5pB~7M3xv(r(@G7*30i8=p*y(B=l}!)s zouEyW20|ZBfo?bsgWQk;F=CAn=-}T1>QbW#J!l&9IgAJb58s`|S?-_Xrl+P^$$1Nx5&7kC_!#FvpjnILV~m{L|ba2%IMt-&qBJhk-$6} zXjDN-AImY8$Bxt~0XL|9eASval+wST8U1=Z&VIsl<`G{9B#2QDEF2P{6;xu@N6a~_ zeG6h#n_y)?ZLHaW5u5h&?q*n~jU6J;7zKlk>)uBDsSB693F{ywh&K&dc5nv$mVgft zKv)y3n#)8|3LM`*im%wmHmvGP)i{8dWvJSb@uo^-*WRCNsXGWxT8A3fv_Kcr;*bwQBt9nSeEJbw@jgLcgySHYJb zy+a^>=nVURupt)k$4Wk|H1rnFM6x^@?!`My|uj7*i>alH@$j&lV8`ID8U3 z!vwZr&mb^}<@{#dfzW(QX;Bz~5#ss+R~19WjL?<>H93qVQ>(HDmP{VENAu5tR>lB? z(ZSmb%(2NDoPnWP#BuOnHcguIkL-c%A&L)tHd*NWRt1%Yq}k@2vU>oDr6`GkU?Cbdi`ErG?IqwuG&giamMQvUyAI00IIOC;+EE}Z9B|JRRo&fj@N^|d zy18oLN|sd1C{wFD7fG-+di!oPMqEGOtqh;cl2nLpj@4IdPbzzz1ro1jS~*29(HbJ& z9uFXIgOoC#RxJ$wg}#F>o`jMWFehePl<9=@LH$nWnoQ((S`lLeaN*2|?eWVi-^ zBMu13<<9L0rjyg*6>)6c|JOaiD{4Lq`p>Yy-m!YfNiOdT8#!P7g+Qk_B$dF%0wKL@ zQq8@SCXYg}ZCM5QprH(syM9BgPq#qg`rk9*espmIHPb7D42l~cT2bYbF+)_IC(AsA zdPE3$z&h&HC*utvQQ8224LiavE^0?`W#BfpF73i)nd9GB={=853#%!Lp<1~fFwbaP?gA*bs_bsh%h5^ z=>aqr)a%r5O+i>4Z@M^NBx-}JCpbww+#)63&z*$s8vF+T@fZX{vutWU7%O@_vn}?= z^11k|bsk^DH6Nw=w`l-guC0e9<~B)mEdAH*L%4W3w7J5&gROeNqI z32xLC>Q<+}P-AHMi=EexU5b9`29LNr=MidAEF&2-?&ZMWt+{IBU0U8=gg$=Brz0rT zkm`qQ`MNPuZ|Q#@gh#%eW%)c_q-gR(_6Sf~G5)(kyLuRT>Z$!#+5;zr7+-i+8=^!K z$1fK7%5(|Ymk0~RoT(32%m5<#1GD9bBI@wxo09@`VRrxNiz3NuIp)KWOw=b;5|N(l z36|{XsH`(>@z>*2X1-!LujBvqLJ|Mtg?0@8_GPD`eA=I4ev5o!zoAIw=QeibEkaBE z7V^U7vTM|vtx>1nG)YQvhlnkNoA&Psny_BE=R8lGBG+dlbC;8I?uq!!j0F}-(j#63 z(zB;p!Lg)o>=Z*|ry9GA5HO|O%LtX`I=)0))B0zVB7h=g$qUW8A|q3><(wz+1qXVe z99x)NaXdM;*`z0Q?f64%D`Jve)nI$sP8-NmScs(jdQ}-HxJVt~oS z=M+Qg)9L7@&Qv$o&F%w|u@rKo@@Dcjw-uF>h=*dIT1a&Van>qpouFTMSTLI~T6Y^3H$T7z4VU7cAWO1oj&fX(p6KECCG^R9fgU3AKey&3!y!Jl;J96eBR@%a#O!#!KR zc<1g$Zqtd{rw62eeCHei_h2BoyqAX7$^vr1kv){-lvzoFG}r+UrhxFJNHezuew`4W zOv0@uPXYDjR2fLj*5!!njZB`MmhAik)hnAP&X!49Z=y-uF6&fH3XS6eNBA3BL?R)o zpjk(mTrkC3f_rvM1S6t}p?PpjDdxUt+LCxs$(h<|!cZqiDZ1vojSq=cHliiYk=X9i z)_>y^w>f?9+DVHGyZnMKpI=Y+&cXcjTz;HZ8`nL`EDrk2{Tg3uA?i_>dVWeh-s@MT@bG%_u2T5@a4PYyX0%S=rR`@P-8%4c`M2py zAL89b+ok8lM|h+QcktnK7yO+vcivB~HhR2Wj9x6R=sJYkzo#2GE#dl~(rB9Tw+!(< z1`d?z#^tG{wej!XuJ+Mt^pu@jm!#c4a{+$S&krzwf;2D))PEYki4Y)kr%_1}2>{?f z8TGfv-QLNB-qzH_(vaTL*3jIPkf5JQFVuL{hg3vvp!zsq7$B;;?O(wYE zsrfx{@*QPlUOm~(Ui33keOF6kZx_0!JlKqE$J{JvYvI5gpJHnwoP9QK4L=1T%74xOVPoVmHV&s>HXcp{FS`V<(^ zH|QRppX2nqFB56>N^yZwr%h-kq;N87h7F zX3oF1LZOKZ3mJm>(j_LRrmCxJ%jp7C`vg`dik;|kjk_{4gN@CnAK_sfa-~S!o14|t z)nA_7g!3H;W=T3AE_v|e>ojDFmHc{oN;|v_ZdJ@##s_>Syt*43TRJkw%rbyv`FduK zf>vGD;%{0S8?!L6FD|3P`VI3y>&wR^Jpi$+gO@v;1@EMXh>-2=Z(3c>29_l<&z_=M zF3C*{&^$aX>4kXgYiVC;3`V=72RnX(F0b4t><;nh943;aG zzJGimUhM7~I9pSvO9?G4FE4K{s#G}{{&C@#Ak)NaFGQTXrm%uvIGLD$82A?TU+V`b zZOxM!5=vw>(A3t};^OAk)+P=!yu7;N^=1Rt%f`j!tA$s@ElQQP!Ya}I$Ii}XxU#Z? zZW#+Q=*68=fJyDVN@5; zM1>MPB|D{8OF3A1No+~%LJp7g=991zNVXg}Mj*0Hmo#p=JYtRKwnuwG=4PGWyO|-1 zu3_PpAK^)zEd5WIiLG@))HTq%T;;F?vg7pSApy4U7{OVLY#<4%Pv1$@6<)^44Nnf{ z$Xuirp3a3+qPQ;_@wJ-9N3}LF%907lJ|Dc#NE5om9o)F#hhy3MV%;=}r5RseLjwZ? zMLt`bMoF&PIEvG6R%ojSzwEGU|u~UEKoc~NRb+q zG%4cH5OIk9F;+Juagh8pX!{C?csRfIbRXx4NDorHC|PPhi1nTTRep#oCHbI&WfTJ( zC?lbbWLQNvefA^xCNY9|aU(E9J%T_xR9~w|^(!bFKboimINbzvIibuFC7f z4F3q`GN8Nt{#eh?%hyfNiM~trN=60<^PrM}YHA~u!PCyT_LvOd$v57{uUaMN?uC1K zfzrm217tk3kZw6j;doSq<6@4Tg&n#bi36ea(fIv~f2ZHEe)lV_Tin$56#I?=*Bl4v zrXkJ${iY}sfl1k3K~7mXed2i<-N+pN zIL*#@TQKl9mh~^a?D{R!_F6~}9RS)s$SV~pxw?pLk=p|`oi!{&&B#02SDy+BUF9L! zbv`xt0z6Ln(tUr88o^_XTwT}WOU^)*T@v*wcXivpvb$KS6a1Rj!9KEA+s(Vy@g~q) z8f3eE!#nol2jChPUSJ!d{{_n(NvD=#2nR^qu3p1U3Xg9YXrJjTV{d^+Z;Ipj9ulbb zr`ROw_%MHP*IsUcVrGv+)l*N>_+2h76=m##KJ%MNvSI}?Ky0mbg=_R;wv3Z4YU;00A21vhxT_HNBmn>G z(aO(jZHN0yENFG;Im8&id^L%ssyO=#^|k2IkRqfZgovDI3GDd=U%@DWg-KjYBaw(w zjFu)!?5OhiX3VZe?hB%&Rd@3chpB}~ocj20a6uHwqWf_oSDJax49aoh!s@Q|4K)F%7H2~x}T=-tP(Ti(`l^#ITum(<>i=wOXExT>M4NT%DiR{K(!=Y8X~-;P?7hXsof$^6 z-~$U2KxCPkdU|pv%mq{G0i6Fr+9`cfG1L5$D^`va;YpoJJctz`ni8B}*W0FS(;bn3 z@^<##7$u!)dhh-u2 zQlvX^ev6Hb)%X8m&6X2(IGZn?n^Q!?VXgWN6S};zg3s&clOUmR(CYW~K6)CV0Hq3! zNY!hQv$T{f4v$ZY6q&M|g3WFR0}ESe6l(+y81?h{_7E8v>A@4Yxl*G`><>%9R413C zng@n3F_TJ8PVR2pA>j6O-W2%l7sU}EcPAJ_tl_Dqre!a#2Q`=Fv2S3sf46*WrY(Jn&-ZqCJe3(EP=0t(+XELWM8Xu@M<5S(k>9(svcSB& zlD)CT!EqboB04M%rq$lgB3!g;ol$tid}YR2hsMW{T{E2mAO7wYE-wkBx=?Y5+Aj3H zx?XVPst|bBFrfPtRZ`;$60>?QGwV8K@A0~#Xnk*qCtj*eCVheh2InIa{DMvpsmI39L8@B<`hP+%g1*uX)U&V3&}K)JCE%-<|vh8V~WFXjAvb|90yKk zg=1keVp=MK6nn-%x$#KsDfePFxQJDJZ{k{b2z|(6%xxwsKl6Dz0PlXiDR@*The4-E zlX9hSFsNUDKS_GoHfsm(N+T7Z5{-Pv;V)LW#oNWJ5?saxeUZmdQCn zdlWl0v{vfawoAL(ac!q(hz5}}D1nD7+|%C1+3^pdfyU&442k<>`YDTVYhwq$$ir#X zWlz7TSH<8g#>U#(IujdPLXio16W^-n`@#RKNyFi zoD!swWtfGE1UsAFq>Q}1tu5g5=qSW?S!ro_-Dz!vbvEVvWlc4$j7;b2bw~2qS+)t2 zGL2c+c5->S4@FT~@+lIRFL(C#+J-bb)GUp>ym@e+6ljGNona$rUfpV-ExD|-q1iD3 z2Fj+Xkv2t}&VIFuRkW2C+XZXP?xD%u<=UY*etOTF?88trYp(Eo*w`8)wA9M#>04V{ zseEpIh_0?KPGw#}1gWXsV?RrLT+HX!Ql*Se)}R77mC6*vfp!DIy&4F;lR>#7O3d2E zoCON|AkW&>od=G$igvSuIE97Q=dQuobarfQH&;WW3sqvCT9yEiZclqBj}->Vtu;GV zP!)n03KZl>;PLwX{Xaq!!kOpAMqp21*tKtu{D6%Tw~e~?^+38)uR+ItRcojzq)?SC z?Y7OT3wD?RcK)8b*E^6y+U|c>Z__%XPcA5gzSw&w} z#P<5GqIEW#d+(RVbWB_KR04$Gkjo3bc;wQwxVb}b@Vop@i=wfSs2bWjGQ2(*?{_16 z==8%%wOxNl(dh6ehAY3q=M#jwcIR41M-CVoL$d}^r2rMv{FDf1-jMI&u zG{ZWaX7tCUBWXd5%KS~M>_rTYj2!Mhmjrh3fB*Zu(qlD~vlke;9ck6Z!ABfzS|Cy) z6lfeSJ!~|C&ugWpgX5kxUBM*)1>dB1-n|@5pqu2%p+0n>7P_mM3`$jjaFw4`1O zyE&U61|dX1wH3~xmsh1L%WYW&w0AikHB&DD`&EeKVz9f64(K$mb z1PKsS_5fiytt9*RTqsX>pui2}9m%u#!CLd}=_!a~+rfyNi@qGWe|WDWNYLN^#~S$M zD0O`*^L;mu12jL5vCN}!T`vsyXjEocnSx@VoMosh?#hGa_m-v@aE91!_^xlpa3sS& zfDXb)-P#gG8TIipEm~sM5`_n )DI%@Si!g#|7pW>*eR^Nhg!{O1`yZ`)nIPX%%> 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 DGY~sW literal 0 HcmV?d00001 diff --git a/doc/engineering-reference/media/HW_reset.png b/doc/engineering-reference/media/HW_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdd3e2bf7134b126ae426fbb0abc35f6d8b39ea GIT binary patch literal 22652 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 JC&nJJ{{xj5I^zHU literal 0 HcmV?d00001 diff --git a/doc/input-output-reference/media/ASHP_Plant.png b/doc/input-output-reference/media/ASHP_Plant.png new file mode 100644 index 0000000000000000000000000000000000000000..9c54fb4a1373af1df68a5efb54f3529987c463b2 GIT binary patch literal 30462 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 literal 0 HcmV?d00001 diff --git a/doc/input-output-reference/media/HW_reset.png b/doc/input-output-reference/media/HW_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..bcdd3e2bf7134b126ae426fbb0abc35f6d8b39ea GIT binary patch literal 22652 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 JC&nJJ{{xj5I^zHU literal 0 HcmV?d00001 diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index d8acd597294..ac09ed4bf7c 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -2139,7 +2139,8 @@ namespace OutputProcessor { op->EnergyMeters(Meter).MNValue += op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).YRValue += op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMValue += op->EnergyMeters(Meter).TSValue; - if (op->isFinalYear) op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; + //if (op->isFinalYear) op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; + op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; } // Set Max for (int Meter = 1; Meter <= op->NumEnergyMeters; ++Meter) { @@ -2164,12 +2165,12 @@ namespace OutputProcessor { op->EnergyMeters(Meter).SMMaxVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMMaxValDate = TimeStamp; } - if (op->isFinalYear) { - if (op->EnergyMeters(Meter).TSValue > op->EnergyMeters(Meter).FinYrSMMaxVal) { - op->EnergyMeters(Meter).FinYrSMMaxVal = op->EnergyMeters(Meter).TSValue; - op->EnergyMeters(Meter).FinYrSMMaxValDate = TimeStamp; - } + //if (op->isFinalYear) { + if (op->EnergyMeters(Meter).TSValue > op->EnergyMeters(Meter).FinYrSMMaxVal) { + op->EnergyMeters(Meter).FinYrSMMaxVal = op->EnergyMeters(Meter).TSValue; + op->EnergyMeters(Meter).FinYrSMMaxValDate = TimeStamp; } + //} } // Set Min for (int Meter = 1; Meter <= op->NumEnergyMeters; ++Meter) { @@ -2193,12 +2194,12 @@ namespace OutputProcessor { op->EnergyMeters(Meter).SMMinVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMMinValDate = TimeStamp; } - if (op->isFinalYear) { - if (op->EnergyMeters(Meter).TSValue < op->EnergyMeters(Meter).FinYrSMMinVal) { - op->EnergyMeters(Meter).FinYrSMMinVal = op->EnergyMeters(Meter).TSValue; - op->EnergyMeters(Meter).FinYrSMMinValDate = TimeStamp; - } + //if (op->isFinalYear) { + if (op->EnergyMeters(Meter).TSValue < op->EnergyMeters(Meter).FinYrSMMinVal) { + op->EnergyMeters(Meter).FinYrSMMinVal = op->EnergyMeters(Meter).TSValue; + op->EnergyMeters(Meter).FinYrSMMinValDate = TimeStamp; } + //} } for (int Meter = 1; Meter <= op->NumEnergyMeters; ++Meter) { op->MeterValue(Meter) = 0.0; // Ready for next update diff --git a/src/EnergyPlus/OutputReportPredefined.cc b/src/EnergyPlus/OutputReportPredefined.cc index 0a122b37d0d..7fc434de30d 100644 --- a/src/EnergyPlus/OutputReportPredefined.cc +++ b/src/EnergyPlus/OutputReportPredefined.cc @@ -860,6 +860,7 @@ namespace OutputReportPredefined { // s->pdchEMmaxvaluetime = newPreDefColumn(state, s->pdstEMvalues,'Timestamp of Maximum') // Electricity Sub Table s->pdstEMelecvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Electricity"); + addFootNoteSubTable(state, s->pdstEMelecvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMelecannual = newPreDefColumn(state, s->pdstEMelecvalues, "Electricity Annual Value [GJ]"); s->pdchEMelecminvalue = newPreDefColumn(state, s->pdstEMelecvalues, "Electricity Minimum Value [W]"); s->pdchEMelecminvaluetime = newPreDefColumn(state, s->pdstEMelecvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -868,6 +869,7 @@ namespace OutputReportPredefined { // Gas Sub Table s->pdstEMgasvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Natural Gas"); + addFootNoteSubTable(state, s->pdstEMgasvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMgasannual = newPreDefColumn(state, s->pdstEMgasvalues, "Natural Gas Annual Value [GJ]"); s->pdchEMgasminvalue = newPreDefColumn(state, s->pdstEMgasvalues, "Natural Gas Minimum Value [W]"); s->pdchEMgasminvaluetime = newPreDefColumn(state, s->pdstEMgasvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -876,6 +878,7 @@ namespace OutputReportPredefined { // Cool SubTable s->pdstEMcoolvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Cooling"); + addFootNoteSubTable(state, s->pdstEMcoolvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMcoolannual = newPreDefColumn(state, s->pdstEMcoolvalues, "Cooling Annual Value [GJ]"); s->pdchEMcoolminvalue = newPreDefColumn(state, s->pdstEMcoolvalues, "Cooling Minimum Value [W]"); s->pdchEMcoolminvaluetime = newPreDefColumn(state, s->pdstEMcoolvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -884,6 +887,7 @@ namespace OutputReportPredefined { // Water SubTable s->pdstEMwatervalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Water"); + addFootNoteSubTable(state, s->pdstEMwatervalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMwaterannual = newPreDefColumn(state, s->pdstEMwatervalues, "Annual Value [m3]"); s->pdchEMwaterminvalue = newPreDefColumn(state, s->pdstEMwatervalues, "Minimum Value [m3/s]"); s->pdchEMwaterminvaluetime = newPreDefColumn(state, s->pdstEMwatervalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -892,6 +896,7 @@ namespace OutputReportPredefined { // Other KG SubTable s->pdstEMotherKGvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other by Weight/Mass"); + addFootNoteSubTable(state, s->pdstEMotherKGvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherKGannual = newPreDefColumn(state, s->pdstEMotherKGvalues, "Annual Value [kg]"); s->pdchEMotherKGminvalue = newPreDefColumn(state, s->pdstEMotherKGvalues, "Minimum Value [kg/s]"); s->pdchEMotherKGminvaluetime = newPreDefColumn(state, s->pdstEMotherKGvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -900,6 +905,7 @@ namespace OutputReportPredefined { // Other M3 SubTable s->pdstEMotherM3values = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other Volumetric"); + addFootNoteSubTable(state, s->pdstEMotherM3values, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherM3annual = newPreDefColumn(state, s->pdstEMotherM3values, "Annual Value [m3]"); s->pdchEMotherM3minvalue = newPreDefColumn(state, s->pdstEMotherM3values, "Minimum Value [m3/s]"); s->pdchEMotherM3minvaluetime = newPreDefColumn(state, s->pdstEMotherM3values, "Timestamp of Minimum {TIMESTAMP}"); @@ -908,6 +914,7 @@ namespace OutputReportPredefined { // Other M3 SubTable s->pdstEMotherLvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other Liquid/Gas"); + addFootNoteSubTable(state, s->pdstEMotherLvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherLannual = newPreDefColumn(state, s->pdstEMotherLvalues, "Annual Value [L]"); s->pdchEMotherLminvalue = newPreDefColumn(state, s->pdstEMotherLvalues, "Minimum Value [L]"); s->pdchEMotherLminvaluetime = newPreDefColumn(state, s->pdstEMotherLvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -916,6 +923,7 @@ namespace OutputReportPredefined { // Other J SubTable s->pdstEMotherJvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other"); + addFootNoteSubTable(state, s->pdstEMotherJvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherJannual = newPreDefColumn(state, s->pdstEMotherJvalues, "Annual Value [GJ]"); s->pdchEMotherJminvalue = newPreDefColumn(state, s->pdstEMotherJvalues, "Minimum Value [W]"); s->pdchEMotherJminvaluetime = newPreDefColumn(state, s->pdstEMotherJvalues, "Timestamp of Minimum {TIMESTAMP}"); diff --git a/src/EnergyPlus/Plant/EquipAndOperations.cc b/src/EnergyPlus/Plant/EquipAndOperations.cc new file mode 100644 index 00000000000..77a2185d53e --- /dev/null +++ b/src/EnergyPlus/Plant/EquipAndOperations.cc @@ -0,0 +1,1708 @@ +// EnergyPlus, Copyright (c) 1996-2023, The Board of Trustees of the University of Illinois, +// The Regents of the University of California, through Lawrence Berkeley National Laboratory +// (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge +// National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other +// contributors. All rights reserved. +// +// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the +// U.S. Government consequently retains certain rights. As such, the U.S. Government has been +// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, +// worldwide license in the Software to reproduce, distribute copies to the public, prepare +// derivative works, and perform publicly and display publicly, and to permit others to do so. +// +// Redistribution and use in source and binary forms, with or without modification, are permitted +// provided that the following conditions are met: +// +// (1) Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// (2) Redistributions in binary form must reproduce the above copyright notice, this list of +// conditions and the following disclaimer in the documentation and/or other materials +// provided with the distribution. +// +// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, +// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific prior +// written permission. +// +// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form +// without changes from the version obtained under this License, or (ii) Licensee makes a +// reference solely to the software portion of its product, Licensee must refer to the +// software as "EnergyPlus version X" software, where "X" is the version number Licensee +// obtained under this License and may not use a different name for the software. Except as +// specifically required in this Section (4), Licensee shall not use in a company name, a +// product name, in advertising, publicity, or other promotional activities any name, trade +// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly +// similar designation, without the U.S. Department of Energy's prior written consent. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace EnergyPlus { +namespace DataPlant { + + void ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme(EnergyPlusData &state) + { + if (this->oneTimeSetupComplete) return; + + SetupOutputVariable(state, + "Supervisory Plant Heat Pump Operation Mode", + OutputProcessor::Unit::unknown, + this->Report.AirSourcePlant_OpMode, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + + SetupOutputVariable(state, + "Supervisory Plant Auxiliary Boiler Mode", + OutputProcessor::Unit::unknown, + this->Report.BoilerAux_OpMode, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Polled Building Heating Load", + OutputProcessor::Unit::W, + this->Report.BuildingPolledHeatingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Polled Building Cooling Load", + OutputProcessor::Unit::W, + this->Report.BuildingPolledCoolingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Primary Plant Heating Load", + OutputProcessor::Unit::W, + this->Report.PrimaryPlantHeatingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Primary Plant Cooling Load", + OutputProcessor::Unit::W, + this->Report.PrimaryPlantCoolingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + + // routine for setup of chiller heater supervisory plant operation scheme + for (int zoneListNum = 1; zoneListNum <= state.dataHeatBal->NumOfZoneLists; ++zoneListNum) { + if (this->ZoneListName == state.dataHeatBal->ZoneList(zoneListNum).Name) { + + this->PlantOps.NumOfZones = state.dataHeatBal->ZoneList(zoneListNum).NumOfZones; + this->ZonePtrs.allocate(this->PlantOps.NumOfZones); + for (int zoneNumInList = 1; zoneNumInList <= state.dataHeatBal->ZoneList(zoneListNum).NumOfZones; ++zoneNumInList) { + this->ZonePtrs(zoneNumInList) = state.dataHeatBal->ZoneList(zoneListNum).Zone(zoneNumInList); + } + } + } + + if (state.dataHVACGlobal->NumPrimaryAirSys > 0) { + this->AirLoopPtrs.allocate(state.dataHVACGlobal->NumPrimaryAirSys); // size to all, if zero then that airloop is not served + this->PlantOps.NumOfAirLoops = state.dataHVACGlobal->NumPrimaryAirSys; + this->AirLoopPtrs = 0; + for (int AirLoopIndex = 1; AirLoopIndex <= state.dataHVACGlobal->NumPrimaryAirSys; ++AirLoopIndex) { // loop over the air systems + auto &AirToZoneNodeInfo(state.dataAirLoop->AirToZoneNodeInfo(AirLoopIndex)); + for (int ZonesPolledIndex = 1; ZonesPolledIndex <= this->PlantOps.NumOfZones; ++ZonesPolledIndex) { + for (int ZonesCooledIndex = 1; ZonesCooledIndex <= AirToZoneNodeInfo.NumZonesCooled; ++ZonesCooledIndex) { + if (AirToZoneNodeInfo.CoolCtrlZoneNums(ZonesCooledIndex) == this->ZonePtrs(ZonesPolledIndex)) { + this->AirLoopPtrs(AirLoopIndex) = AirLoopIndex; + } + } + for (int ZonesHeatedIndex = 1; ZonesHeatedIndex <= AirToZoneNodeInfo.NumZonesHeated; ++ZonesHeatedIndex) { + if (AirToZoneNodeInfo.HeatCtrlZoneNums(ZonesHeatedIndex) == this->ZonePtrs(ZonesPolledIndex)) { + this->AirLoopPtrs(AirLoopIndex) = AirLoopIndex; + } + } + } + } + } + + if (this->PlantOps.NumSimultHeatCoolHeatingEquipLists > 0 && this->PlantOps.NumSimultHeatCoolCoolingEquipLists > 0) { + this->PlantOps.SimultHeatCoolOpAvailable = true; + } + + this->PlantLoopIndicesBeingSupervised.allocate(state.dataPlnt->TotNumLoops); + this->PlantLoopIndicesBeingSupervised = 0; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + auto &this_plant_loop(state.dataPlnt->PlantLoop(LoopNum)); + for (int OpNum = 1, OpNum_end = this_plant_loop.NumOpSchemes; OpNum <= OpNum_end; ++OpNum) { + auto const &this_op_scheme(this_plant_loop.OpScheme(OpNum)); + if (this_op_scheme.Type == OpScheme::ChillerHeaterSupervisory) { + this->PlantLoopIndicesBeingSupervised(LoopNum) = LoopNum; + } + } + } + + // find an setup any Plant Load Profile objects on the supervised loops + int numLoadProfileOnSupervisedLoops = 0; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for any plant load profile on loop demand side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Demand)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::PlantLoadProfile) { + ++numLoadProfileOnSupervisedLoops; + } + } + } + } + } + this->PlantOps.numPlantLoadProfiles = numLoadProfileOnSupervisedLoops; + + this->PlantLoadProfileComps.allocate(this->PlantOps.numPlantLoadProfiles); + int loadProfileCompNum = 1; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for any plant load profile on loop demand side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Demand)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::PlantLoadProfile) { + PlantLocation foundLoc; + foundLoc.loopNum = LoopNum; + foundLoc.loopSideNum = DataPlant::LoopSideLocation::Demand; + foundLoc.branchNum = BranchNum; + foundLoc.compNum = CompNum; + PlantLoadProfileComps(loadProfileCompNum) = foundLoc; + ++loadProfileCompNum; + } + } + } + } + } // end load profile setup + + // find and setup any boilers on the supervised loops + int numBoilersOnSupervisedLoops = 0; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for any Boiler on loop supply side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Supply)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::Boiler_Simple) { + ++numBoilersOnSupervisedLoops; + } + } + } + } + } + this->PlantOps.numBoilers = numBoilersOnSupervisedLoops; + this->PlantBoilerComps.allocate(this->PlantOps.numBoilers); + int BoilerCompNum = 1; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for boiler on loop supply side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Supply)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::Boiler_Simple) { + PlantLocation foundLoc; + foundLoc.loopNum = LoopNum; + foundLoc.loopSideNum = DataPlant::LoopSideLocation::Supply; + foundLoc.branchNum = BranchNum; + foundLoc.compNum = CompNum; + PlantBoilerComps(BoilerCompNum) = foundLoc; + ++BoilerCompNum; + } + } + } + } + } // end boiler setup + + // find and setup any fluid to fluid heat exchangers on the supervised loops + this->SecondaryPlantLoopIndicesBeingSupervised.allocate(state.dataPlnt->TotNumLoops); + this->SecondaryPlantLoopIndicesBeingSupervised = 0; + int numHXsOnSupervisedLoops = 0; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for any Heat axchangers on loop supply side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Supply)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::FluidToFluidPlantHtExchg) { + ++numHXsOnSupervisedLoops; + } + } + } + } + } + this->PlantOps.numPlantHXs = numHXsOnSupervisedLoops; + this->PlantHXComps.allocate(this->PlantOps.numPlantHXs); + int HXCompNum = 1; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + // search for boiler on loop supply side + auto &this_plant_loopside(state.dataPlnt->PlantLoop(LoopNum).LoopSide(DataPlant::LoopSideLocation::Supply)); + for (int BranchNum = 1; BranchNum <= this_plant_loopside.TotalBranches; ++BranchNum) { + for (int CompNum = 1; CompNum <= this_plant_loopside.Branch(BranchNum).TotalComponents; ++CompNum) { + if (this_plant_loopside.Branch(BranchNum).Comp(CompNum).Type == DataPlant::PlantEquipmentType::FluidToFluidPlantHtExchg) { + PlantLocation foundLoc; + foundLoc.loopNum = LoopNum; + foundLoc.loopSideNum = DataPlant::LoopSideLocation::Supply; + foundLoc.branchNum = BranchNum; + foundLoc.compNum = CompNum; + PlantHXComps(HXCompNum) = foundLoc; + ++HXCompNum; + + // store this loop as being a secondary loop + // assuming that since there is a heat exchanger on the supply side of this loop it is a secondary loop. + this->SecondaryPlantLoopIndicesBeingSupervised(LoopNum) = LoopNum; + } + } + } + } + } // end HX setup + + // setup Comp.SetPointNodeNum for machines + if (this->PlantOps.NumCoolingOnlyEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumCoolingOnlyEquipLists; ++equipListNum) { + + int NumComps = this->CoolingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->CoolingOnlyEquipList(equipListNum).Comp(compNum)); + PlantLocation compLoc; + DataPlant::PlantEquipmentType Type = static_cast( + getEnumValue(PlantEquipTypeNamesUC, UtilityRoutines::makeUPPER(this_equip.TypeOf))); + bool errFlag1(false); + int NumSearchResults(0); + PlantUtilities::ScanPlantLoopsForObject(state, this_equip.Name, Type, compLoc, errFlag1, _, _, NumSearchResults); + if (NumSearchResults == 1) { + + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + this->PlantOps.PrimaryChWLoopIndex = compLoc.loopNum; + } else if (NumSearchResults > 1) { + bool foundit = false; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + int PltSizNum = state.dataPlnt->PlantLoop(LoopNum).PlantSizNum; + if (PltSizNum > 0) { + if (state.dataSize->PlantSizData(PltSizNum).LoopType == DataSizing::TypeOfPlantLoop::Cooling) { + int innerNumSearchResults = 0; + PlantUtilities::ScanPlantLoopsForObject( + state, this_equip.Name, Type, compLoc, errFlag1, _, _, innerNumSearchResults, _, LoopNum); + if (innerNumSearchResults == 1) { + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + foundit = true; + continue; + } + } + } + } + } + if (!foundit) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a cooling plant loop.", + this->Name, + this_equip.Name)); + } + } else if (NumSearchResults == 0) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a plant loop.", + this->Name, + this_equip.Name)); + } + int inletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumIn; + int outletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumOut; + this_equip.DemandNodeNum = inletNode; + this_equip.SetPointNodeNum = outletNode; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme(1) + .OpSchemePtr = 1; // TODO check + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + } + } + if (this->PlantOps.NumHeatingOnlyEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumHeatingOnlyEquipLists; ++equipListNum) { + + int NumComps = this->HeatingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->HeatingOnlyEquipList(equipListNum).Comp(compNum)); + PlantLocation compLoc; + DataPlant::PlantEquipmentType Type; + Type = static_cast( + getEnumValue(PlantEquipTypeNamesUC, UtilityRoutines::makeUPPER(this_equip.TypeOf))); + bool errFlag1(false); + int NumSearchResults(0); + PlantUtilities::ScanPlantLoopsForObject(state, this_equip.Name, Type, compLoc, errFlag1, _, _, NumSearchResults); + if (NumSearchResults == 1) { + + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + this->PlantOps.PrimaryHWLoopIndex = compLoc.loopNum; + + } else if (NumSearchResults > 1) { + + bool foundit = false; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + int PltSizNum = state.dataPlnt->PlantLoop(LoopNum).PlantSizNum; + if (PltSizNum > 0) { + if (state.dataSize->PlantSizData(PltSizNum).LoopType == DataSizing::TypeOfPlantLoop::Heating) { + int innerNumSearchResults = 0; + PlantUtilities::ScanPlantLoopsForObject( + state, this_equip.Name, Type, compLoc, errFlag1, _, _, innerNumSearchResults, _, LoopNum); + if (innerNumSearchResults == 1) { + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + foundit = true; + continue; + } + } + } + } + } + if (!foundit) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a heating plant loop.", + this->Name, + this_equip.Name)); + } + } else if (NumSearchResults == 0) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a plant loop.", + this->Name, + this_equip.Name)); + } + int inletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumIn; + int outletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumOut; + this_equip.DemandNodeNum = inletNode; + this_equip.SetPointNodeNum = outletNode; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme(1) + .OpSchemePtr = 1; // TODO check + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + } + } + + if (this->PlantOps.NumSimultHeatCoolCoolingEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolCoolingEquipLists; ++equipListNum) { + + int NumComps = this->SimultHeatCoolCoolingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolCoolingEquipList(equipListNum).Comp(compNum)); + PlantLocation compLoc; + DataPlant::PlantEquipmentType Type; + Type = static_cast( + getEnumValue(PlantEquipTypeNamesUC, UtilityRoutines::makeUPPER(this_equip.TypeOf))); + bool errFlag1(false); + int NumSearchResults(0); + PlantUtilities::ScanPlantLoopsForObject(state, this_equip.Name, Type, compLoc, errFlag1, _, _, NumSearchResults); + if (NumSearchResults == 1) { + + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + + } else if (NumSearchResults > 1) { + + bool foundit = false; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + int PltSizNum = state.dataPlnt->PlantLoop(LoopNum).PlantSizNum; + if (PltSizNum > 0) { + if (state.dataSize->PlantSizData(PltSizNum).LoopType == DataSizing::TypeOfPlantLoop::Cooling) { + int innerNumSearchResults = 0; + PlantUtilities::ScanPlantLoopsForObject( + state, this_equip.Name, Type, compLoc, errFlag1, _, _, innerNumSearchResults, _, LoopNum); + if (innerNumSearchResults == 1) { + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + foundit = true; + continue; + } + } + } + } + } + if (!foundit) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a cooling plant loop.", + this->Name, + this_equip.Name)); + } + } else if (NumSearchResults == 0) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a plant loop.", + this->Name, + this_equip.Name)); + } + int inletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumIn; + int outletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumOut; + this_equip.DemandNodeNum = inletNode; + this_equip.SetPointNodeNum = outletNode; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme(1) + .OpSchemePtr = 1; // TODO check + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + } + } + + if (this->PlantOps.NumSimultHeatCoolHeatingEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolHeatingEquipLists; ++equipListNum) { + + int NumComps = this->SimultHeatCoolHeatingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolHeatingEquipList(equipListNum).Comp(compNum)); + PlantLocation compLoc; + DataPlant::PlantEquipmentType Type; + Type = static_cast( + getEnumValue(PlantEquipTypeNamesUC, UtilityRoutines::makeUPPER(this_equip.TypeOf))); + bool errFlag1(false); + int NumSearchResults(0); + PlantUtilities::ScanPlantLoopsForObject(state, this_equip.Name, Type, compLoc, errFlag1, _, _, NumSearchResults); + if (NumSearchResults == 1) { + + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + + } else if (NumSearchResults > 1) { + + bool foundit = false; + for (int LoopNum = 1; LoopNum <= state.dataPlnt->TotNumLoops; ++LoopNum) { + if (this->PlantLoopIndicesBeingSupervised(LoopNum) > 0) { + int PltSizNum = state.dataPlnt->PlantLoop(LoopNum).PlantSizNum; + if (PltSizNum > 0) { + if (state.dataSize->PlantSizData(PltSizNum).LoopType == DataSizing::TypeOfPlantLoop::Heating) { + int innerNumSearchResults = 0; + PlantUtilities::ScanPlantLoopsForObject( + state, this_equip.Name, Type, compLoc, errFlag1, _, _, innerNumSearchResults, _, LoopNum); + if (innerNumSearchResults == 1) { + this_equip.LoopNumPtr = compLoc.loopNum; + this_equip.LoopSideNumPtr = compLoc.loopSideNum; + this_equip.BranchNumPtr = compLoc.branchNum; + this_equip.CompNumPtr = compLoc.compNum; + foundit = true; + continue; + } + } + } + } + } + if (!foundit) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a heating plant loop.", + this->Name, + this_equip.Name)); + } + } else if (NumSearchResults == 0) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" " + "component \"{}\" was not found on a plant loop.", + this->Name, + this_equip.Name)); + } + int inletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumIn; + int outletNode = state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .NodeNumOut; + this_equip.DemandNodeNum = inletNode; + this_equip.SetPointNodeNum = outletNode; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .OpScheme(1) + .OpSchemePtr = 1; // TODO check + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + } + } + + // process primary loops for supply inlet node numbers + + // examine supply inlet branch on primary chilled water loop to see if there is a tank, use outlet of tank if so + + if (this->PlantOps.PrimaryChWLoopIndex > 0) { + + this->PlantOps.PrimaryChWLoopSupInletNode = + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).LoopSide(DataPlant::LoopSideLocation::Supply).Branch(1).NodeNumIn; + for (int numComps = 1; numComps <= state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex) + .LoopSide(DataPlant::LoopSideLocation::Supply) + .Branch(1) + .TotalComponents; + ++numComps) { + auto const &this_Comp(state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex) + .LoopSide(DataPlant::LoopSideLocation::Supply) + .Branch(1) + .Comp(numComps)); + if (this_Comp.Type == DataPlant::PlantEquipmentType::ChilledWaterTankMixed || + this_Comp.Type == DataPlant::PlantEquipmentType::ChilledWaterTankStratified) { + // assume tank is on chilled water return for use as a buffer tank, use the outlet of the tank instead of the inlet when + // calculating the current load on the primary chilled water plant + this->PlantOps.PrimaryChWLoopSupInletNode = this_Comp.NodeNumOut; + } + } + } + + if (this->PlantOps.PrimaryHWLoopIndex > 0) { + this->PlantOps.PrimaryHWLoopSupInletNode = + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).LoopSide(DataPlant::LoopSideLocation::Supply).Branch(1).NodeNumIn; + } + // process dedicated heat recovery water to water heatpumps to control + if (this->PlantOps.DedicatedHR_ChWRetControl_Input && this->PlantOps.DedicatedHR_HWRetControl_Input) { + bool founditCooling = false; + bool founditHeating = false; + for (auto &thisHP : state.dataEIRPlantLoopHeatPump->heatPumps) { + std::string const thisPLHPName = UtilityRoutines::makeUPPER(thisHP.name); + // find cooling side heat pump + std::string const targetDedHRCoolName = UtilityRoutines::makeUPPER(this->DedicatedHR_ChWRetControl_Name); + if (thisPLHPName == targetDedHRCoolName) { // found it + this->DedicatedHR_CoolingPLHP = thisHP; // store pointer to cooling side of heat pump + founditCooling = true; + + int pltSizNum = state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum).PlantSizNum; + this->PlantOps.DedicatedHR_SecChW_DesignCapacity = state.dataSize->PlantSizData(pltSizNum).DesCapacity; + this->PlantOps.SecondaryChWLoopIndex = this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum; + + // set up load side plant loop information for cooling side of heat pump + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .OpScheme(1) + .OpSchemePtr = 1; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + + // setup source side plant loop data structure information for cooling side of heat pump + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .OpScheme(1) + .OpSchemePtr = 1; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + } + + // find heating side heat pump + std::string const targetDedHRHeatName = UtilityRoutines::makeUPPER(this->DedicatedHR_HWRetControl_Name); + if (thisPLHPName == targetDedHRHeatName) { // found it + this->DedicatedHR_HeatingPLHP = thisHP; // store pointer to heating side of heat pump + founditHeating = true; + + int pltSizNum = state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum).PlantSizNum; + this->PlantOps.DedicatedHR_SecHW_DesignCapacity = state.dataSize->PlantSizData(pltSizNum).DesCapacity; + this->PlantOps.SecondaryHWLoopIndex = this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum; + + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .OpScheme(1) + .OpSchemePtr = 1; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + + // setup source side plant loop data structure information for heating side of heat pump + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .OpScheme.allocate(1); + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .OpScheme(1) + .OpSchemePtr = 1; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + } + } + + if (!founditCooling) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" component " + "\"{}\" was not found on a cooling plant loop.", + this->Name, + this->DedicatedHR_ChWRetControl_Name)); + } + if (!founditHeating) { + ShowSevereError(state, + format("ChillerHeaterSupervisoryOperationData::OneTimeInitChillerHeaterChangeoverOpScheme problem=\"{}\" component " + "\"{}\" was not found on a heating plant loop.", + this->Name, + this->DedicatedHR_ChWRetControl_Name)); + } + if (founditCooling && founditHeating) { + this->PlantOps.DedicatedHR_Present = true; + SetupOutputVariable(state, + "Supervisory Plant Heat Recovery Operation Mode", + OutputProcessor::Unit::unknown, + this->Report.DedicHR_OpMode, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Secondary Plant Heating Load", + OutputProcessor::Unit::W, + this->Report.SecondaryPlantHeatingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + SetupOutputVariable(state, + "Supervisory Plant Operation Secondary Plant Cooling Load", + OutputProcessor::Unit::W, + this->Report.SecondaryPlantCoolingLoad, + OutputProcessor::SOVTimeStepType::System, + OutputProcessor::SOVStoreType::Average, + this->Name); + } + } + + this->oneTimeSetupComplete = true; + } + + void ChillerHeaterSupervisoryOperationData::EvaluateChillerHeaterChangeoverOpScheme(EnergyPlusData &state) + { + + DetermineCurrentBuildingLoads(state); + DetermineCurrentPlantLoads(state); + ProcessSupervisoryControlLogicForAirSourcePlants(state); + InitAirSourcePlantEquipmentOff(state); + ProcessAndSetAirSourcePlantEquipLists(state); + ProcessAndSetDedicatedHeatRecovWWHP(state); + ProcessAndSetAuxilBoiler(state); + } + + void ChillerHeaterSupervisoryOperationData::DetermineCurrentBuildingLoads(EnergyPlusData &state) + { + // Poll the loads on the zones to help decide how to run + + Real64 sumZonePredictedHeatingLoad(0.0); + Real64 sumZonePredictedCoolingLoad(0.0); + for (int zoneIndexinList = 1; zoneIndexinList <= this->PlantOps.NumOfZones; ++zoneIndexinList) { + int thisZoneIndex = this->ZonePtrs(zoneIndexinList); + Real64 ZoneMult = state.dataHeatBal->Zone(thisZoneIndex).Multiplier * state.dataHeatBal->Zone(thisZoneIndex).ListMultiplier; + // aggregate required outputs to setpoint, with zone multipliers included + sumZonePredictedCoolingLoad += + min(0.0, + state.dataZoneEnergyDemand->ZoneSysEnergyDemand(thisZoneIndex).OutputRequiredToCoolingSP * ZoneMult); // sum only negative values + sumZonePredictedHeatingLoad += + max(0.0, + state.dataZoneEnergyDemand->ZoneSysEnergyDemand(thisZoneIndex).OutputRequiredToHeatingSP * ZoneMult); // sum only positive values + } + + // now add in ventilation loading at the central air system level + Real64 sumAirSysVentHeatingLoad(0.0); + Real64 sumAirSysVentCoolingLoad(0.0); + + for (int airLoopsServedIndex = 1; airLoopsServedIndex <= this->PlantOps.NumOfAirLoops; ++airLoopsServedIndex) { + int AirLoopNum = this->AirLoopPtrs(airLoopsServedIndex); + Real64 outAir_H = state.dataEnvrn->OutEnthalpy; + Real64 outAirMdot = state.dataAirLoop->AirLoopFlow(AirLoopNum).OAFlow; + Real64 retAir_Tdb = state.dataLoopNodes->Node(state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum).AirLoopReturnNodeNum(1)).Temp; + Real64 retAir_w = state.dataLoopNodes->Node(state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum).AirLoopReturnNodeNum(1)).HumRat; + Real64 ventLoad = outAirMdot * (Psychrometrics::PsyHFnTdbW(retAir_Tdb, retAir_w) - outAir_H); // negative is cooling + if (ventLoad > DataHVACGlobals::SmallLoad) { // add to heating + sumAirSysVentHeatingLoad += ventLoad; + } else if (ventLoad < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) { // add to cooling + sumAirSysVentCoolingLoad += ventLoad; + } + } + + // now add in any process loads from plant load profiles on the controlled loops. + Real64 sumLoadProfileHeatingLoad(0.0); + Real64 sumLoadProfileCoolingLoad(0.0); + for (int NumProcLoad = 1; NumProcLoad <= this->PlantOps.numPlantLoadProfiles; ++NumProcLoad) { + Real64 load = 0.0; + DataPlant::CompData::getPlantComponent(state, PlantLoadProfileComps(NumProcLoad)).compPtr->getCurrentPower(state, load); + if (load > 0.0) { + sumLoadProfileHeatingLoad += load; + } else { + sumLoadProfileCoolingLoad += load; + } + } + + this->Report.BuildingPolledCoolingLoad = sumZonePredictedCoolingLoad + sumAirSysVentCoolingLoad + sumLoadProfileCoolingLoad; + this->Report.BuildingPolledHeatingLoad = sumZonePredictedHeatingLoad + sumAirSysVentHeatingLoad + sumLoadProfileHeatingLoad; + // end collect loads. + } + + void ChillerHeaterSupervisoryOperationData::DetermineCurrentPlantLoads(EnergyPlusData &state) + { + + // Calculate load on primary chilled water loop and store in PrimaryPlantCoolingLoad + + Real64 CW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).MassFlowRate; + Real64 const CpCW = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidName, + state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).Temp, + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidIndex, + "DetermineCurrentPlantLoads"); + Real64 CW_Qdot = + min(0.0, + CW_RetMdot * CpCW * + (this->Setpoint.PrimCW - + state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).Temp)); // power = Mdot Cp Delta T, cooling load is negative + this->Report.PrimaryPlantCoolingLoad = CW_Qdot; + + // Calculate load on primary hot water loop and store in PrimaryPlantHeatingLoad + // int HWSupInletNode = this->PlantOps.PrimaryHWLoopSupInletNode; + // state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).LoopSide(DataPlant::LoopSideLocation::Supply).Branch(1).NodeNumIn; + Real64 HW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).MassFlowRate; + Real64 const CpHW = FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidName, + state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).Temp, + state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidIndex, + "DetermineCurrentPlantLoads"); + + Real64 HW_Qdot = + max(0.0, + HW_RetMdot * CpHW * + (this->DetermineHWSetpointOARest(state) - + state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).Temp)); // power = Mdot Cp Delta T, heating load is positive + this->Report.PrimaryPlantHeatingLoad = HW_Qdot; + } + + void ChillerHeaterSupervisoryOperationData::ProcessSupervisoryControlLogicForAirSourcePlants(EnergyPlusData &state) + { + // this routine decides which of three modes the plants should operate in, Heating Only, Cooling Only, Simultaneous Heating and Cooling. + + // step 1, initialize control bools + this->PlantOps.AirSourcePlantCoolingOnly = false; + this->PlantOps.AirSourcePlantHeatingOnly = false; + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = false; + this->PlantOps.SimultaneousHeatingCoolingWithCoolingDominant = false; + this->PlantOps.SimultaneousHeatingCoolingWithHeatingDominant = false; + + // step 2, process logic based on poll results for building loads. + if (this->Report.BuildingPolledHeatingLoad < DataHVACGlobals::SmallLoad && + this->Report.BuildingPolledCoolingLoad < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) { + this->PlantOps.AirSourcePlantCoolingOnly = true; + } else if (this->Report.BuildingPolledCoolingLoad > DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad && + this->Report.BuildingPolledHeatingLoad > DataHVACGlobals::SmallLoad) { + this->PlantOps.AirSourcePlantHeatingOnly = true; + + if (state.dataEnvrn->OutDryBulbTemp < this->TempReset.LowOutdoorTemp) { // too cold for airsource HPs so + this->PlantOps.AirSourcePlantHeatingOnly = false; + } + + } else if ((this->Report.BuildingPolledCoolingLoad < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) && + (this->Report.BuildingPolledHeatingLoad > DataHVACGlobals::SmallLoad)) { + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = true; + if (this->Report.BuildingPolledHeatingLoad > abs(this->Report.BuildingPolledCoolingLoad)) { + this->PlantOps.SimultaneousHeatingCoolingWithHeatingDominant = true; + if (this->PlantOps.SimultHeatCoolOpAvailable) { + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = true; + } else { + this->PlantOps.AirSourcePlantHeatingOnly = true; + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = false; + } + } else if (abs(this->Report.BuildingPolledCoolingLoad) > this->Report.BuildingPolledHeatingLoad) { + this->PlantOps.SimultaneousHeatingCoolingWithCoolingDominant = true; + if (this->PlantOps.SimultHeatCoolOpAvailable) { + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = true; + } else { + this->PlantOps.AirSourcePlantCoolingOnly = true; + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = false; + } + } + if (state.dataEnvrn->OutDryBulbTemp < this->TempReset.LowOutdoorTemp) { // too cold for airsource HPs + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = false; + this->PlantOps.AirSourcePlantCoolingOnly = true; + } + } + + // step 3, revise control decision based on current loads on primary plant loops + if (this->PlantOps.AirSourcePlantHeatingOnly && + this->Report.PrimaryPlantCoolingLoad < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) { + // polled building loads indicate all heating, but cooling plant has cooling load, try to switch to simultaneous cooling and heating with + // heating dominant + if (this->PlantOps.SimultHeatCoolOpAvailable) { + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = true; + this->PlantOps.SimultaneousHeatingCoolingWithHeatingDominant = true; + this->PlantOps.AirSourcePlantHeatingOnly = false; + } + } + + if (this->PlantOps.AirSourcePlantCoolingOnly && this->Report.PrimaryPlantHeatingLoad > DataHVACGlobals::SmallLoad && + state.dataEnvrn->OutDryBulbTemp >= this->TempReset.LowOutdoorTemp) { + // polled building loads indicate all cooling, but heating plant has heating load, and outdoor air is warm enough for heat pump, try to + // switch to simultaneous cooling and heating with cooling dominant + if (this->PlantOps.SimultHeatCoolOpAvailable) { + this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling = true; + this->PlantOps.SimultaneousHeatingCoolingWithCoolingDominant = true; + this->PlantOps.AirSourcePlantCoolingOnly = false; + } + } + + // do we need to turn on cooling-only if in off mode but PrimaryPlantCoolingLoad is loaded? + if (!this->PlantOps.AirSourcePlantCoolingOnly && !this->PlantOps.AirSourcePlantHeatingOnly && + !this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling) { // all off + if (this->Report.PrimaryPlantCoolingLoad < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) { + this->PlantOps.AirSourcePlantCoolingOnly = true; + } + } + + // do we need to turn on heating-only if in off mode but PrimaryPlantHeatingLoad is loaded? + if (!this->PlantOps.AirSourcePlantCoolingOnly && !this->PlantOps.AirSourcePlantHeatingOnly && + !this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling) { // all off + if (this->Report.PrimaryPlantHeatingLoad > DataHVACGlobals::SmallLoad && + state.dataEnvrn->OutDryBulbTemp >= this->TempReset.LowOutdoorTemp) { + this->PlantOps.AirSourcePlantHeatingOnly = true; + } + } + + // step 4, convert logical flags into integers for output variable reporting + if (this->PlantOps.AirSourcePlantHeatingOnly) { + this->Report.AirSourcePlant_OpMode = 1; + } else if (this->PlantOps.AirSourcePlantCoolingOnly) { + this->Report.AirSourcePlant_OpMode = 2; + } else if (this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling) { + this->Report.AirSourcePlant_OpMode = 3; + } else { + this->Report.AirSourcePlant_OpMode = 0; + } + } + + void ChillerHeaterSupervisoryOperationData::InitAirSourcePlantEquipmentOff(EnergyPlusData &state) + { + //_____________________________________________________________________________ + // initialize all possible equipment to turn off machines before applying controls to turn them on. + // set .Available and .ON to false in plant structure + + if (this->PlantOps.NumCoolingOnlyEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumCoolingOnlyEquipLists; ++equipListNum) { + int NumComps = this->CoolingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->CoolingOnlyEquipList(equipListNum).Comp(compNum)); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = false; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = false; + } + } + } + + if (this->PlantOps.NumHeatingOnlyEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumHeatingOnlyEquipLists; ++equipListNum) { + int NumComps = this->HeatingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->HeatingOnlyEquipList(equipListNum).Comp(compNum)); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = false; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = false; + } + } + } + + if (this->PlantOps.NumSimultHeatCoolCoolingEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolCoolingEquipLists; ++equipListNum) { + + int NumComps = this->SimultHeatCoolCoolingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolCoolingEquipList(equipListNum).Comp(compNum)); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = false; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = false; + } + } + } + + if (this->PlantOps.NumSimultHeatCoolHeatingEquipLists > 0) { + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolHeatingEquipLists; ++equipListNum) { + + int NumComps = this->SimultHeatCoolHeatingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolHeatingEquipList(equipListNum).Comp(compNum)); + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = false; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = false; + } + } + } + // end init machines off + } + + void ChillerHeaterSupervisoryOperationData::ProcessAndSetAirSourcePlantEquipLists(EnergyPlusData &state) + { + // TODO this routine is currently code to compare real current plant loads, polled building loads have also been studied. + Real64 CoolingLoadSignal = this->Report.PrimaryPlantCoolingLoad; + Real64 HeatingLoadSignal = this->Report.PrimaryPlantHeatingLoad; + + //___________________________________________________________________________ + if (this->PlantOps.AirSourcePlantCoolingOnly) { + // use zone loads to find range based cooling loads + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumCoolingOnlyEquipLists; ++equipListNum) { + // zone cooling loads are negative, switch to positive for range based limiting + if (CoolingLoadSignal * DataPrecisionGlobals::constant_minusone > this->CoolingOnlyEquipList(equipListNum).RangeLowerLimit && + this->CoolingOnlyEquipList(equipListNum).RangeUpperLimit > CoolingLoadSignal * DataPrecisionGlobals::constant_minusone) { + // found that this equipment list load ranges match the zone predicted cooling loads + + int NumComps = this->CoolingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->CoolingOnlyEquipList(equipListNum).Comp(compNum)); + // set cooling setpoint at outlet + + // todo, oa reset ? + + state.dataLoopNodes->Node(this_equip.SetPointNodeNum).TempSetPoint = this->Setpoint.PrimCW; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this_equip.LoopNumPtr).TempSetPointNodeNum).TempSetPoint = + this->Setpoint.PrimCW; + if (state.dataLoopNodes->Node(this_equip.DemandNodeNum).Temp > this->Setpoint.PrimCW) { + + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + // + } + } + } + } + + //____________________________________________________________________________ + if (this->PlantOps.AirSourcePlantHeatingOnly) { // Use Heating Only equipment operation + + Real64 HWsetpt = DetermineHWSetpointOARest(state); + // use zone loads to find range based heating loads + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumHeatingOnlyEquipLists; ++equipListNum) { + if (HeatingLoadSignal > this->HeatingOnlyEquipList(equipListNum).RangeLowerLimit && + this->HeatingOnlyEquipList(equipListNum).RangeUpperLimit > HeatingLoadSignal) { + // found that this equipment list load ranges match the zone predicted heating loads + + int NumComps = this->HeatingOnlyEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->HeatingOnlyEquipList(equipListNum).Comp(compNum)); + // set heating setpoint at outlet + + state.dataLoopNodes->Node(this_equip.SetPointNodeNum).TempSetPoint = HWsetpt; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this_equip.LoopNumPtr).TempSetPointNodeNum).TempSetPoint = HWsetpt; + + if (state.dataLoopNodes->Node(this_equip.DemandNodeNum).Temp < HWsetpt) { + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + // + } + } + } + } + + if (this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling) { + + // use zone cooling loads to find range based equipment + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolCoolingEquipLists; ++equipListNum) { + // zone cooling loads are negative, switch to positive for range based limiting + if (CoolingLoadSignal * DataPrecisionGlobals::constant_minusone > + this->SimultHeatCoolCoolingEquipList(equipListNum).RangeLowerLimit && + this->SimultHeatCoolCoolingEquipList(equipListNum).RangeUpperLimit > + CoolingLoadSignal * DataPrecisionGlobals::constant_minusone) { + // found that this equipment list load ranges match the zone predicted cooling loads + + int NumComps = this->SimultHeatCoolCoolingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolCoolingEquipList(equipListNum).Comp(compNum)); + // set cooling setpoint at outlet + + state.dataLoopNodes->Node(this_equip.SetPointNodeNum).TempSetPoint = this->Setpoint.PrimCW; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this_equip.LoopNumPtr).TempSetPointNodeNum).TempSetPoint = + this->Setpoint.PrimCW; + if (state.dataLoopNodes->Node(this_equip.DemandNodeNum).Temp > this->Setpoint.PrimCW) { + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + // + } + } + } + + // use zone loads to find range based heating loads + Real64 HWsetpt = DetermineHWSetpointOARest(state); + for (int equipListNum = 1; equipListNum <= this->PlantOps.NumSimultHeatCoolHeatingEquipLists; ++equipListNum) { + if (HeatingLoadSignal > this->SimultHeatCoolHeatingEquipList(equipListNum).RangeLowerLimit && + this->SimultHeatCoolHeatingEquipList(equipListNum).RangeUpperLimit > HeatingLoadSignal) { + // found that this equipment list load ranges match the zone predicted heating loads + + int NumComps = this->SimultHeatCoolHeatingEquipList(equipListNum).NumComps; + for (int compNum = 1; compNum <= NumComps; ++compNum) { + auto &this_equip(this->SimultHeatCoolHeatingEquipList(equipListNum).Comp(compNum)); + // set heating setpoint at outlet + + state.dataLoopNodes->Node(this_equip.SetPointNodeNum).TempSetPoint = HWsetpt; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this_equip.LoopNumPtr).TempSetPointNodeNum).TempSetPoint = HWsetpt; + + if (state.dataLoopNodes->Node(this_equip.DemandNodeNum).Temp < HWsetpt) { + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .Available = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .ON = true; + state.dataPlnt->PlantLoop(this_equip.LoopNumPtr) + .LoopSide(this_equip.LoopSideNumPtr) + .Branch(this_equip.BranchNumPtr) + .Comp(this_equip.CompNumPtr) + .CurOpSchemeType = this->Type; + } + // + } + } + } + } + } + + void ChillerHeaterSupervisoryOperationData::ProcessAndSetDedicatedHeatRecovWWHP(EnergyPlusData &state) + { + // evaluate if and how dedicated heat recovery WWHP should run + + if (!this->PlantOps.DedicatedHR_Present) { + return; + } + + // initialize off + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .Available = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .ON = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .Available = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .ON = false; + + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .Available = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .ON = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .Available = false; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .ON = false; + + // Dedicated Heat Recovery Water To Water Heat Pump Control. + // Assume there are two companion machines, one leads for cooling the return chilled water, the other leads for heating the return hot + // water When one side leads, the other gets favorable heat addition/extraction it is just not controlled to meet a setpoint Assume these + // are on the secondary loops. Need to decide if it runs and which of cooling or heating companion coils gets to lead. + // + // Step 1. get the mass flow rates of the returns. both must be non-zero for the WWHP to run + int inletChWReturnNodeNum = state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.compNum) + .NodeNumIn; + int inletHWReturnNodeNum = state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.compNum) + .NodeNumIn; + Real64 CW_RetMdot = state.dataLoopNodes->Node(inletChWReturnNodeNum).MassFlowRate; + Real64 HW_RetMdot = state.dataLoopNodes->Node(inletHWReturnNodeNum).MassFlowRate; + + bool flowInEach = false; + // need flow in both returns. + if (CW_RetMdot <= DataHVACGlobals::SmallWaterVolFlow || HW_RetMdot <= DataHVACGlobals::SmallWaterVolFlow) { + flowInEach = false; + } else { + flowInEach = true; + } + + // step 2. calculate the loads to adjust the + // returns to hit the associated setpoints at their current mass flow + Real64 const CpCW = + FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidName, + state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp, + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, + "EvaluateChillerHeaterChangeoverOpScheme"); + Real64 CW_Qdot = + CW_RetMdot * CpCW * + (this->Setpoint.SecCW - state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp); // power = Mdot Cp Delta T, cooling load is negative + Real64 const CpHW = + FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidName, + state.dataLoopNodes->Node(inletHWReturnNodeNum).Temp, + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, + "EvaluateChillerHeaterChangeoverOpScheme"); + Real64 HW_Qdot = HW_RetMdot * CpHW * (this->Setpoint.SecHW - state.dataLoopNodes->Node(inletHWReturnNodeNum).Temp); // power = Mdot Cp Delta T + + // store for reporting + this->Report.SecondaryPlantCoolingLoad = CW_Qdot; + this->Report.SecondaryPlantHeatingLoad = HW_Qdot; + + // step 3 decide if Dedicated HR is on and which leads based + bool CoolLedNeed = false; + bool HeatLedNeed = false; + + if (this->PlantOps.AirSourcePlantHeatingOnly && (CW_Qdot < DataPrecisionGlobals::constant_minusone * DataHVACGlobals::SmallLoad) && + flowInEach) { + // polled building loads are heating only, but secondary ChW plant has some cooling load and there is mass flow in each. So turn dedicated + // HR on in cooling lead mode + CoolLedNeed = true; + } + + if (this->PlantOps.AirSourcePlantCoolingOnly && (HW_Qdot > DataHVACGlobals::SmallLoad) && flowInEach) { + // polled building loads are cooling only, but secondary HW plant has some heating load and there is mass flow in each. So turn dedicated + // HR on in heating lead mode + HeatLedNeed = true; + } + + if (this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling && this->PlantOps.SimultaneousHeatingCoolingWithHeatingDominant && + flowInEach) { + // polled building loads are simultaneous with heating dominating and there is mass flow in each, So turn + // dedicated HR on in heating lead mode + HeatLedNeed = true; + } + + if (this->PlantOps.AirSourcePlantSimultaneousHeatingAndCooling && this->PlantOps.SimultaneousHeatingCoolingWithCoolingDominant && + flowInEach) { + // polled building loads are simultaneous with cooling dominating and there is mass flow in each, So turn + // dedicated HR on in cooling lead mode + CoolLedNeed = true; + } + + // step 4. check that there is sufficient flow in source side for chosen leader to avoid runaway plant conditions on source side + // if not, see if other side could run benefically as leader and switch to it if so + // Real64 FlowImbalanceRatioThreshold = 10.0; // TODO, check with TRANE engineering about WWHP operating limits wrt to relative flows (real + // // systems have a pumped sided arm flow situation and do not have low flow problems) + + // if (CoolLedNeed) { + // if (CW_RetMdot / HW_RetMdot > FlowImbalanceRatioThreshold) { // insuficient flow in source side relative to load side + // CoolLedNeed = false; + // // if (HW_Qdot > 1.0) { + // // HeatLedNeed = true; + // //} + // } + //} + // if (HeatLedNeed) { + // if (HW_RetMdot / CW_RetMdot > FlowImbalanceRatioThreshold) { // insuficient flow in source side relative to load side + // HeatLedNeed = false; + // // if (CW_Qdot < -1.0) { + // // CoolLedNeed = true; + // //} + // } + //} + + this->Report.DedicHR_OpMode = 0; + if (CoolLedNeed) { + this->Report.DedicHR_OpMode = 2; + // turn ON load side of this water to water heat pump + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .Available = true; + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .ON = true; + + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + + state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .MyLoad = CW_Qdot; // cooling load is negative + + int OutletChWReturnNodeNum = state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.compNum) + .NodeNumOut; + state.dataLoopNodes->Node(OutletChWReturnNodeNum).TempSetPoint = this->Setpoint.SecCW; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum).TempSetPointNodeNum) + .TempSetPoint = this->Setpoint.SecCW; + + if (this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum == + SecondaryPlantLoopIndicesBeingSupervised(this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum)) { + // search for HX on this loop and place setpoint on outlet + for (int HXnum = 1; HXnum <= this->PlantOps.numPlantHXs; ++HXnum) { + if (this->PlantHXComps(HXnum).loopNum == this->DedicatedHR_CoolingPLHP.loadSidePlantLoc.loopNum) { + int outletnode = state.dataPlnt->PlantLoop(this->PlantHXComps(HXnum).loopNum) + .LoopSide(this->PlantHXComps(HXnum).loopSideNum) + .Branch(this->PlantHXComps(HXnum).branchNum) + .Comp(this->PlantHXComps(HXnum).compNum) + .NodeNumOut; + state.dataLoopNodes->Node(outletnode).TempSetPoint = this->Setpoint.SecCW; + } + } + } + + } else if (HeatLedNeed) { + this->Report.DedicHR_OpMode = 1; + // turn load side of this water to water heat pump + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .Available = true; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .ON = true; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .CurOpSchemeType = this->Type; + state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .MyLoad = HW_Qdot; + + int OutletHWReturnNodeNum = state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) + .LoopSide(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopSideNum) + .Branch(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.branchNum) + .Comp(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.compNum) + .NodeNumOut; + + state.dataLoopNodes->Node(OutletHWReturnNodeNum).TempSetPoint = this->Setpoint.SecHW; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum).TempSetPointNodeNum) + .TempSetPoint = this->Setpoint.SecHW; + + if (this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum == + SecondaryPlantLoopIndicesBeingSupervised(this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum)) { + // search for HX on this loop and place setpoint on outlet + for (int HXnum = 1; HXnum <= this->PlantOps.numPlantHXs; ++HXnum) { + if (this->PlantHXComps(HXnum).loopNum == this->DedicatedHR_HeatingPLHP.loadSidePlantLoc.loopNum) { + int outletnode = state.dataPlnt->PlantLoop(this->PlantHXComps(HXnum).loopNum) + .LoopSide(this->PlantHXComps(HXnum).loopSideNum) + .Branch(this->PlantHXComps(HXnum).branchNum) + .Comp(this->PlantHXComps(HXnum).compNum) + .NodeNumOut; + state.dataLoopNodes->Node(outletnode).TempSetPoint = min(this->Setpoint.SecHW, this->DetermineHWSetpointOARest(state)); + } + } + } + } + } + + void ChillerHeaterSupervisoryOperationData::ProcessAndSetAuxilBoiler(EnergyPlusData &state) + { + // Check for boiler used as auxiliary or supplemental + // Assume boilers are in-line on supply side outlet branch, typically on secodary loop but may be on primary loop + this->Report.BoilerAux_OpMode = 0; + if (this->PlantOps.numBoilers <= 0) return; + + // first intialize them to be off + if (this->PlantOps.numBoilers > 0) { + for (int BoilerNum = 1; BoilerNum <= this->PlantOps.numBoilers; ++BoilerNum) { + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .Available = false; + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .ON = false; + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .MyLoad = 0.0; + } + } + + if (this->PlantOps.numBoilers > 0) { + // Boilers will run if outdoor air temperature is too low and there is flow in HW return loop + + bool LowOAAuxiliaryNeeded = false; + if (state.dataEnvrn->OutDryBulbTemp < this->TempReset.LowOutdoorTemp) { + LowOAAuxiliaryNeeded = true; + } + for (int BoilerNum = 1; BoilerNum <= this->PlantOps.numBoilers; ++BoilerNum) { + // determine if primary or secondary setpoint in use + Real64 HWsetpt = 0.0; + if (this->SecondaryPlantLoopIndicesBeingSupervised(this->PlantBoilerComps(BoilerNum).loopNum) > + 0) { // appears to be on secondary loop, supplemental boiler + HWsetpt = min(this->Setpoint.SecHW, + DetermineHWSetpointOARest( + state)); // Assume if OA reset is lower than setting for secondary HW loop, then use the lower of the two + } else { // primary loop, auxiliary boiler + HWsetpt = DetermineHWSetpointOARest(state); + } + + HWsetpt = HWsetpt - this->TempReset.BoilerTemperatureOffset; + + // check inlet temperature + int inletBoilerNodeNum = state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .NodeNumIn; + Real64 Tin = state.dataLoopNodes->Node(inletBoilerNodeNum).Temp; + Real64 Mdot = state.dataLoopNodes->Node(inletBoilerNodeNum).MassFlowRate; + + Real64 const CpHW = + FluidProperties::GetSpecificHeatGlycol(state, + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidName, + Tin, + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidIndex, + "ChillerHeaterSupervisoryOperationData::ProcessAndSetAuxilBoiler"); + Real64 LoadToSetpoint = max(0.0, Mdot * CpHW * (HWsetpt - Tin)); + int pltSizNum = state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).PlantSizNum; + Real64 const thresholdPlantLoad = + 0.001 * state.dataSize->PlantSizData(pltSizNum).DesCapacity; // model an operating threshold at 0.1% of loop capacity, only run if + // larger than that + + if (((LoadToSetpoint > thresholdPlantLoad) && + ((this->Report.AirSourcePlant_OpMode == 0) || + LowOAAuxiliaryNeeded)) || // run boiler if there is any heating load and also heatpumps are off or too cold outside + ((LoadToSetpoint > thresholdPlantLoad) && + (this->Report.AirSourcePlant_OpMode == + 2))) { // run boiler if there is a somewhat significant heating load and heat pumps in cooling only mode + + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .Available = true; + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .ON = true; + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .CurOpSchemeType = this->Type; + // boilers don't really have setpoint control mode, so set value for myLoad + state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .MyLoad = LoadToSetpoint; + int OutletBoilerNodeNum = state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .NodeNumOut; + state.dataLoopNodes->Node(OutletBoilerNodeNum).TempSetPoint = HWsetpt; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).TempSetPointNodeNum).TempSetPoint = + HWsetpt; + this->Report.BoilerAux_OpMode = 1; + } else { // still apply the setpoint, but don't turn on + int OutletBoilerNodeNum = state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum) + .LoopSide(this->PlantBoilerComps(BoilerNum).loopSideNum) + .Branch(this->PlantBoilerComps(BoilerNum).branchNum) + .Comp(this->PlantBoilerComps(BoilerNum).compNum) + .NodeNumOut; + state.dataLoopNodes->Node(OutletBoilerNodeNum).TempSetPoint = HWsetpt; + state.dataLoopNodes->Node(state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).TempSetPointNodeNum).TempSetPoint = + HWsetpt; + } + } + } + } + + Real64 ChillerHeaterSupervisoryOperationData::DetermineHWSetpointOARest(EnergyPlusData &state) + { + // algorithm from calcSetPointLinInt + Real64 HWSetpoint = 0.0; + + if ((this->TempReset.LowOutdoorTemp == this->TempReset.BackupLowOutdoorTemp) && + (this->Setpoint.PrimHW_Low == this->Setpoint.PrimHW_BackupLow)) { // no second-stage reset scheme + + if (this->TempReset.LowOutdoorTemp < this->TempReset.HighOutdoorTemp) { + if (state.dataEnvrn->OutDryBulbTemp <= this->TempReset.LowOutdoorTemp) { + HWSetpoint = this->Setpoint.PrimHW_Low; + } else if (state.dataEnvrn->OutDryBulbTemp >= this->TempReset.HighOutdoorTemp) { + HWSetpoint = this->Setpoint.PrimHW_High; + } else { + HWSetpoint = this->Setpoint.PrimHW_Low - ((state.dataEnvrn->OutDryBulbTemp - this->TempReset.LowOutdoorTemp) / + (this->TempReset.HighOutdoorTemp - this->TempReset.LowOutdoorTemp)) * + (this->Setpoint.PrimHW_Low - this->Setpoint.PrimHW_High); + HWSetpoint = min(HWSetpoint, this->Setpoint.PrimHW_High); // don't extrapolate, hold at high limit of primary HW + } + + } else { + HWSetpoint = 0.5 * (this->Setpoint.PrimHW_Low + this->Setpoint.PrimHW_High); + } + } else { // apply two stage reset scheme + if ((this->TempReset.LowOutdoorTemp < this->TempReset.HighOutdoorTemp) && + (this->TempReset.BackupLowOutdoorTemp < this->TempReset.LowOutdoorTemp)) { // expected configuration + + if (state.dataEnvrn->OutDryBulbTemp <= this->TempReset.BackupLowOutdoorTemp) { + HWSetpoint = this->Setpoint.PrimHW_BackupLow; + } else if (state.dataEnvrn->OutDryBulbTemp >= this->TempReset.HighOutdoorTemp) { + HWSetpoint = this->Setpoint.PrimHW_High; + } else if ((state.dataEnvrn->OutDryBulbTemp >= this->TempReset.LowOutdoorTemp) && + (state.dataEnvrn->OutDryBulbTemp < this->TempReset.HighOutdoorTemp)) { // first stage for Heat pump reset down + HWSetpoint = this->Setpoint.PrimHW_Low - ((state.dataEnvrn->OutDryBulbTemp - this->TempReset.LowOutdoorTemp) / + (this->TempReset.HighOutdoorTemp - this->TempReset.LowOutdoorTemp)) * + (this->Setpoint.PrimHW_Low - this->Setpoint.PrimHW_High); + HWSetpoint = min(HWSetpoint, this->Setpoint.PrimHW_High); // don't extrapolate, hold at high limit of primary HW + } else if ((state.dataEnvrn->OutDryBulbTemp > this->TempReset.BackupLowOutdoorTemp) && + (state.dataEnvrn->OutDryBulbTemp < this->TempReset.LowOutdoorTemp)) { // second stage for backup boiler reset up + HWSetpoint = this->Setpoint.PrimHW_BackupLow - ((state.dataEnvrn->OutDryBulbTemp - this->TempReset.BackupLowOutdoorTemp) / + (this->TempReset.LowOutdoorTemp - this->TempReset.BackupLowOutdoorTemp)) * + (this->Setpoint.PrimHW_BackupLow - this->Setpoint.PrimHW_Low); + HWSetpoint = min(HWSetpoint, this->Setpoint.PrimHW_BackupLow); // don't extrapolate + HWSetpoint = max(HWSetpoint, this->Setpoint.PrimHW_Low); // don't extrapolate + } else { + // shouldn't get here, throw error? + } + } else { // malformed input, take average of three setpoints + HWSetpoint = (this->Setpoint.PrimHW_Low + this->Setpoint.PrimHW_High + this->Setpoint.PrimHW_BackupLow) / 3.0; + } + } + return HWSetpoint; + } + +} // namespace DataPlant +} // namespace EnergyPlus diff --git a/testfiles/5ZoneAirCooledWithSpacesHVAC.idf b/testfiles/5ZoneAirCooledWithSpacesHVAC.idf new file mode 100644 index 00000000000..dbea71b317d --- /dev/null +++ b/testfiles/5ZoneAirCooledWithSpacesHVAC.idf @@ -0,0 +1,3859 @@ +!-Generator IDFEditor 1.51 +!-Option OriginalOrderTop UseSpecialFormat +!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically. +!- Use '!' comments if they need to be retained when using the IDFEditor. +! 5ZoneAirCooledWithSpacesHVAC.idf +! Basic file description: 1 story building divided into 4 exterior and one interior conditioned zones and return plenum. +! Two of the zones are divided into spaces. Zone 5 is divided into 2 spaces using floor surfaces only +! which results in both spaces being in the same enclosure. Zone 3 is divided into 3 spaces, one +! fully enclosed space (this is one enclosure) and two spaces joined by an air boundary (this is another enclosure). +! +! Highlights: Illustrates various uses of Space. Electric chiller with air cooled condenser; autosized preheating and +! precooling water coils in the outside air stream controlled to preheat and precool setpoints. +! +! Simulation Location/Run: CHICAGO_IL_USA TMY2-94846, 2 design days, 2 run periods, +! Run Control executes the run periods using the weather file +! +! Location: Chicago, IL +! +! Design Days: CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C +! +! Run Period (Weather File): 1/1 through 12/31, CHICAGO_IL_USA TMY2-94846 +! +! Run Control: Zone and System sizing with weather file run control (no design days run) +! +! Building: Single floor rectangular building 100 ft x 50 ft. 5 zones - 4 exterior, 1 interior, zone height 8 feet. +! Exterior zone depth is 12 feet. There is a 2 foot high return plenum: the overall building height is +! 10 feet. There are windows on all 4 facades; the south and north facades have glass doors. +! The south facing glass is shaded by overhangs. The walls are woodshingle over plywood, R11 insulation, +! and gypboard. The roof is a gravel built up roof with R-3 mineral board insulation and plywood sheathing. +! The windows are of various single and double pane construction with 3mm and 6mm glass and either 6mm or +! 13mm argon or air gap. The window to wall ratio is approximately 0.29. +! The south wall and door have overhangs. +! +! The building is oriented 30 degrees east of north. +! +! Floor Area: 463.6 m2 (5000 ft2) +! Number of Stories: 1 +! +! Zone Description Details: +! +! (0,15.2,0) (30.5,15.2,0) +! _____ ________ ____ +! |\ *** **************** /| +! | \ / | +! | \ (26.8,11.6,0) / | +! * \_____________________________/ * +! * |(3.7,11.6,0) | * +! * | | * +! * | | * +! * | (26.8,3.7,0)| * +! * |___________________________| * +! * / (3.7,3.7,0) \ * +! | / \ | +! | / \ | +! |/___******************___***________\| +! | Overhang | | +! |_______________________| | window/door = * +! |___| +! +! (0,0,0) (30.5,0,0) +! +! Internal gains description: lighting is 1.5 watts/ft2, office equip is 1.0 watts/ft2. There is 1 occupant +! per 100 ft2 of floor area. The infiltration is 0.25 air changes per hour. +! +! Interzone Surfaces: 6 interzone surfaces (see diagram) +! Internal Mass: None +! People: 50 +! Lights: 7500 W +! Windows: 4 ea.: 1) Double pane clear, 3mm glass, 13mm air gap +! 2) Double pane clear, 3mm glass, 13mm argon gap +! 3) Double pane clear, 6mm glass, 6mm air gap +! 4) Double pane lowE, 6mm lowE glass outside, 6mm air gap, 6mm clear glass +! +! Doors: 2 ea.: Single pane grey, 3mm glass +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Compact Schedules: Yes +! +! HVAC: Standard VAV system with outside air, hot water reheat coils, +! central chilled water cooling coil. Central Plant is single hot water +! boiler, electric compression chiller with air cooled condenser. +! All equipment is autosized. HW and ChW coils are used in the outside air +! stream to precondition the outside air. +! +! Zonal Equipment: AirTerminal:SingleDuct:VAV:Reheat +! Central Air Handling Equipment: Yes +! System Equipment Autosize: Yes +! Purchased Cooling: None +! Purchased Heating: None +! Coils: Coil:Cooling:Water, Coil:Heating:Water +! Pumps: Pump:VariableSpeed +! Boilers: Boiler:HotWater +! Chillers: Chiller:Electric +! +! Results: +! Standard Reports: None +! Timestep or Hourly Variables: Hourly +! Time bins Report: None +! HTML Report: None +! Environmental Emissions: None +! Utility Tariffs: None + + Version,23.2; + + Building, + Building, !- Name + 30., !- North Axis {deg} + City, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.4, !- Temperature Convergence Tolerance Value {deltaC} + FullExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Timestep,4; + + SurfaceConvectionAlgorithm:Inside,Simple; + + SurfaceConvectionAlgorithm:Outside,SimpleCombined; + + HeatBalanceAlgorithm,ConductionTransferFunction; + +ZoneAirHeatBalanceAlgorithm, + ThirdOrderBackwardDifference, !- Algorithm + Yes, !- Do Space Heat Balance for Sizing + Yes; !- Do Space Heat Balance for Simulation + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + Relative; !- Coordinate System + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS, !- Numeric Type + Temperature; !- Unit Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + FlowRate, !- Name + 0.0, !- Lower Limit Value + 10, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + RunPeriod, + January, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 1, !- End Month + 31, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + RunPeriod, + July, !- Name + 7, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 7, !- End Month + 31, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + Site:Location, + CHICAGO_IL_USA TMY2-94846, !- Name + 41.78, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190.00; !- Elevation {m} + + SimulationControl, + Yes, !- Do Zone Sizing Calculation + Yes, !- Do System Sizing Calculation + Yes, !- Do Plant Sizing Calculation + No, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + +! CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -17.3, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.0; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.5, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.0; !- Sky Clearness + + Site:GroundTemperature:BuildingSurface,20.03,20.03,20.13,20.30,20.43,20.52,20.62,20.77,20.78,20.55,20.44,20.20; + + Material, + WD10, !- Name + MediumSmooth, !- Roughness + 0.667, !- Thickness {m} + 0.115, !- Conductivity {W/m-K} + 513, !- Density {kg/m3} + 1381, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.78, !- Solar Absorptance + 0.78; !- Visible Absorptance + + Material, + RG01, !- Name + Rough, !- Roughness + 1.2700000E-02, !- Thickness {m} + 1.442000, !- Conductivity {W/m-K} + 881.0000, !- Density {kg/m3} + 1674.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material, + BR01, !- Name + VeryRough, !- Roughness + 9.4999997E-03, !- Thickness {m} + 0.1620000, !- Conductivity {W/m-K} + 1121.000, !- Density {kg/m3} + 1464.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + IN46, !- Name + VeryRough, !- Roughness + 7.6200001E-02, !- Thickness {m} + 2.3000000E-02, !- Conductivity {W/m-K} + 24.00000, !- Density {kg/m3} + 1590.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.5000000, !- Solar Absorptance + 0.5000000; !- Visible Absorptance + + Material, + WD01, !- Name + MediumSmooth, !- Roughness + 1.9099999E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 513.0000, !- Density {kg/m3} + 1381.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + PW03, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 545.0000, !- Density {kg/m3} + 1213.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + IN02, !- Name + Rough, !- Roughness + 9.0099998E-02, !- Thickness {m} + 4.3000001E-02, !- Conductivity {W/m-K} + 10.00000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP01, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP02, !- Name + MediumSmooth, !- Roughness + 1.5900001E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + CC03, !- Name + MediumRough, !- Roughness + 0.1016000, !- Thickness {m} + 1.310000, !- Conductivity {W/m-K} + 2243.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material:NoMass, + CP01, !- Name + Rough, !- Roughness + 0.3670000, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material:NoMass, + MAT-CLNG-1, !- Name + Rough, !- Roughness + 0.652259290, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:AirGap, + AL21, !- Name + 0.1570000; !- Thermal Resistance {m2-K/W} + + Material:AirGap, + AL23, !- Name + 0.1530000; !- Thermal Resistance {m2-K/W} + + Construction, + ROOF-1, !- Name + RG01, !- Outside Layer + BR01, !- Layer 2 + IN46, !- Layer 3 + WD01; !- Layer 4 + + Construction, + WALL-1, !- Name + WD01, !- Outside Layer + PW03, !- Layer 2 + IN02, !- Layer 3 + GP01; !- Layer 4 + + Construction, + CLNG-1, !- Name + MAT-CLNG-1; !- Outside Layer + + Construction, + FLOOR-SLAB-1, !- Name + CC03; !- Outside Layer + + Construction, + INT-WALL-1, !- Name + GP02, !- Outside Layer + AL21, !- Layer 2 + GP02; !- Layer 3 + + WindowMaterial:Gas, + AIR 13MM, !- Name + Air, !- Gas Type + 0.0127; !- Thickness {m} + + WindowMaterial:Glazing, + CLEAR 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.837, !- Solar Transmittance at Normal Incidence + 0.075, !- Front Side Solar Reflectance at Normal Incidence + 0.075, !- Back Side Solar Reflectance at Normal Incidence + 0.898, !- Visible Transmittance at Normal Incidence + 0.081, !- Front Side Visible Reflectance at Normal Incidence + 0.081, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Glazing, + GREY 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.626, !- Solar Transmittance at Normal Incidence + 0.061, !- Front Side Solar Reflectance at Normal Incidence + 0.061, !- Back Side Solar Reflectance at Normal Incidence + 0.611, !- Visible Transmittance at Normal Incidence + 0.061, !- Front Side Visible Reflectance at Normal Incidence + 0.061, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + Construction, + Dbl Clr 3mm/13mm Air, !- Name + CLEAR 3MM, !- Outside Layer + AIR 13MM, !- Layer 2 + CLEAR 3MM; !- Layer 3 + + Construction, + Sgl Grey 3mm, !- Name + GREY 3MM; !- Outside Layer + + Schedule:Compact, + OCCUPY-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.0, !- Field 3 + Until: 11:00,1.00, !- Field 5 + Until: 12:00,0.80, !- Field 7 + Until: 13:00,0.40, !- Field 9 + Until: 14:00,0.80, !- Field 11 + Until: 18:00,1.00, !- Field 13 + Until: 19:00,0.50, !- Field 15 + Until: 24:00,0.0, !- Field 17 + For: Weekends WinterDesignDay Holiday, !- Field 19 + Until: 24:00,0.0; !- Field 20 + + Schedule:Compact, + LIGHTS-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.05, !- Field 3 + Until: 9:00,0.9, !- Field 5 + Until: 10:00,0.95, !- Field 7 + Until: 11:00,1.00, !- Field 9 + Until: 12:00,0.95, !- Field 11 + Until: 13:00,0.8, !- Field 13 + Until: 14:00,0.9, !- Field 15 + Until: 18:00,1.00, !- Field 17 + Until: 19:00,0.60, !- Field 19 + Until: 21:00,0.20, !- Field 21 + Until: 24:00,0.05, !- Field 23 + For: Weekends WinterDesignDay Holiday, !- Field 25 + Until: 24:00,0.05; !- Field 26 + + Schedule:Compact, + EQUIP-1, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays SummerDesignDay CustomDay1 CustomDay2, !- Field 2 + Until: 8:00,0.02, !- Field 3 + Until: 9:00,0.4, !- Field 5 + Until: 14:00,0.9, !- Field 7 + Until: 15:00,0.8, !- Field 9 + Until: 16:00,0.7, !- Field 11 + Until: 18:00,0.5, !- Field 13 + Until: 20:00,0.3, !- Field 15 + Until: 24:00,0.02, !- Field 17 + For: Weekends WinterDesignDay Holiday, !- Field 19 + Until: 24:00,0.2; !- Field 20 + + Schedule:Compact, + INFIL-SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 10/31, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.0, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.0; !- Field 11 + + Schedule:Compact, + ActSchd, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,117.239997864; !- Field 3 + + !- Field 4 + + Schedule:Compact, + ShadeTransSch, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Space, + Space 5 Office, !- Name + Zone 5, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Office, !- Space Type + Std 62.1 Office Space, !- Tag 1 + Std 90.1 Office-Open Plan; !- Tag 2 + + Space, + Space 5 Conference, !- Name + Zone 5, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Conference, !- Space Type + Std 62.1 Conference/meeting, !- Tag 1 + Std 90.1 Conference/Meeting/Multipurpose; !- Tag 2 + + Space, + Space 2, !- Name + Zone 2, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Reception, !- Space Type + Std 62.1 Reception areas,!- Tag 1 + Std 90.1 Lobby; !- Tag 2 + + Space, + Space 3 Open Office 1, !- Name + Zone 3, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Office, !- Space Type + Std 62.1 Office Space, !- Tag 1 + Std 90.1 Office-Open Plan; !- Tag 2 + + Space, + Space 3 Open Office 2, !- Name + Zone 3, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Office, !- Space Type + Std 62.1 Office Space, !- Tag 1 + Std 90.1 Office-Open Plan; !- Tag 2 + + Space, + Space 3 Storage, !- Name + Zone 3, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Storage, !- Space Type + Std 62.1 Storage, !- Tag 1 + Std 90.1 Storage; !- Tag 2 + + Space, + Space 4, !- Name + Zone 4, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Office, !- Space Type + Std 62.1 Office Space, !- Tag 1 + Std 90.1 Office-Open Plan; !- Tag 2 + + Space, + Space 1, !- Name + Zone 1, !- Zone Name + autocalculate, !- Ceiling Height {m} + autocalculate, !- Volume {m3} + , !- Floor Area {m2} + Office, !- Space Type + Std 62.1 Office Space, !- Tag 1 + Std 90.1 Office-Open Plan; !- Tag 2 + + SpaceList, + AllConditionedSpaces, !- Name + Space 1, !- Space 1 Name + Space 2, !- Space 2 Name + Space 3 Open Office 1, !- Space 3 Name + Space 3 Open Office 2, !- Space 4 Name + Space 3 Storage, !- Space 5 Name + Space 4, !- Space 6 Name + Space 5 Office, !- Space 7 Name + Space 5 Conference; !- Space 8 Name + + ZoneList, + All Zones, !- Name + Zone 1, !- Zone 1 Name + Zone 2, !- Zone 2 Name + Zone 3, !- Zone 3 Name + Zone 4, !- Zone 4 Name + Zone 5; !- Zone 5 Name + + Zone, + PLENUM-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 0.609600067, !- Ceiling Height {m} + 283.2, !- Volume {m3} + , !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + + BuildingSurface:Detailed, + WALL-1PF, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PR, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PB, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PL, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TOP-1, !- Name + ROOF, !- Surface Type + ROOF-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.00000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 3, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,2.4; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + C3-2P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 12.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-3P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 12.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C5-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + Zone 1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 239.247360229; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + Zone 1 Infil 1, !- Name + Zone 1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.032, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + Zone 1 People, !- Name + Zone 1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + Zone 1 Lights, !- Name + Zone 1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1584, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + All Spaces Elec Equip, !- Name + AllConditionedSpaces, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.0, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + BuildingSurface:Detailed, + FRONT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WF-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 3.0,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 3.0,0.0,0.9, !- X,Y,Z ==> Vertex 2 {m} + 16.8,0.0,0.9, !- X,Y,Z ==> Vertex 3 {m} + 16.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DF-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 21.3,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 21.3,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 23.8,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 23.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + Main South Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 0.0,-1.3,2.2, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.2, !- X,Y,Z ==> Vertex 2 {m} + 19.8,0.0,2.2, !- X,Y,Z ==> Vertex 3 {m} + 19.8,-1.3,2.2; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + South Door Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 21.0,-2.0,2.6, !- X,Y,Z ==> Vertex 1 {m} + 21.0,0.0,2.6, !- X,Y,Z ==> Vertex 2 {m} + 24.1,0.0,2.6, !- X,Y,Z ==> Vertex 3 {m} + 24.1,-2.0,2.6; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F1-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB12, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB21, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB14, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB41, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB15, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB51, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + Zone 2, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 103.311355591; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + Zone 2 Infil 1, !- Name + Zone 2, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.014, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + Zone 2 People, !- Name + Zone 2, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + Zone 2 Lights, !- Name + Zone 2, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + BuildingSurface:Detailed, + RIGHT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WR-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + RIGHT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 30.5,3.8,2.1, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.8,0.9, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.4,0.9, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.4,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F2-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB21, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB12, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB23, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB32, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB25, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB52, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + Zone 3, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 239.247360229; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + Zone 3 Infil, !- Name + Zone 3, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.032, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + Zone 3 People, !- Name + Zone 3, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + Space 3 Open Office 1 Lights, !- Name + Space 3 Open Office 1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + Space 3 Open Office 2 Lights, !- Name + Space 3 Open Office 2, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + Space 3 Storage Lights, !- Name + Space 3 Storage, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 5.0, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + BuildingSurface:Detailed, + BACK-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Storage, !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BACK-2, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BACK-3, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Storage-Office Wall, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Storage, !- Space Name + Surface, !- Outside Boundary Condition + Office-Storage Wall, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Office-Storage Wall, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Surface, !- Outside Boundary Condition + Storage-Office Wall, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Construction:AirBoundary, + AirBoundary, !- Name + , !- Air Exchange Method + , !- Simple Mixing Air Changes per Hour {1/hr} + ; !- Simple Mixing Schedule Name + + BuildingSurface:Detailed, + AirWall 1, !- Name + WALL, !- Surface Type + AirBoundary, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Surface, !- Outside Boundary Condition + AirWall 2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + AirWall 2, !- Name + WALL, !- Surface Type + AirBoundary, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Surface, !- Outside Boundary Condition + AirWall 1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WB-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + BACK-3, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 27.4,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 27.4,15.2,0.9, !- X,Y,Z ==> Vertex 2 {m} + 13.7,15.2,0.9, !- X,Y,Z ==> Vertex 3 {m} + 13.7,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DB-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + BACK-2, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 9.1,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 9.1,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 7.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 7.0,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Storage, !- Space Name + Surface, !- Outside Boundary Condition + C3-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 3, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,2.4; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + C3-2, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Surface, !- Outside Boundary Condition + C3-2P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 12.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-3, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Surface, !- Outside Boundary Condition + C3-3P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F3-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Storage, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 3, !- Number of Vertices + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0; !- X,Y,Z ==> Vertex 3 {m} + + BuildingSurface:Detailed, + F3-2, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,15.2,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F3-3, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB32, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Surface, !- Outside Boundary Condition + SB23, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB34, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Storage, !- Space Name + Surface, !- Outside Boundary Condition + SB43, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB35-1, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 1, !- Space Name + Surface, !- Outside Boundary Condition + SB53-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB35-2, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 3, !- Zone Name + Space 3 Open Office 2, !- Space Name + Surface, !- Outside Boundary Condition + SB53-2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + Zone 4, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 103.311355591; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + Zone 4 Infil, !- Name + Zone 4, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.014, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + Zone 4 People, !- Name + Zone 4, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + Zone 4 Lights, !- Name + Zone 4, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + BuildingSurface:Detailed, + LEFT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WL-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + LEFT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 0.0,11.4,2.1, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.4,0.9, !- X,Y,Z ==> Vertex 2 {m} + 0.0,3.8,0.9, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.8,2.1; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F4-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB41, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB14, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB43, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB34, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB45, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB54, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Zone, + Zone 5, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + 447.682556152; !- Volume {m3} + + ZoneInfiltration:DesignFlowRate, + Zone 5 Infil, !- Name + Zone 5, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.062, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + People, + Zone 5 People, !- Name + Zone 5, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 20, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + People, + ZoneList People, !- Name + All Zones, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + People/Area, !- Number of People Calculation Method + , !- Number of People + 0.5, !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + autocalculate, !- Sensible Heat Fraction + ActSchd, !- Activity Level Schedule Name + 0.0000000382, !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + , !- Work Efficiency Schedule Name + ClothingInsulationSchedule; !- Clothing Insulation Calculation Method + + Lights, + Zone 5 Lights, !- Name + Zone 5, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 2964, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.2, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + BuildingSurface:Detailed, + C5-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F5-1a, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 5, !- Zone Name + Space 5 Office, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 6.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 6.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F5-1b, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + Zone 5, !- Zone Name + Space 5 Conference, !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 6.7,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 6.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB51, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB15, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB52, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB25, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB53-1, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB35-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 12.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB53-2, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB35-2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 12.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 12.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB54, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + Zone 5, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB45, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + Sizing:Parameters, + 1.0, !- Heating Sizing Factor + 1.0; !- Cooling Sizing Factor + + Sizing:Zone, + Zone 1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.009, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.004, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Zone 1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDayWithLimit, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 1, !- Name + sum, !- Outdoor Air Method + 0.00236, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Zone 2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.009, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.004, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Zone 2, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDayWithLimit, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 2, !- Name + sum, !- Outdoor Air Method + 0.00236, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Zone 3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.009, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.004, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Zone 3, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDayWithLimit, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 3, !- Name + sum, !- Outdoor Air Method + 0.00236, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Zone 4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.009, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.004, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Zone 4, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDayWithLimit, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 4, !- Name + sum, !- Outdoor Air Method + 0.00236, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Zone 5, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.009, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.004, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Zone 5 List, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDayWithLimit, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 5 Office, !- Name + sum, !- Outdoor Air Method + 0.00236, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + DesignSpecification:OutdoorAir, + SZ DSOA Zone 5 Conference, !- Name + sum, !- Outdoor Air Method + 0.00436, !- Outdoor Air Flow per Person {m3/s-person} + 0.000305, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + DesignSpecification:OutdoorAir:SpaceList, + SZ DSOA Zone 5 List, !- Name + Space 5 Office, !- Space 1 Name + SZ DSOA Zone 5 Office, !- Space 1 Design Specification Outdoor Air Object Name + Space 5 Conference, !- Space 2 Name + SZ DSOA Zone 5 Conference; !- Space 2 Design Specification Outdoor Air Object Name + + Sizing:System, + VAV Sys 1, !- AirLoop Name + sensible, !- Type of Load to Size On + autosize, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 4.5, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 11.0, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8, !- Central Cooling Design Supply Air Temperature {C} + 16.7, !- Central Heating Design Supply Air Temperature {C} + noncoincident, !- Type of Zone Sum to Use + no, !- 100% Outdoor Air in Cooling + no, !- 100% Outdoor Air in Heating + 0.008, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + 0, !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + 0, !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + Sizing:Plant, + Hot Water Loop, !- Plant or Condenser Loop Name + heating, !- Loop Type + 82., !- Design Loop Exit Temperature {C} + 11; !- Loop Design Temperature Difference {deltaC} + + Sizing:Plant, + Chilled Water Loop, !- Plant or Condenser Loop Name + cooling, !- Loop Type + 7.00, !- Design Loop Exit Temperature {C} + 4.00; !- Loop Design Temperature Difference {deltaC} + + Schedule:Compact, + Htg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: SummerDesignDay, !- Field 2 + Until: 24:00,16.7, !- Field 3 + For: WinterDesignDay, !- Field 5 + Until: 24:00,22.2, !- Field 6 + For: WeekDays, !- Field 8 + Until: 6:00,16.7, !- Field 9 + Until: 20:00,22.2, !- Field 11 + Until: 24:00,16.7, !- Field 13 + For: WeekEnds Holiday, !- Field 15 + Until: 24:00,16.7, !- Field 16 + For: AllOtherDays, !- Field 18 + Until: 24:00,16.7; !- Field 19 + + Schedule:Compact, + PlenumHtg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,12.8; !- Field 3 + + Schedule:Compact, + Clg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: SummerDesignDay, !- Field 2 + Until: 24:00,23.9, !- Field 3 + For: WinterDesignDay, !- Field 5 + Until: 24:00,29.4, !- Field 6 + For: WeekDays, !- Field 8 + Until: 6:00,29.4, !- Field 9 + Until: 20:00,23.9, !- Field 11 + Until: 24:00,29.4, !- Field 13 + For: WeekEnds Holiday, !- Field 15 + Until: 24:00,29.4, !- Field 16 + For: AllOtherDays, !- Field 18 + Until: 24:00,29.4; !- Field 19 + + Schedule:Compact, + PlenumClg-SetP-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,40.0; !- Field 3 + + Schedule:Compact, + Zone Control Type Sched, !- Name + Control Type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: SummerDesignDay, !- Field 2 + Until: 24:00,2, !- Field 3 + For: WinterDesignDay, !- Field 5 + Until: 24:00,1, !- Field 6 + For: AllOtherDays, !- Field 8 + Until: 24:00,4; !- Field 9 + + Schedule:Compact, + Min OA Sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 6:00,0.02, !- Field 3 + Until: 20:00,1.0, !- Field 5 + Until: 24:00,0.02, !- Field 7 + For: AllOtherDays, !- Field 9 + Until: 24:00,0.02; !- Field 10 + + Schedule:Compact, + FanAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 9/30, !- Field 5 + For: WeekDays, !- Field 6 + Until: 6:00,0.0, !- Field 7 + Until: 20:00,1.0, !- Field 9 + Until: 24:00,0.0, !- Field 11 + For: SummerDesignDay WinterDesignDay, !- Field 13 + Until: 24:00,1.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0, !- Field 17 + Through: 12/31, !- Field 19 + For: AllDays, !- Field 20 + Until: 24:00,1.0; !- Field 21 + + Schedule:Compact, + CoolingCoilAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: WeekDays, !- Field 2 + Until: 6:00,0.0, !- Field 3 + Until: 20:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: SummerDesignDay WinterDesignDay, !- Field 9 + Until: 24:00,1.0, !- Field 10 + For: AllOtherDays, !- Field 12 + Until: 24:00,0.0; !- Field 13 + + Schedule:Compact, + CoolingPumpAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0; !- Field 3 + + Schedule:Compact, + ReheatCoilAvailSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 9/30, !- Field 5 + For: WeekDays, !- Field 6 + Until: 6:00,0.0, !- Field 7 + Until: 20:00,1.0, !- Field 9 + Until: 24:00,0.0, !- Field 11 + For: SummerDesignDay WinterDesignDay, !- Field 13 + Until: 24:00,1.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0, !- Field 17 + Through: 12/31, !- Field 19 + For: AllDays, !- Field 20 + Until: 24:00,1.0; !- Field 21 + + Schedule:Compact, + CW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,7.22; !- Field 3 + + Schedule:Compact, + HW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,82; !- Field 3 + + Schedule:Compact, + PlantOnSched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0; !- Field 3 + + Schedule:Compact, + Seasonal Reset Supply Air Temp Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,16.0, !- Field 3 + Through: 9/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,13.0, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,16.0; !- Field 11 + + Schedule:Compact, + OA Cooling Supply Air Temp Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,11.5; !- Field 3 + + Schedule:Compact, + OA Heating Supply Air Temp Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4.5; !- Field 3 + + OutdoorAir:NodeList, + OutsideAirInletNodes; !- Node or NodeList Name 1 + + NodeList, + OutsideAirInletNodes, !- Name + Outside Air Inlet Node 1;!- Node 1 Name + + ZoneHVAC:EquipmentConnections, + Zone 1, !- Zone Name + Zone 1 Eq, !- Zone Conditioning Equipment List Name + Zone 1 In Node, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Zone 1 Node, !- Zone Air Node Name + Zone 1 Out Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Zone 2, !- Zone Name + Zone 2 Eq, !- Zone Conditioning Equipment List Name + Zone 2 In Node, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Zone 2 Node, !- Zone Air Node Name + Zone 2 Out Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Zone 3, !- Zone Name + Zone 3 Eq, !- Zone Conditioning Equipment List Name + Zone 3 In Node, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Zone 3 Node, !- Zone Air Node Name + Zone 3 Out Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Zone 4, !- Zone Name + Zone 4 Eq, !- Zone Conditioning Equipment List Name + Zone 4 In Node, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Zone 4 Node, !- Zone Air Node Name + Zone 4 Out Node; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Zone 5, !- Zone Name + Zone 5 Eq, !- Zone Conditioning Equipment List Name + Zone 5 In Node, !- Zone Air Inlet Node or NodeList Name + Zone 5 Exhaust Fan Inlet,!- Zone Air Exhaust Node or NodeList Name + Zone 5 Node, !- Zone Air Node Name + Zone 5 Out Node; !- Zone Return Air Node or NodeList Name + + SpaceHVAC:ZoneEquipmentSplitter, + Zone 5 ATU Space Splitter, !- Name + Zone 5, !- Zone Name + ZoneHVAC:AirDistributionUnit, !- Zone Equipment Object Type + Zone 5 ATU, !- Zone Equipment Name + Zone 5 In Node, !- Zone Equipment Outlet Node Name + Ideal, !- Thermostat Control Method + , !- Control Space Name + , !- Space Fraction Method + Space 5 Office, !- Space 1 Name + 0.6, !- Space 1 Fraction {dimensionless} + Space 5 Office In Node, !- Space 1 Supply Node Name + Space 5 Conference, !- Space 2 Name + 0.2, !- Space 2 Fraction {dimensionless} + Space 5 Conference In Node, !- Space 2 Supply Node Name + Zone 5-Remainder, !- Space 3 Name + 0.2, !- Space 3 Fraction {dimensionless} + Zone 5-Remainder In Node; !- Space 3 Supply Node Name + + SpaceHVAC:ZoneEquipmentMixer, + Zone 5 Exhaust Fan Mixer,!- Name + Zone 5, !- Zone Name + Zone 5 Exhaust Fan Inlet,!- Zone Equipment Inlet Node Name + DesignCoolingLoad, !- Space Fraction Method + Space 5 Conference, !- Space 1 Name + 1, !- Space 1 Fraction {dimensionless} + Space 5 Conference Exhaust Fan Inlet; !- Space 1 Node Name + + SpaceHVAC:EquipmentConnections, + Space 5 Office, !- Space Name + Space 5 Office In Node, !- Space Air Inlet Node or NodeList Name + , !- Space Air Exhaust Node or NodeList Name + Space 5 Office Node, !- Space Air Node Name + Space 5 Office Return Node; !- Space Return Air Node or NodeList Name + + SpaceHVAC:EquipmentConnections, + Space 5 Conference, !- Space Name + Space 5 Conference In Node, !- Space Air Inlet Node or NodeList Name + Space 5 Conference Exhaust Fan Inlet, !- Space Air Exhaust Node or NodeList Name + Space 5 Conference Node, !- Space Air Node Name + Space 5 Conference Return Node; !- Space Return Air Node or NodeList Name + + SpaceHVAC:EquipmentConnections, + Zone 5-Remainder, !- Space Name + Zone 5-Remainder In Node, !- Space Air Inlet Node or NodeList Name + , !- Space Air Exhaust Node or NodeList Name + Zone 5-Remainder Node, !- Space Air Node Name + Zone 5-Remainder Return Node; !- Space Return Air Node or NodeList Name + + ZoneControl:Thermostat, + Zone 1 Control, !- Name + Zone 1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleCooling, !- Control 1 Object Type + CoolingSetPoint, !- Control 1 Name + ThermostatSetpoint:SingleHeating, !- Control 2 Object Type + HeatingSetpoint, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + DualSetPoint; !- Control 3 Name + + ZoneControl:Thermostat, + Zone 2 Control, !- Name + Zone 2, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleCooling, !- Control 1 Object Type + CoolingSetPoint, !- Control 1 Name + ThermostatSetpoint:SingleHeating, !- Control 2 Object Type + HeatingSetpoint, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + DualSetPoint; !- Control 3 Name + + ZoneControl:Thermostat, + Zone 3 Control, !- Name + Zone 3, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleCooling, !- Control 1 Object Type + CoolingSetPoint, !- Control 1 Name + ThermostatSetpoint:SingleHeating, !- Control 2 Object Type + HeatingSetpoint, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + DualSetPoint; !- Control 3 Name + + ZoneControl:Thermostat, + Zone 4 Control, !- Name + Zone 4, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleCooling, !- Control 1 Object Type + CoolingSetPoint, !- Control 1 Name + ThermostatSetpoint:SingleHeating, !- Control 2 Object Type + HeatingSetpoint, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + DualSetPoint; !- Control 3 Name + + ZoneControl:Thermostat, + Zone 5 Control, !- Name + Zone 5, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleCooling, !- Control 1 Object Type + CoolingSetPoint, !- Control 1 Name + ThermostatSetpoint:SingleHeating, !- Control 2 Object Type + HeatingSetpoint, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + DualSetPoint; !- Control 3 Name + + ThermostatSetpoint:SingleHeating, + HeatingSetpoint, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + CoolingSetpoint, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleHeating, + PlenumHeatingSetpoint, !- Name + PlenumHtg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + PlenumCoolingSetpoint, !- Name + PlenumClg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + DualSetPoint, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ZoneHVAC:EquipmentList, + Zone 1 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Zone 1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Zone 2 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Zone 2 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Zone 3 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Zone 3 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Zone 4 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Zone 4 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Zone 5 Eq, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Zone 5 ATU, !- Zone Equipment 1 Name + 2, !- Zone Equipment 1 Cooling Sequence + 2, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + , !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + Fan:ZoneExhaust, !- Zone Equipment 2 Object Type + ZONE 5 EXHAUST FAN, !- Zone Equipment 2 Name + 1, !- Zone Equipment 2 Cooling Sequence + 1, !- Zone Equipment 2 Heating or No-Load Sequence + , !- Zone Equipment 2 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 2 Sequential Heating Fraction Schedule Name + + Fan:ZoneExhaust, + Zone 5 Exhaust Fan, !- Name + , !- Availability Schedule Name + 0.6, !- Fan Total Efficiency + 100, !- Pressure Rise {Pa} + 0.02, !- Maximum Flow Rate {m3/s} + Zone 5 Exhaust Fan Inlet,!- Air Inlet Node Name + Zone 5 Exhaust Fan Outlet, !- Air Outlet Node Name + General, !- End-Use Subcategory + , !- Flow Fraction Schedule Name + Coupled; !- System Availability Manager Coupling Mode + + ZoneHVAC:AirDistributionUnit, + Zone 1 ATU, !- Name + Zone 1 In Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Zone 1 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Zone 2 ATU, !- Name + Zone 2 In Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Zone 2 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Zone 3 ATU, !- Name + Zone 3 In Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Zone 3 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Zone 4 ATU, !- Name + Zone 4 In Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Zone 4 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Zone 5 ATU, !- Name + Zone 5 In Node, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Zone 5 VAV Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:VAV:Reheat, + Zone 1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + Zone 1 Zone Coil Air In Node, !- Damper Air Outlet Node Name + Zone 1 ATU In Node, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Zone 1 Zone Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Zone 1 In Node, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + Zone 2 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + Zone 2 Zone Coil Air In Node, !- Damper Air Outlet Node Name + Zone 2 ATU In Node, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Zone 2 Zone Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Zone 2 In Node, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + Zone 3 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + Zone 3 Zone Coil Air In Node, !- Damper Air Outlet Node Name + Zone 3 ATU In Node, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Zone 3 Zone Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Zone 3 In Node, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + Zone 4 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + Zone 4 Zone Coil Air In Node, !- Damper Air Outlet Node Name + Zone 4 ATU In Node, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Zone 4 Zone Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Zone 4 In Node, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + Zone 5 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + Zone 5 Zone Coil Air In Node, !- Damper Air Outlet Node Name + Zone 5 ATU In Node, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Zone 5 Zone Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Zone 5 In Node, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + Coil:Heating:Water, + Zone 1 Zone Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Zone 1 Zone Coil Water In Node, !- Water Inlet Node Name + Zone 1 Zone Coil Water Out Node, !- Water Outlet Node Name + Zone 1 Zone Coil Air In Node, !- Air Inlet Node Name + Zone 1 In Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Coil:Heating:Water, + Zone 2 Zone Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Zone 2 Zone Coil Water In Node, !- Water Inlet Node Name + Zone 2 Zone Coil Water Out Node, !- Water Outlet Node Name + Zone 2 Zone Coil Air In Node, !- Air Inlet Node Name + Zone 2 In Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Coil:Heating:Water, + Zone 3 Zone Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Zone 3 Zone Coil Water In Node, !- Water Inlet Node Name + Zone 3 Zone Coil Water Out Node, !- Water Outlet Node Name + Zone 3 Zone Coil Air In Node, !- Air Inlet Node Name + Zone 3 In Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Coil:Heating:Water, + Zone 4 Zone Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Zone 4 Zone Coil Water In Node, !- Water Inlet Node Name + Zone 4 Zone Coil Water Out Node, !- Water Outlet Node Name + Zone 4 Zone Coil Air In Node, !- Air Inlet Node Name + Zone 4 In Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Coil:Heating:Water, + Zone 5 Zone Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Zone 5 Zone Coil Water In Node, !- Water Inlet Node Name + Zone 5 Zone Coil Water Out Node, !- Water Outlet Node Name + Zone 5 Zone Coil Air In Node, !- Air Inlet Node Name + Zone 5 In Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + AirLoopHVAC:ReturnPath, + ReturnAirPath1, !- Name + PLENUM-1 Out Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + Return-Plenum-1; !- Component 1 Name + + AirLoopHVAC:ReturnPlenum, + Return-Plenum-1, !- Name + PLENUM-1, !- Zone Name + PLENUM-1 Node, !- Zone Node Name + PLENUM-1 Out Node, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + Zone 1 Out Node, !- Inlet 1 Node Name + Zone 2 Out Node, !- Inlet 2 Node Name + Zone 3 Out Node, !- Inlet 3 Node Name + Zone 4 Out Node, !- Inlet 4 Node Name + Zone 5 Out Node; !- Inlet 5 Node Name + + AirLoopHVAC:SupplyPath, + Zone Supply Air Path 1, !- Name + Zone Eq In Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + Zone Supply Air Splitter 1; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + Zone Supply Air Splitter 1, !- Name + Zone Eq In Node, !- Inlet Node Name + Zone 1 ATU In Node, !- Outlet 1 Node Name + Zone 2 ATU In Node, !- Outlet 2 Node Name + Zone 3 ATU In Node, !- Outlet 3 Node Name + Zone 4 ATU In Node, !- Outlet 4 Node Name + Zone 5 ATU In Node; !- Outlet 5 Node Name + + AirLoopHVAC, + VAV Sys 1, !- Name + VAV Sys 1 Controllers, !- Controller List Name + VAV Sys 1 Avail List, !- Availability Manager List Name + autosize, !- Design Supply Air Flow Rate {m3/s} + VAV Sys 1 Branches, !- Branch List Name + , !- Connector List Name + VAV Sys 1 Inlet Node, !- Supply Side Inlet Node Name + PLENUM-1 Out Node, !- Demand Side Outlet Node Name + Zone Eq In Node, !- Demand Side Inlet Node Names + VAV Sys 1 Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC:ControllerList, + VAV Sys 1 Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + Central Cooling Coil Controller 1, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + Central Heating Coil Controller 1; !- Controller 2 Name + + AvailabilityManagerAssignmentList, + VAV Sys 1 Avail List, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + VAV Sys 1 Avail; !- Availability Manager 1 Name + + AvailabilityManager:Scheduled, + VAV Sys 1 Avail, !- Name + FanAvailSched; !- Schedule Name + + BranchList, + VAV Sys 1 Branches, !- Name + VAV Sys 1 Main Branch; !- Branch 1 Name + + Branch, + VAV Sys 1 Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + OA Sys 1, !- Component 1 Name + VAV Sys 1 Inlet Node, !- Component 1 Inlet Node Name + Mixed Air Node 1, !- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + Main Cooling Coil 1, !- Component 2 Name + Mixed Air Node 1, !- Component 2 Inlet Node Name + Main Cooling Coil 1 Outlet Node, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + Main Heating Coil 1, !- Component 3 Name + Main Cooling Coil 1 Outlet Node, !- Component 3 Inlet Node Name + Main Heating Coil 1 Outlet Node, !- Component 3 Outlet Node Name + Fan:VariableVolume, !- Component 4 Object Type + Supply Fan 1, !- Component 4 Name + Main Heating Coil 1 Outlet Node, !- Component 4 Inlet Node Name + VAV Sys 1 Outlet Node; !- Component 4 Outlet Node Name + + AirLoopHVAC:OutdoorAirSystem, + OA Sys 1, !- Name + OA Sys 1 Controllers, !- Controller List Name + OA Sys 1 Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:ControllerList, + OA Sys 1 Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + OA Controller 1, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + OA CC Controller 1, !- Controller 2 Name + Controller:WaterCoil, !- Controller 3 Object Type + OA HC Controller 1; !- Controller 3 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + OA Sys 1 Equipment, !- Name + Coil:Heating:Water, !- Component 1 Object Type + OA Heating Coil 1, !- Component 1 Name + Coil:Cooling:Water, !- Component 2 Object Type + OA Cooling Coil 1, !- Component 2 Name + OutdoorAir:Mixer, !- Component 3 Object Type + OA Mixing Box 1; !- Component 3 Name + + Coil:Heating:Water, + OA Heating Coil 1, !- Name + CoolingCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + OA Heating Coil 1 Water Inlet Node, !- Water Inlet Node Name + OA Heating Coil 1 Water Outlet Node, !- Water Outlet Node Name + Outside Air Inlet Node 1,!- Air Inlet Node Name + OA Heating Coil 1 Air Outlet Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Coil:Cooling:Water, + OA Cooling Coil 1, !- Name + CoolingCoilAvailSched, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + OA Cooling Coil 1 Water Inlet Node, !- Water Inlet Node Name + OA Cooling Coil 1 Water Outlet Node, !- Water Outlet Node Name + OA Heating Coil 1 Air Outlet Node, !- Air Inlet Node Name + OA Mixing Box 1 Inlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow, !- Heat Exchanger Configuration + , !- Condensate Collection Water Storage Tank Name + 4.0; !- Design Water Temperature Difference {deltaC} + + OutdoorAir:Mixer, + OA Mixing Box 1, !- Name + Mixed Air Node 1, !- Mixed Air Node Name + OA Mixing Box 1 Inlet Node, !- Outdoor Air Stream Node Name + Relief Air Outlet Node 1,!- Relief Air Stream Node Name + VAV Sys 1 Inlet Node; !- Return Air Stream Node Name + + Coil:Cooling:Water, + Main Cooling Coil 1, !- Name + CoolingCoilAvailSched, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Main Cooling Coil 1 Water Inlet Node, !- Water Inlet Node Name + Main Cooling Coil 1 Water Outlet Node, !- Water Outlet Node Name + Mixed Air Node 1, !- Air Inlet Node Name + Main Cooling Coil 1 Outlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow, !- Heat Exchanger Configuration + , !- Condensate Collection Water Storage Tank Name + 4.0; !- Design Water Temperature Difference {deltaC} + + Coil:Heating:Water, + Main Heating Coil 1, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Main Heating Coil 1 Water Inlet Node, !- Water Inlet Node Name + Main Heating Coil 1 Water Outlet Node, !- Water Outlet Node Name + Main Cooling Coil 1 Outlet Node, !- Air Inlet Node Name + Main Heating Coil 1 Outlet Node, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + , !- Rated Ratio for Air and Water Convection + 11; !- Design Water Temperature Difference {deltaC} + + Fan:VariableVolume, + Supply Fan 1, !- Name + FanAvailSched, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 600.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.35071223, !- Fan Power Coefficient 1 + 0.30850535, !- Fan Power Coefficient 2 + -0.54137364, !- Fan Power Coefficient 3 + 0.87198823, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + Main Heating Coil 1 Outlet Node, !- Air Inlet Node Name + VAV Sys 1 Outlet Node; !- Air Outlet Node Name + + Controller:WaterCoil, + OA HC Controller 1, !- Name + Temperature, !- Control Variable + Normal, !- Action + FLOW, !- Actuator Variable + OA Heating Coil 1 Air Outlet Node, !- Sensor Node Name + OA Heating Coil 1 Water Inlet Node, !- Actuator Node Name + 0.002, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + OA CC Controller 1, !- Name + Temperature, !- Control Variable + Reverse, !- Action + FLOW, !- Actuator Variable + OA Mixing Box 1 Inlet Node, !- Sensor Node Name + OA Cooling Coil 1 Water Inlet Node, !- Actuator Node Name + 0.002, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + Central Cooling Coil Controller 1, !- Name + Temperature, !- Control Variable + Reverse, !- Action + FLOW, !- Actuator Variable + Main Cooling Coil 1 Outlet Node, !- Sensor Node Name + Main Cooling Coil 1 Water Inlet Node, !- Actuator Node Name + 0.002, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:OutdoorAir, + OA Controller 1, !- Name + Relief Air Outlet Node 1,!- Relief Air Outlet Node Name + VAV Sys 1 Inlet Node, !- Return Air Node Name + Mixed Air Node 1, !- Mixed Air Node Name + Outside Air Inlet Node 1,!- Actuator Node Name + autosize, !- Minimum Outdoor Air Flow Rate {m3/s} + autosize, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 19., !- Economizer Maximum Limit Dry-Bulb Temperature {C} + , !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + 4.6, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + Min OA Sched; !- Minimum Outdoor Air Schedule Name + + Controller:WaterCoil, + Central Heating Coil Controller 1, !- Name + Temperature, !- Control Variable + Normal, !- Action + FLOW, !- Actuator Variable + Main Heating Coil 1 Outlet Node, !- Sensor Node Name + Main Heating Coil 1 Water Inlet Node, !- Actuator Node Name + 0.002, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + SetpointManager:Scheduled, + Supply Air Temp Manager 1, !- Name + Temperature, !- Control Variable + Seasonal Reset Supply Air Temp Sch, !- Schedule Name + VAV Sys 1 Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + OA Air Temp Manager 1, !- Name + Temperature, !- Control Variable + OA Cooling Supply Air Temp Sch, !- Schedule Name + OA Mixing Box 1 Inlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + OA Air Temp Manager 2, !- Name + Temperature, !- Control Variable + OA Heating Supply Air Temp Sch, !- Schedule Name + OA Heating Coil 1 Air Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + Mixed Air Temp Manager 1,!- Name + Temperature, !- Control Variable + VAV Sys 1 Outlet Node, !- Reference Setpoint Node Name + Main Heating Coil 1 Outlet Node, !- Fan Inlet Node Name + VAV Sys 1 Outlet Node, !- Fan Outlet Node Name + Main Branch SetPoint Node List; !- Setpoint Node or NodeList Name + + NodeList, + Main Branch SetPoint Node List, !- Name + Mixed Air Node 1, !- Node 1 Name + Main Cooling Coil 1 Outlet Node, !- Node 2 Name + Main Heating Coil 1 Outlet Node; !- Node 3 Name + + PlantLoop, + Hot Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Hot Loop Operation, !- Plant Equipment Operation Scheme Name + HW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 100, !- Maximum Loop Temperature {C} + 10, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + , !- Plant Loop Volume {m3} + HW Supply Inlet Node, !- Plant Side Inlet Node Name + HW Supply Outlet Node, !- Plant Side Outlet Node Name + Heating Supply Side Branches, !- Plant Side Branch List Name + Heating Supply Side Connectors, !- Plant Side Connector List Name + HW Demand Inlet Node, !- Demand Side Inlet Node Name + HW Demand Outlet Node, !- Demand Side Outlet Node Name + Heating Demand Side Branches, !- Demand Side Branch List Name + Heating Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + SetpointManager:Scheduled, + Hot Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + HW Loop Temp Schedule, !- Schedule Name + HW Supply Outlet Node; !- Setpoint Node or NodeList Name + + BranchList, + Heating Supply Side Branches, !- Name + Heating Supply Inlet Branch, !- Branch 1 Name + Central Boiler Branch, !- Branch 2 Name + Heating Supply Bypass Branch, !- Branch 3 Name + Heating Supply Outlet Branch; !- Branch 4 Name + + ConnectorList, + Heating Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Heating Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Heating Supply Mixer; !- Connector 2 Name + + Branch, + Heating Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + HW Circ Pump, !- Component 1 Name + HW Supply Inlet Node, !- Component 1 Inlet Node Name + HW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Central Boiler Branch, !- Name + , !- Pressure Drop Curve Name + Boiler:HotWater, !- Component 1 Object Type + Central Boiler, !- Component 1 Name + Central Boiler Inlet Node, !- Component 1 Inlet Node Name + Central Boiler Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Heating Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Heating Supply Side Bypass, !- Component 1 Name + Heating Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Heating Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Heating Supply Side Bypass, !- Name + Heating Supply Bypass Inlet Node, !- Inlet Node Name + Heating Supply Bypass Outlet Node; !- Outlet Node Name + + Branch, + Heating Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Heating Supply Outlet, !- Component 1 Name + Heating Supply Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + HW Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Heating Supply Outlet, !- Name + Heating Supply Exit Pipe Inlet Node, !- Inlet Node Name + HW Supply Outlet Node; !- Outlet Node Name + + BranchList, + Heating Demand Side Branches, !- Name + Heating Demand Inlet Branch, !- Branch 1 Name + Zone 1 Reheat Branch, !- Branch 2 Name + Zone 2 Reheat Branch, !- Branch 3 Name + Zone 3 Reheat Branch, !- Branch 4 Name + Zone 4 Reheat Branch, !- Branch 5 Name + Zone 5 Reheat Branch, !- Branch 6 Name + OA Heating Coil Branch, !- Branch 7 Name + Main Heating Coil 1 Branch, !- Branch 8 Name + Heating Demand Bypass Branch, !- Branch 9 Name + Heating Demand Outlet Branch; !- Branch 10 Name + + ConnectorList, + Heating Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Heating Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Heating Demand Mixer; !- Connector 2 Name + + Branch, + Heating Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Heating Demand Inlet Pipe, !- Component 1 Name + HW Demand Inlet Node, !- Component 1 Inlet Node Name + HW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Heating Demand Inlet Pipe, !- Name + HW Demand Inlet Node, !- Inlet Node Name + HW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Heating Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Heating Demand Outlet Pipe, !- Component 1 Name + HW Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + HW Demand Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Heating Demand Outlet Pipe, !- Name + HW Demand Exit Pipe Inlet Node, !- Inlet Node Name + HW Demand Outlet Node; !- Outlet Node Name + + Branch, + Zone 1 Reheat Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Zone 1 Zone Coil, !- Component 1 Name + Zone 1 Zone Coil Water In Node, !- Component 1 Inlet Node Name + Zone 1 Zone Coil Water Out Node; !- Component 1 Outlet Node Name + + Branch, + Zone 2 Reheat Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Zone 2 Zone Coil, !- Component 1 Name + Zone 2 Zone Coil Water In Node, !- Component 1 Inlet Node Name + Zone 2 Zone Coil Water Out Node; !- Component 1 Outlet Node Name + + Branch, + Zone 3 Reheat Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Zone 3 Zone Coil, !- Component 1 Name + Zone 3 Zone Coil Water In Node, !- Component 1 Inlet Node Name + Zone 3 Zone Coil Water Out Node; !- Component 1 Outlet Node Name + + Branch, + Zone 4 Reheat Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Zone 4 Zone Coil, !- Component 1 Name + Zone 4 Zone Coil Water In Node, !- Component 1 Inlet Node Name + Zone 4 Zone Coil Water Out Node; !- Component 1 Outlet Node Name + + Branch, + Zone 5 Reheat Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Zone 5 Zone Coil, !- Component 1 Name + Zone 5 Zone Coil Water In Node, !- Component 1 Inlet Node Name + Zone 5 Zone Coil Water Out Node; !- Component 1 Outlet Node Name + + Branch, + OA Heating Coil Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + OA Heating Coil 1, !- Component 1 Name + OA Heating Coil 1 Water Inlet Node, !- Component 1 Inlet Node Name + OA Heating Coil 1 Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Main Heating Coil 1 Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Main Heating Coil 1, !- Component 1 Name + Main Heating Coil 1 Water Inlet Node, !- Component 1 Inlet Node Name + Main Heating Coil 1 Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Heating Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Heating Demand Bypass, !- Component 1 Name + Heating Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Heating Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Heating Demand Bypass, !- Name + Heating Demand Bypass Inlet Node, !- Inlet Node Name + Heating Demand Bypass Outlet Node; !- Outlet Node Name + + Connector:Splitter, + Heating Demand Splitter, !- Name + Heating Demand Inlet Branch, !- Inlet Branch Name + Zone 1 Reheat Branch, !- Outlet Branch 1 Name + Zone 2 Reheat Branch, !- Outlet Branch 2 Name + Zone 3 Reheat Branch, !- Outlet Branch 3 Name + Zone 4 Reheat Branch, !- Outlet Branch 4 Name + Zone 5 Reheat Branch, !- Outlet Branch 5 Name + OA Heating Coil Branch, !- Outlet Branch 6 Name + Main Heating Coil 1 Branch, !- Outlet Branch 7 Name + Heating Demand Bypass Branch; !- Outlet Branch 8 Name + + Connector:Mixer, + Heating Demand Mixer, !- Name + Heating Demand Outlet Branch, !- Outlet Branch Name + Zone 1 Reheat Branch, !- Inlet Branch 1 Name + Zone 2 Reheat Branch, !- Inlet Branch 2 Name + Zone 3 Reheat Branch, !- Inlet Branch 3 Name + Zone 4 Reheat Branch, !- Inlet Branch 4 Name + Zone 5 Reheat Branch, !- Inlet Branch 5 Name + OA Heating Coil Branch, !- Inlet Branch 6 Name + Main Heating Coil 1 Branch, !- Inlet Branch 7 Name + Heating Demand Bypass Branch; !- Inlet Branch 8 Name + + Connector:Splitter, + Heating Supply Splitter, !- Name + Heating Supply Inlet Branch, !- Inlet Branch Name + Central Boiler Branch, !- Outlet Branch 1 Name + Heating Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Heating Supply Mixer, !- Name + Heating Supply Outlet Branch, !- Outlet Branch Name + Central Boiler Branch, !- Inlet Branch 1 Name + Heating Supply Bypass Branch; !- Inlet Branch 2 Name + + PlantEquipmentOperationSchemes, + Hot Loop Operation, !- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + Central Boiler Only, !- Control Scheme 1 Name + PlantOnSched; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:HeatingLoad, + Central Boiler Only, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000, !- Load Range 1 Upper Limit {W} + heating plant; !- Range 1 Equipment List Name + + PlantEquipmentList, + heating plant, !- Name + Boiler:HotWater, !- Equipment 1 Object Type + Central Boiler; !- Equipment 1 Name + + Boiler:HotWater, + Central Boiler, !- Name + NaturalGas, !- Fuel Type + autosize, !- Nominal Capacity {W} + 0.8, !- Nominal Thermal Efficiency + LeavingBoiler, !- Efficiency Curve Temperature Evaluation Variable + BoilerEfficiency, !- Normalized Boiler Efficiency Curve Name + autosize, !- Design Water Flow Rate {m3/s} + 0.0, !- Minimum Part Load Ratio + 1.2, !- Maximum Part Load Ratio + 1.0, !- Optimum Part Load Ratio + Central Boiler Inlet Node, !- Boiler Water Inlet Node Name + Central Boiler Outlet Node, !- Boiler Water Outlet Node Name + 100., !- Water Outlet Upper Temperature Limit {C} + LeavingSetpointModulated;!- Boiler Flow Mode + + SetpointManager:Scheduled, + Central Boiler Setpoint Manager, !- Name + Temperature, !- Control Variable + HW Loop Temp Schedule, !- Schedule Name + Central Boiler Outlet Node; !- Setpoint Node or NodeList Name + + Curve:Quadratic, + BoilerEfficiency, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + + Pump:VariableSpeed, + HW Circ Pump, !- Name + HW Supply Inlet Node, !- Inlet Node Name + HW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + + PlantLoop, + Chilled Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + CW Loop Operation, !- Plant Equipment Operation Scheme Name + CW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + , !- Plant Loop Volume {m3} + CW Supply Inlet Node, !- Plant Side Inlet Node Name + CW Supply Outlet Node, !- Plant Side Outlet Node Name + Cooling Supply Side Branches, !- Plant Side Branch List Name + Cooling Supply Side Connectors, !- Plant Side Connector List Name + CW Demand Inlet Node, !- Demand Side Inlet Node Name + CW Demand Outlet Node, !- Demand Side Outlet Node Name + Cooling Demand Side Branches, !- Demand Side Branch List Name + Cooling Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad, !- Load Distribution Scheme + CW Avail List; !- Availability Manager List Name + + AvailabilityManagerAssignmentList, + CW Avail List, !- Name + AvailabilityManager:LowTemperatureTurnOff, !- Availability Manager 1 Object Type + CW Low Temp Limit; !- Availability Manager 1 Name + + AvailabilityManager:LowTemperatureTurnOff, + CW Low Temp Limit, !- Name + Outside Air Inlet Node 1,!- Sensor Node Name + 2.0, !- Temperature {C} + CoolingPumpAvailSched; !- Applicability Schedule Name + + SetpointManager:Scheduled, + Chilled Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + CW Loop Temp Schedule, !- Schedule Name + CW Supply Outlet Node; !- Setpoint Node or NodeList Name + + BranchList, + Cooling Supply Side Branches, !- Name + CW Pump Branch, !- Branch 1 Name + Central Chiller Branch, !- Branch 2 Name + Cooling Supply Bypass Branch, !- Branch 3 Name + Cooling Supply Outlet; !- Branch 4 Name + + BranchList, + Cooling Demand Side Branches, !- Name + Cooling Demand Inlet, !- Branch 1 Name + Cooling Coil Branch, !- Branch 2 Name + OA Cooling Coil Branch, !- Branch 3 Name + Cooling Demand Bypass Branch, !- Branch 4 Name + Cooling Demand Outlet; !- Branch 5 Name + + ConnectorList, + Cooling Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CW Loop Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CW Loop Mixer; !- Connector 2 Name + + ConnectorList, + Cooling Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CW Demand Mixer; !- Connector 2 Name + + Branch, + Cooling Demand Inlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Cooling Demand Side Inlet Pipe, !- Component 1 Name + CW Demand Inlet Node, !- Component 1 Inlet Node Name + CW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Cooling Demand Side Inlet Pipe, !- Name + CW Demand Inlet Node, !- Inlet Node Name + CW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Cooling Coil Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Main Cooling Coil 1, !- Component 1 Name + Main Cooling Coil 1 Water Inlet Node, !- Component 1 Inlet Node Name + Main Cooling Coil 1 Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + OA Cooling Coil Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + OA Cooling Coil 1, !- Component 1 Name + OA Cooling Coil 1 Water Inlet Node, !- Component 1 Inlet Node Name + OA Cooling Coil 1 Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Cooling Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Cooling Demand Side Bypass, !- Component 1 Name + CW Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + CW Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Cooling Demand Side Bypass, !- Name + CW Demand Bypass Inlet Node, !- Inlet Node Name + CW Demand Bypass Outlet Node; !- Outlet Node Name + + Branch, + Cooling Demand Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CW Demand Side Outlet Pipe, !- Component 1 Name + CW Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + CW Demand Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + CW Demand Side Outlet Pipe, !- Name + CW Demand Exit Pipe Inlet Node, !- Inlet Node Name + CW Demand Outlet Node; !- Outlet Node Name + + Branch, + Cooling Supply Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Supply Side Outlet Pipe, !- Component 1 Name + Supply Side Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + CW Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Supply Side Outlet Pipe, !- Name + Supply Side Exit Pipe Inlet Node, !- Inlet Node Name + CW Supply Outlet Node; !- Outlet Node Name + + Branch, + CW Pump Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + CW Circ Pump, !- Component 1 Name + CW Supply Inlet Node, !- Component 1 Inlet Node Name + CW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Central Chiller Branch, !- Name + , !- Pressure Drop Curve Name + Chiller:Electric, !- Component 1 Object Type + Central Chiller, !- Component 1 Name + Central Chiller Inlet Node, !- Component 1 Inlet Node Name + Central Chiller Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Cooling Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Supply Side Bypass, !- Component 1 Name + CW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + CW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Supply Side Bypass, !- Name + CW Supply Bypass Inlet Node, !- Inlet Node Name + CW Supply Bypass Outlet Node; !- Outlet Node Name + + Connector:Splitter, + CW Loop Splitter, !- Name + CW Pump Branch, !- Inlet Branch Name + Central Chiller Branch, !- Outlet Branch 1 Name + Cooling Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + CW Loop Mixer, !- Name + Cooling Supply Outlet, !- Outlet Branch Name + Central Chiller Branch, !- Inlet Branch 1 Name + Cooling Supply Bypass Branch; !- Inlet Branch 2 Name + + Connector:Splitter, + CW Demand Splitter, !- Name + Cooling Demand Inlet, !- Inlet Branch Name + Cooling Coil Branch, !- Outlet Branch 1 Name + OA Cooling Coil Branch, !- Outlet Branch 2 Name + Cooling Demand Bypass Branch; !- Outlet Branch 3 Name + + Connector:Mixer, + CW Demand Mixer, !- Name + Cooling Demand Outlet, !- Outlet Branch Name + Cooling Coil Branch, !- Inlet Branch 1 Name + OA Cooling Coil Branch, !- Inlet Branch 2 Name + Cooling Demand Bypass Branch; !- Inlet Branch 3 Name + + PlantEquipmentOperationSchemes, + CW Loop Operation, !- Name + PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type + Central Chiller Only, !- Control Scheme 1 Name + PlantOnSched; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:CoolingLoad, + Central Chiller Only, !- Name + 0, !- Load Range 1 Lower Limit {W} + 900000, !- Load Range 1 Upper Limit {W} + Cooling Plant; !- Range 1 Equipment List Name + + PlantEquipmentList, + Cooling Plant, !- Name + Chiller:Electric, !- Equipment 1 Object Type + Central Chiller; !- Equipment 1 Name + + Chiller:Electric, + Central Chiller, !- Name + AirCooled, !- Condenser Type + autosize, !- Nominal Capacity {W} + 3.2, !- Nominal COP {W/W} + Central Chiller Inlet Node, !- Chilled Water Inlet Node Name + Central Chiller Outlet Node, !- Chilled Water Outlet Node Name + Central Chiller Condenser Inlet Node, !- Condenser Inlet Node Name + Central Chiller Condenser Outlet Node, !- Condenser Outlet Node Name + 0.0, !- Minimum Part Load Ratio + 1.0, !- Maximum Part Load Ratio + 0.65, !- Optimum Part Load Ratio + 35.0, !- Design Condenser Inlet Temperature {C} + 2.778, !- Temperature Rise Coefficient + 6.67, !- Design Chilled Water Outlet Temperature {C} + autosize, !- Design Chilled Water Flow Rate {m3/s} + autosize, !- Design Condenser Fluid Flow Rate {m3/s} + 0.9949, !- Coefficient 1 of Capacity Ratio Curve + -0.045954, !- Coefficient 2 of Capacity Ratio Curve + -0.0013543, !- Coefficient 3 of Capacity Ratio Curve + 2.333, !- Coefficient 1 of Power Ratio Curve + -1.975, !- Coefficient 2 of Power Ratio Curve + 0.6121, !- Coefficient 3 of Power Ratio Curve + 0.03303, !- Coefficient 1 of Full Load Ratio Curve + 0.6852, !- Coefficient 2 of Full Load Ratio Curve + 0.2818, !- Coefficient 3 of Full Load Ratio Curve + 5, !- Chilled Water Outlet Temperature Lower Limit {C} + LeavingSetpointModulated;!- Chiller Flow Mode + + SetpointManager:Scheduled, + Central Chiller Setpoint Manager, !- Name + Temperature, !- Control Variable + CW Loop Temp Schedule, !- Schedule Name + Central Chiller Outlet Node; !- Setpoint Node or NodeList Name + + OutdoorAir:Node, + Central Chiller Condenser Inlet Node, !- Name + -1.0; !- Height Above Ground {m} + + Pump:VariableSpeed, + CW Circ Pump, !- Name + CW Supply Inlet Node, !- Inlet Node Name + CW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT, !- Pump Control Type + CoolingPumpAvailSched; !- Pump Flow Rate Schedule Name + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly; + + Output:Variable,*,Zone Air Temperature,hourly; + Output:Variable,*,Space Air Temperature,hourly; + + Output:Variable,*,Zone Air Humidity Ratio,hourly; !- HVAC Average [] + Output:Variable,*,Zone Air Relative Humidity,hourly; !- HVAC Average [%] + + Output:Variable,*,Space Air Humidity Ratio,hourly; !- HVAC Average [] + Output:Variable,*,Space Air Relative Humidity,hourly; !- HVAC Average [%] + + Output:Variable,*,Zone Air System Sensible Heating Rate,hourly; + Output:Variable,*,Zone Air System Sensible Cooling Rate,hourly; + + Output:Variable,*,Space Air System Sensible Heating Rate,hourly; + Output:Variable,*,Space Air System Sensible Cooling Rate,hourly; + + Output:Variable,Zone 5 In Node,System Node Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,Space 5 Office In Node,System Node Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,Space 5 Conference In Node,System Node Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,Zone 5-Remainder In Node,System Node Mass Flow Rate,hourly; !- HVAC Average [kg/s] + + Output:Variable,Zone 5 In Node,System Node Temperature,hourly; !- HVAC Average [kg/s] + Output:Variable,Space 5 Office In Node,System Node Temperature,hourly; !- HVAC Average [kg/s] + Output:Variable,Space 5 Conference In Node,System Node Temperature,hourly; !- HVAC Average [kg/s] + Output:Variable,Zone 5-Remainder In Node,System Node Temperature,hourly; !- HVAC Average [kg/s] + + Output:VariableDictionary,idf; + + Output:Meter:MeterFileOnly,Electricity:Facility,monthly; + + Output:Meter:MeterFileOnly,Electricity:Building,monthly; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,monthly; + + Output:Meter:MeterFileOnly,Electricity:HVAC,monthly; + + Output:Meter:MeterFileOnly,Electricity:Plant,monthly; + + Output:Meter:MeterFileOnly,NaturalGas:Facility,monthly; + + Output:Meter:MeterFileOnly,NaturalGas:Plant,monthly; + + Output:Meter:MeterFileOnly,Electricity:Facility,runperiod; + + Output:Meter:MeterFileOnly,Electricity:Building,runperiod; + + Output:Meter:MeterFileOnly,InteriorLights:Electricity,runperiod; + + Output:Meter:MeterFileOnly,Electricity:HVAC,runperiod; + + Output:Meter:MeterFileOnly,Electricity:Plant,runperiod; + + Output:Meter:MeterFileOnly,NaturalGas:Facility,runperiod; + + Output:Meter:MeterFileOnly,NaturalGas:Plant,runperiod; + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary, !- Report 1 Name + ZoneComponentLoadSummary;!- Report 2 Name + + Output:Surfaces:List,Details; + + Output:Surfaces:List,DecayCurvesFromComponentLoadsSummary; + + Output:Surfaces:Drawing,dxf; diff --git a/testfiles/PlantLoadProfileSteam.idf b/testfiles/PlantLoadProfileSteam.idf new file mode 100644 index 00000000000..ec614b747f4 --- /dev/null +++ b/testfiles/PlantLoadProfileSteam.idf @@ -0,0 +1,397 @@ +! PlantLoadProfileSteam.idf +! +! Basic file description: +! This input file is a plant-only simulation using the PLANT LOAD PROFILE object for steam loop; no zones are simulated. +! The PLANT LOAD PROFILE object allows a scheduled load to be connected to the plant demand side loop. +! This is useful when the building plant load profile is already known. It's also useful for testing the +! operation of plant supply side components. +! Run: 1 design day. +! Building: None. +! System: None. +! Plant: PLANT LOAD PROFILE with Boiler:Steam. + + Version,23.2; + + Building, + Plant Load Profile Steam Example, !- Name + 0.0, !- North Axis {deg} + Suburbs, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.04, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Timestep,6; + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + Relative; !- Coordinate System + + Site:Location, + CHICAGO_IL_USA_WMO_725300, !- Name + 42.00, !- Latitude {deg} + -87.88, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190.00; !- Elevation {m} + + SizingPeriod:DesignDay, + CHICAGO Ann Clg 1% Condns DB=>MWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.5, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.00; !- Sky Clearness + + SizingPeriod:DesignDay, + CHICAGO Ann Htg 99% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -17.3, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + + RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 12, !- End Month + 31, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + SimulationControl, + NO, !- Do Zone Sizing Calculation + NO, !- Do System Sizing Calculation + NO, !- Do Plant Sizing Calculation + YES, !- Run Simulation for Sizing Periods + NO, !- Run Simulation for Weather File Run Periods + NO, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + + PlantLoop, + Main Loop, !- Name + Steam, !- Fluid Type + , !- User Defined Fluid Type + Main Loop Operation, !- Plant Equipment Operation Scheme Name + Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 110, !- Maximum Loop Temperature {C} + 10, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Supply Inlet Node, !- Plant Side Inlet Node Name + Supply Outlet Node, !- Plant Side Outlet Node Name + Supply Branches, !- Plant Side Branch List Name + Supply Connectors, !- Plant Side Connector List Name + Demand Inlet Node, !- Demand Side Inlet Node Name + Demand Outlet Node, !- Demand Side Outlet Node Name + Demand Branches, !- Demand Side Branch List Name + Demand Connectors, !- Demand Side Connector List Name + OPTIMAL; !- Load Distribution Scheme + + SetpointManager:Scheduled, + Main Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + Main Loop Temp Sch, !- Schedule Name + Main Loop Setpoint Node List; !- Setpoint Node or NodeList Name + + NodeList, + Main Loop Setpoint Node List, !- Name + Supply Outlet Node; !- Node 1 Name + + PlantEquipmentOperationSchemes, + Main Loop Operation, !- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + Steam Boiler Plant Heat Supply, !- Control Scheme 1 Name + AlwaysOnSchedule; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:HeatingLoad, + Steam Boiler Plant Heat Supply, !- Name + 0, !- Load Range 1 Lower Limit {W} + 10000000, !- Load Range 1 Upper Limit {W} + Steam Boiler Heating Plant; !- Range 1 Equipment List Name + + PlantEquipmentList, + Steam Boiler Heating Plant, !- Name + Boiler:Steam, !- Equipment 1 Object Type + Steam Boiler Plant Boiler; !- Equipment 1 Name + + BranchList, + Supply Branches, !- Name + Supply Inlet Branch, !- Branch 1 Name + Heating Branch, !- Branch 2 Name + Supply Outlet Branch; !- Branch 3 Name + + ConnectorList, + Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Supply Mixer; !- Connector 2 Name + + Connector:Splitter, + Supply Splitter, !- Name + Supply Inlet Branch, !- Inlet Branch Name + Heating Branch; !- Outlet Branch 1 Name + + Connector:Mixer, + Supply Mixer, !- Name + Supply Outlet Branch, !- Outlet Branch Name + Heating Branch; !- Inlet Branch 1 Name + + Branch, + Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed:Condensate, !- Component 1 Object Type + Steam Boiler Plant Steam Circ Pump, !- Component 1 Name + Supply Inlet Node, !- Component 1 Inlet Node Name + Condensate Pump Outlet Node;!- Component 1 Outlet Node Name + + Pump:VariableSpeed:Condensate, + Steam Boiler Plant Steam Circ Pump, !- Name + Supply Inlet Node, !- Inlet Node Name + Condensate Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Steam Volume Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + ; !- Pump Flow Rate Schedule Name + + Branch, + Heating Branch, !- Name + , !- Pressure Drop Curve Name + Boiler:Steam, !- Component 1 Object Type + Steam Boiler Plant Boiler, !- Component 1 Name + Steam Boiler Plant Boiler Inlet Node, !- Component 1 Inlet Node Name + Steam Boiler Plant Boiler Outlet Node; !- Component 1 Outlet Node Name + + Boiler:Steam, + Steam Boiler Plant Boiler, !- Name + NaturalGas, !- Fuel Type + 160000, !- Maximum Operating Pressure {Pa} + 0.8, !- Theoretical Efficiency + 115, !- Design Outlet Steam Temperature {C} + autosize, !- Nominal Capacity {W} + 0.00001, !- Minimum Part Load Ratio + 1.0, !- Maximum Part Load Ratio + 0.2, !- Optimum Part Load Ratio + 0.8, !- Coefficient 1 of Fuel Use Function of Part Load Ratio Curve + 0.1, !- Coefficient 2 of Fuel Use Function of Part Load Ratio Curve + 0.1, !- Coefficient 3 of Fuel Use Function of Part Load Ratio Curve + Steam Boiler Plant Boiler Inlet Node, !- Water Inlet Node Name + Steam Boiler Plant Boiler Outlet Node; !- Steam Outlet Node Name + + Branch, + Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Supply Outlet Pipe, !- Component 1 Name + Supply Outlet Pipe Inlet Node,!- Component 1 Inlet Node Name + Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic:Steam, + Supply Outlet Pipe, !- Name + Supply Outlet Pipe Inlet Node,!- Inlet Node Name + Supply Outlet Node; !- Outlet Node Name + + BranchList, + Demand Branches, !- Name + Demand Inlet Branch, !- Branch 1 Name + Load Profile Branch 1, !- Branch 2 Name + Demand Outlet Branch; !- Branch 3 Name + + ConnectorList, + Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Demand Mixer; !- Connector 2 Name + + Connector:Splitter, + Demand Splitter, !- Name + Demand Inlet Branch, !- Inlet Branch Name + Load Profile Branch 1; !- Outlet Branch 1 Name + + Connector:Mixer, + Demand Mixer, !- Name + Demand Outlet Branch, !- Outlet Branch Name + Load Profile Branch 1; !- Inlet Branch 1 Name + + Branch, + Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Demand Inlet Pipe, !- Component 1 Name + Demand Inlet Node, !- Component 1 Inlet Node Name + Demand Inlet Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic:Steam, + Demand Inlet Pipe, !- Name + Demand Inlet Node, !- Inlet Node Name + Demand Inlet Pipe Outlet Node; !- Outlet Node Name + + Branch, + Load Profile Branch 1, !- Name + , !- Pressure Drop Curve Name + LoadProfile:Plant, !- Component 1 Object Type + Load Profile 1, !- Component 1 Name + Demand Load Profile 1 Inlet Node, !- Component 1 Inlet Node Name + Demand Load Profile 1 Outlet Node; !- Component 1 Outlet Node Name + + LoadProfile:Plant, + Load Profile 1, !- Name + Demand Load Profile 1 Inlet Node, !- Inlet Node Name + Demand Load Profile 1 Outlet Node, !- Outlet Node Name + Load Profile 1 Load Schedule, !- Load Schedule Name + 0.008, !- Peak Flow Rate {m3/s} + Load Profile 1 Flow Frac Schedule, !- Flow Rate Fraction Schedule Name + Steam, !- Plant Loop Fluid Type + 3, !- Degree of SubCooling + 15; !- Degree of Loop SubCooling + + Branch, + Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Demand Outlet Pipe, !- Component 1 Name + Demand Outlet Pipe Inlet Node, !- Component 1 Inlet Node Name + Demand Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic:Steam, + Demand Outlet Pipe, !- Name + Demand Outlet Pipe Inlet Node, !- Inlet Node Name + Demand Outlet Node; !- Outlet Node Name + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + Schedule:Compact, + Main Loop Temp Sch, !- Name + Any Number, !- Schedule Type Limits Name + THROUGH: 12/31, !- Field 1 + FOR: AllDays, !- Field 2 + UNTIL: 24:00,100.0; !- Field 3 + + Schedule:Compact, + AlwaysOnSchedule, !- Name + On/Off, !- Schedule Type Limits Name + THROUGH: 12/31, !- Field 1 + FOR: AllDays, !- Field 2 + UNTIL: 24:00,1; !- Field 3 + + Schedule:Compact, + Load Profile 1 Load Schedule, !- Name + Any Number, !- Schedule Type Limits Name + THROUGH: 12/31, !- Field 1 + FOR: AllDays, !- Field 2 + UNTIL: 7:00,2000, !- Field 3 + UNTIL: 17:00,10000, !- Field 4 + UNTIL: 24:00,6000; !- Field 5 + + Schedule:Compact, + Load Profile 1 Flow Frac Schedule, !- Name + Any Number, !- Schedule Type Limits Name + THROUGH: 12/31, !- Field 1 + FOR: AllDays, !- Field 2 + UNTIL: 24:00,1.0; !- Field 3 + + Sizing:Plant, + Main Loop, !- Plant or Condenser Loop Name + Steam, !- Loop Type + 110, !- Design Loop Exit Temperature {C} + 25; !- Loop Design Temperature Difference {deltaC} + + Output:VariableDictionary,Regular; + + Output:Variable,*,System Node Temperature,Hourly; + + Output:Variable,*,System Node Mass Flow Rate,Hourly; + + Output:Variable,*,Plant Load Profile Mass Flow Rate,Hourly; + + Output:Variable,*,Plant Load Profile Heat Transfer Rate,Hourly; + + Output:Variable,*,Plant Load Profile Heat Transfer Energy,Hourly; + + Output:Variable,*,Load Profile Steam Outlet Temperature,Hourly; + + Output:Variable,*,Boiler Heating Rate,Hourly; + + Output:Variable,*,Boiler Steam Efficiency,Hourly; + + Output:Variable,*,Boiler Steam Mass Flow Rate,Hourly; + + Output:Variable,*,Boiler Steam Inlet Temperature,Hourly; + + Output:Variable,*,Boiler Steam Outlet Temperature,Hourly; + + Output:Variable,Main Loop,Plant Supply Side Heating Demand Rate,Hourly; + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + + Output:SQLite, + Simple; !- Option Type + diff --git a/testfiles/PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf b/testfiles/PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf new file mode 100644 index 00000000000..4e514770619 --- /dev/null +++ b/testfiles/PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf @@ -0,0 +1,11817 @@ +! PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW +! +! Test file for new plant supervisory control, +! +! Large office, new construction 90.1-2004 +! ASHRAE Standards 90.1-2004 and 62-1999 +! +! Description: 12 story plus basement, office building derived from DOE reference building models +! +! +! Form: Area = 46,320 m2 (498,588 ft2); Number of Stories = 12; Shape = rectangle, Aspect ratio = 1.5 +! Envelope: Envelope thermal properties vary with climate according to ASHRAE Standard 90.1-2004. +! Opaque constructions: mass walls; built-up flat roof (insulation above deck); slab-on-grade floor +! Windows: window-to-wall ratio = 38.0%, equal distribution of windows +! Infiltration in perimeter zones only +! = 0.4 cfm/ft2 above grade wall area at 0.3 in wc (75 Pa) adjusted to 0.016 in wc (4 Pa). +! 25% of full value when ventilation system on. +! HVAC: 2 air-cooled chiller heaters (HeatPump:PlantLoop:EIR), PIU air terminal units and plenum zones +! UnitarySystem with water cooling coil also serves each zone to add cooling plant connections to each zone +! Secondary Chilled Water loop to serve zone units +! Basement left on its own VAV +! Economizer per 90.1-2004 +! +! Int. gains: lights = 10.76 W/m2 (1.0 W/ft2) (building area method); +! elec. plug loads = 10.76 W/m2 (1.0 W/ft2) +! gas plug load = 0 W/m2 (0 W/ft2) +! people = 2,397 total, 5.38/100 m2 (5.0/1000 ft2); basement 2.69/100 m2 (2.5/1000 ft2) +! elevators = 12 @ 25 HP each, 91% motor efficiency, motor heat exhausted directly +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Zonal Equipment: AirloopHVAC:UnitarySystem with water cooling coil and fan +! Air Primary Loops: PIU Terminals served by DOAS (except Basement) +! four separate air handlers -- one for each floor +! +! Plant Loops: SWHSys1, HeatSys1, CoolSys1, Secondary Chilled Water Loop +! System Equipment Autosize: Yes +! Purchased Cooling: None +! Purchased Heating: None +! Coils: Coil:Cooling:Water; Coil:Heating:Water +! Pumps: Yes +! Boilers: Boiler:HotWater (gas-fired) +! Chillers: HeatPump:PlantLoop:EIR:Cooling, HeatPump:PlantLoop:EIR:Heating +! Number of Zones: 19 + + Version,23.2; + + SimulationControl, + YES, !- Do Zone Sizing Calculation + YES, !- Do System Sizing Calculation + YES, !- Do Plant Sizing Calculation + no, !- Run Simulation for Sizing Periods + yes, !- Run Simulation for Weather File Run Periods + no, !- Do HVAC Sizing Simulation for Sizing Periods + 2; !- Maximum Number of HVAC Sizing Simulation Passes + + Building, + Ref Bldg Large Office New2004_v1.3_5.0, !- Name + 0.0000, !- North Axis {deg} + City, !- Terrain + 0.0400, !- Loads Convergence Tolerance Value + 0.2000, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + RunPeriod, + Annual, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 12, !- End Month + 31, !- End Day of Month + , !- End Year + Sunday, !- Day of Week for Start Day + No, !- Use Weather File Holidays and Special Days + No, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + + +! ***HOLIDAYS & DAYLIGHT SAVINGS*** + + RunPeriodControl:DaylightSavingTime, + 2nd Sunday in March, !- Start Date + 1st Sunday in November; !- End Date + + RunPeriodControl:SpecialDays, + New Years Day, !- Name + January 1, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Veterans Day, !- Name + November 11, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Christmas, !- Name + December 25, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Independence Day, !- Name + July 4, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + MLK Day, !- Name + 3rd Monday in January, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Presidents Day, !- Name + 3rd Monday in February, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Memorial Day, !- Name + Last Monday in May, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Labor Day, !- Name + 1st Monday in September, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Columbus Day, !- Name + 2nd Monday in October, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Thanksgiving, !- Name + 4th Thursday in November,!- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + +! ***SCHEDULE TYPES*** + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Humidity, !- Name + 10, !- Lower Limit Value + 90, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Number; !- Name + +! ***ALWAYS ON SCHEDULE*** + + Schedule:Compact, + ALWAYS_ON, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + HeatBalanceAlgorithm,ConductionTransferFunction,200.0000; + + ZoneAirHeatBalanceAlgorithm, + AnalyticalSolution; !- Algorithm + + Sizing:Parameters, + 1.33, !- Heating Sizing Factor + 1.33, !- Cooling Sizing Factor + 6; !- Timesteps in Averaging Window + + ConvergenceLimits, + 2, !- Minimum System Timestep {minutes} + 25, !- Maximum HVAC Iterations + 4, !- Minimum Plant Iterations + 12; !- Maximum Plant Iterations + + ShadowCalculation, + PolygonClipping, + Periodic, !- Calculation Method + 20, !- Calculation Frequency + 15000; !- Maximum Figures in Shadow Overlap Calculations + + Timestep,4; + +! WeatherFileName=USA_IL_Chicago-OHare_TMY2.epw + + Site:Location, + USA IL-CHICAGO-OHARE, !- Name + 41.77, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190; !- Elevation {m} + +! CHICAGO_IL_USA Annual Heating 99.6%, MaxDB=-20.6°C + + SizingPeriod:DesignDay, + CHICAGO Ann Htg 99.6% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -20.6, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -20.6, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling (WB=>MDB) .4%, MDB=31.2°C WB=25.5°C + + SizingPeriod:DesignDay, + CHICAGO Ann Clg .4% Condns WB=>MDB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.2, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 25.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.00; !- Sky Clearness + + Site:WaterMainsTemperature, + CORRELATION, !- Calculation Method + , !- Temperature Schedule Name + 9.69, !- Annual Average Outdoor Air Temperature {C} + 28.10; !- Maximum Difference In Monthly Average Outdoor Air Temperatures {deltaC} + + Site:GroundTemperature:BuildingSurface,19.527,19.502,19.536,19.598,20.002,21.640,22.225,22.375,21.449,20.121,19.802,19.633; + +! Exterior Walls + + Construction, + Mass Non-res Ext Wall, !- Name + 1IN Stucco, !- Outside Layer + 8IN Concrete HW, !- Layer 2 + Mass NonRes Wall Insulation, !- Layer 3 + 1/2IN Gypsum; !- Layer 4 + + Material, + Mass NonRes Wall Insulation, !- Name + MediumRough, !- Roughness + 0.0495494599433393, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Roof + + Construction, + IEAD Non-res Roof, !- Name + Roof Membrane, !- Outside Layer + IEAD NonRes Roof Insulation, !- Layer 2 + Metal Decking; !- Layer 3 + + Material, + IEAD NonRes Roof Insulation, !- Name + MediumRough, !- Roughness + 0.127338688569477, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Slab on grade, unheated + + Construction, + ext-slab, !- Name + HW CONCRETE, !- Outside Layer + CP02 CARPET PAD; !- Layer 2 + +! Interior Walls + + Construction, + int-walls, !- Name + 1/2IN Gypsum, !- Outside Layer + 1/2IN Gypsum; !- Layer 2 + +! Interior Floors + + Construction, + INT-FLOOR-TOPSIDE, !- Name + MAT-CC05 4 HW CONCRETE, !- Outside Layer + CP02 CARPET PAD; !- Layer 2 + + Construction, + INT-FLOOR-UNDERSIDE, !- Name + CP02 CARPET PAD, !- Outside Layer + MAT-CC05 4 HW CONCRETE; !- Layer 2 + + Construction, + Underground Wall Non-res,!- Name + 8IN Concrete HW, !- Outside Layer + UGWall NonRes Insulation;!- Layer 2 + + Material, + UGWall NonRes Insulation,!- Name + MediumRough, !- Roughness + 0.0001, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! ***WINDOW/DOOR CONSTRUCTIONS AND MATERIALS*** + + Construction, + Window Non-res Fixed, !- Name + NonRes Fixed Assembly Window; !- Outside Layer + + WindowMaterial:SimpleGlazingSystem, + NonRes Fixed Assembly Window, !- Name + 3.23646, !- U-Factor {W/m2-K} + 0.39; !- Solar Heat Gain Coefficient + +! ***COMMON CONSTRUCTIONS AND MATERIALS*** + + Construction, + DropCeiling, !- Name + Std AC02; !- Outside Layer + + Construction, + InteriorFurnishings, !- Name + Std Wood 6inch; !- Outside Layer + + Material, + Std Wood 6inch, !- Name + MediumSmooth, !- Roughness + 0.15, !- Thickness {m} + 0.12, !- Conductivity {W/m-K} + 540.0000, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + Wood Siding, !- Name + MediumSmooth, !- Roughness + 0.0100, !- Thickness {m} + 0.1100, !- Conductivity {W/m-K} + 544.6200, !- Density {kg/m3} + 1210.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7800, !- Solar Absorptance + 0.7800; !- Visible Absorptance + + Material, + 1/2IN Gypsum, !- Name + Smooth, !- Roughness + 0.0127, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 784.9000, !- Density {kg/m3} + 830.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 1IN Stucco, !- Name + Smooth, !- Roughness + 0.0253, !- Thickness {m} + 0.6918, !- Conductivity {W/m-K} + 1858.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 8IN CONCRETE HW, !- Name + Rough, !- Roughness + 0.2032, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Siding, !- Name + Smooth, !- Roughness + 0.0015, !- Thickness {m} + 44.9600, !- Conductivity {W/m-K} + 7688.8600, !- Density {kg/m3} + 410.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.2000, !- Solar Absorptance + 0.2000; !- Visible Absorptance + + Material, + HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material:NoMass, + CP02 CARPET PAD, !- Name + VeryRough, !- Roughness + 0.2165, !- Thermal Resistance {m2-K/W} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.8000; !- Visible Absorptance + + Material, + Roof Membrane, !- Name + VeryRough, !- Roughness + 0.0095, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 1121.2900, !- Density {kg/m3} + 1460.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Decking, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + Metal Roofing, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + MAT-CC05 4 HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Acoustic tile for drop ceiling + + Material, + Std AC02, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 5.7000000E-02, !- Conductivity {W/m-K} + 288.0000, !- Density {kg/m3} + 1339.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.2000000; !- Visible Absorptance + + Material:NoMass, + MAT-AIR-WALL, !- Name + Rough, !- Roughness + 0.2079491, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7; !- Solar Absorptance + +! ZONE LIST: +! Basement +! Core_bottom +! Core_mid (mult=10) +! Core_top +! GroundFloor_Plenum +! MidFloor_Plenum (mult=10) +! Perimeter_bot_ZN_1 +! Perimeter_bot_ZN_2 +! Perimeter_bot_ZN_3 +! Perimeter_bot_ZN_4 +! Perimeter_mid_ZN_1 (mult=10) +! Perimeter_mid_ZN_2 (mult=10) +! Perimeter_mid_ZN_3 (mult=10) +! Perimeter_mid_ZN_4 (mult=10) +! Perimeter_top_ZN_1 +! Perimeter_top_ZN_2 +! Perimeter_top_ZN_3 +! Perimeter_top_ZN_4 +! TopFloor_Plenum +! ***ZONES*** + + Zone, + Basement, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0400, !- Y Origin {m} + 0.2000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_bottom, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_mid, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_top, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + GroundFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + + Zone, + MidFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + TopFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + +! ***WALLS*** + + BuildingSurface:Detailed, + Basement_Ceiling_1, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_2, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_3, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_4, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_5, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + Basement, , !- Zone Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,-2.4390; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_East, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, , !- Zone Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_North, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, , !- Zone Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_South, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, , !- Zone Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_West, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, , !- Zone Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Building_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,47.5584, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,47.5584, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Ceiling, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,3.9632, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,3.9632, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Ceiling, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,23.7792, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,23.7792, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, , !- Zone Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + +! ***WINDOWS*** + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.0952; !- X,Y,Z ==> Vertex 4 {m} + +! ***GEOMETRY RULES*** + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative, !- Coordinate System + Relative; !- Daylighting Reference Point Coordinate System + + +! ***PEOPLE*** + + People, + Basement People, !- Name + Basement, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 37.16, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_bottom People, !- Name + Core_bottom, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_mid People, !- Name + Core_mid, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_top People, !- Name + Core_top, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_1 People, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_2 People, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_3 People, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_4 People, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_1 People, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_2 People, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_3 People, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_4 People, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_1 People, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_2 People, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_3 People, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_4 People, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Zone Floor Area {person/m2} + 18.58, !- Zone Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + +! ***LIGHTS*** + + Lights, + Basement_Lights, !- Name + Basement, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_bottom_Lights, !- Name + Core_bottom, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_mid_Lights, !- Name + Core_mid, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_top_Lights, !- Name + Core_top, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_1_Lights, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_2_Lights, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_3_Lights, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_4_Lights, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_1_Lights, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_2_Lights, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_3_Lights, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_4_Lights, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_1_Lights, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_2_Lights, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_3_Lights, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_4_Lights, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + +! ***EQUIPMENT GAINS*** + + ElectricEquipment, + Basement_PlugMisc_Equip, !- Name + Basement, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_bottom_PlugMisc_Equip, !- Name + Core_bottom, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_mid_PlugMisc_Equip, !- Name + Core_mid, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_top_PlugMisc_Equip, !- Name + Core_top, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_1_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_2_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_3_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_4_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_1_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_2_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_3_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_4_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_1_PlugMisc_Equip, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_2_PlugMisc_Equip, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_3_PlugMisc_Equip, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_4_PlugMisc_Equip, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + +! ***EXTERIOR LOADS*** + + Exterior:Lights, + Exterior Facade Lighting,!- Name + ALWAYS_ON, !- Schedule Name + 51262, !- Design Level {W} + AstronomicalClock, !- Control Option + Exterior Facade Lighting;!- End-Use Subcategory + + Exterior:FuelEquipment, + Elevators, !- Name + Electricity, !- Fuel Use Type + BLDG_ELEVATORS, !- Schedule Name + 244443.956043956, !- Design Level {W} + Elevators; !- End-Use Subcategory + +! ***INFILTRATION*** + + ZoneInfiltration:DesignFlowRate, + GroundFloor_Plenum_Infiltration, !- Name + GroundFloor_Plenum, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + MidFloor_Plenum_Infiltration, !- Name + MidFloor_Plenum, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_1_Infiltration, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_2_Infiltration, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_3_Infiltration, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_4_Infiltration, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_1_Infiltration, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_2_Infiltration, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_3_Infiltration, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_4_Infiltration, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_1_Infiltration, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_2_Infiltration, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_3_Infiltration, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_4_Infiltration, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + TopFloor_Plenum_Infiltration, !- Name + TopFloor_Plenum, !- Zone or ZoneList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + +! ***INTERNAL MASS*** + + InternalMass, + Basement Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Basement, , !- Zone Name + 7126.2120; !- Surface Area {m2} + + InternalMass, + Core_bottom Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_bottom, , !- Zone Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Core_mid Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_mid, , !- Zone Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Core_top Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_top, , !- Zone Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_1, , !- Zone Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_2, , !- Zone Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_3, , !- Zone Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_4, , !- Zone Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_1, , !- Zone Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_2, , !- Zone Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_3, , !- Zone Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_4, , !- Zone Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_1, , !- Zone Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_2, , !- Zone Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_3, , !- Zone Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_4, , !- Zone Name + 403.9503; !- Surface Area {m2} + +! ***INTERNAL GAINS SCHEDULES*** + + Schedule:Compact, + BLDG_ELEVATORS, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 04:00,0.05, !- Field 3 + Until: 05:00,0.10, !- Field 5 + Until: 06:00,0.20, !- Field 7 + Until: 07:00,0.40, !- Field 9 + Until: 09:00,0.50, !- Field 11 + Until: 10:00,0.35, !- Field 13 + Until: 16:00,0.15, !- Field 15 + Until: 17:00,0.35, !- Field 17 + Until: 19:00,0.50, !- Field 19 + Until: 21:00,0.40, !- Field 21 + Until: 22:00,0.30, !- Field 23 + Until: 23:00,0.20, !- Field 25 + Until: 24:00,0.10; !- Field 27 + + Schedule:Compact, + INFIL_QUARTER_ON_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,1.0, !- Field 3 + Until: 22:00,0.25, !- Field 5 + Until: 24:00,1.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 06:00,1.0, !- Field 10 + Until: 18:00,0.25, !- Field 12 + Until: 24:00,1.0, !- Field 14 + For: Sunday Holidays AllOtherDays, !- Field 16 + Until: 24:00,1.0; !- Field 17 + + Schedule:Compact, + BLDG_OCC_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.05, !- Field 7 + For: Weekdays, !- Field 9 + Until: 06:00,0.0, !- Field 10 + Until: 07:00,0.1, !- Field 12 + Until: 08:00,0.2, !- Field 14 + Until: 12:00,0.95, !- Field 16 + Until: 13:00,0.5, !- Field 18 + Until: 17:00,0.95, !- Field 20 + Until: 18:00,0.7, !- Field 22 + Until: 20:00,0.4, !- Field 24 + Until: 22:00,0.1, !- Field 26 + Until: 24:00,0.05, !- Field 28 + For: Saturday, !- Field 30 + Until: 06:00,0.0, !- Field 31 + Until: 08:00,0.1, !- Field 33 + Until: 14:00,0.5, !- Field 35 + Until: 17:00,0.1, !- Field 37 + Until: 24:00,0.0, !- Field 39 + For: AllOtherDays, !- Field 41 + Until: 24:00,0.0; !- Field 42 + + Schedule:Compact, + BLDG_LIGHT_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 05:00,0.05, !- Field 3 + Until: 07:00,0.1, !- Field 5 + Until: 08:00,0.3, !- Field 7 + Until: 17:00,0.9, !- Field 9 + Until: 18:00,0.7, !- Field 11 + Until: 20:00,0.5, !- Field 13 + Until: 22:00,0.3, !- Field 15 + Until: 23:00,0.1, !- Field 17 + Until: 24:00,0.05, !- Field 19 + For: Saturday, !- Field 21 + Until: 06:00,0.05, !- Field 22 + Until: 08:00,0.1, !- Field 24 + Until: 14:00,0.5, !- Field 26 + Until: 17:00,0.15, !- Field 28 + Until: 24:00,0.05, !- Field 30 + For: SummerDesignDay, !- Field 32 + Until: 24:00,1.0, !- Field 33 + For: WinterDesignDay, !- Field 35 + Until: 24:00,0.0, !- Field 36 + For: AllOtherDays, !- Field 38 + Until: 24:00,0.05; !- Field 39 + + Schedule:Compact, + BLDG_EQUIP_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 08:00,0.40, !- Field 3 + Until: 12:00,0.90, !- Field 5 + Until: 13:00,0.80, !- Field 7 + Until: 17:00,0.90, !- Field 9 + Until: 18:00,0.80, !- Field 11 + Until: 20:00,0.60, !- Field 13 + Until: 22:00,0.50, !- Field 15 + Until: 24:00,0.40, !- Field 17 + For: Saturday, !- Field 19 + Until: 06:00,0.30, !- Field 20 + Until: 08:00,0.4, !- Field 22 + Until: 14:00,0.5, !- Field 24 + Until: 17:00,0.35, !- Field 26 + Until: 24:00,0.30, !- Field 28 + For: SummerDesignDay, !- Field 30 + Until: 24:00,1.0, !- Field 31 + For: WinterDesignDay, !- Field 33 + Until: 24:00,0.0, !- Field 34 + For: AllOtherDays, !- Field 36 + Until: 24:00,0.30; !- Field 37 + + Schedule:Compact, + ACTIVITY_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,120; !- Field 3 + + Schedule:Compact, + WORK_EFF_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Schedule:Compact, + AIR_VELO_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.2; !- Field 3 + + Schedule:Compact, + CLOTHING_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 04/30, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 09/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.5, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.0; !- Field 11 + +! ***HVAC EQUIPMENT*** + +Fan:SystemModel, + VAV_1_Fan , !- Name + HVACOperationSchd , !- Availability Schedule Name + VAV_1_HeatC-VAV_1_FanNode, !- Air Inlet Node Name + VAV_1 Supply Equipment Outlet Node, !- Air Outlet Node Name + AUTOSIZE , !- Design Maximum Air Flow Rate + Continuous , !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 1017.592, !- Design Pressure Rise + 0.93 , !- Motor Efficiency + 1.0 , !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate + , !- Electric Power Per Unit Flow Rate Per Unit Pressure + 0.6045, !- Fan Total Efficiency + VAV Fan Curve, !- Electric Power Function of Flow Fraction Curve Name + , !- Night Ventilation Mode Pressure Rise + , !- Night Ventilation Mode Flow Fraction + , !- Motor Loss Zone Name + , !- Motor Loss Radiative Fraction + Fan Energy; !- End-Use Subcategory + +Curve:Quartic, + VAV Fan Curve , !- Name + 0.0407598940 , !- Coefficient1 Constant + 0.08804497 , !- Coefficient2 x + -0.072926120 , !- Coefficient3 x**2 + 0.9437398230 , !- Coefficient4 x**3 + 0.0 , !- Coefficient5 x**4 + 0.0 , !- Minimum Value of x + 1.0, !- Maximum Value of x + 0.0 , !- Minimum Curve Output + 1.0 , !- Maximum Curve Output + Dimensionless , !- Input Unit Type for X + Dimensionless ; !- Output Unit Type + + +Fan:SystemModel, + VAV_2_Fan , !- Name + HVACOperationSchd , !- Availability Schedule Name + VAV_2_HeatC-VAV_2_FanNode, !- Air Inlet Node Name + VAV_2 Supply Equipment Outlet Node, !- Air Outlet Node Name + AUTOSIZE , !- Design Maximum Air Flow Rate + Continuous , !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 1017.592, !- Design Pressure Rise + 0.95 , !- Motor Efficiency + 1.0 , !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate + , !- Electric Power Per Unit Flow Rate Per Unit Pressure + 0.6175, !- Fan Total Efficiency + VAV Fan Curve, !- Electric Power Function of Flow Fraction Curve Name + , !- Night Ventilation Mode Pressure Rise + , !- Night Ventilation Mode Flow Fraction + , !- Motor Loss Zone Name + , !- Motor Loss Radiative Fraction + Fan Energy; !- End-Use Subcategory + +Fan:SystemModel, + VAV_3_Fan , !- Name + HVACOperationSchd , !- Availability Schedule Name + VAV_3_HeatC-VAV_3_FanNode, !- Air Inlet Node Name + VAV_3 Supply Equipment Outlet Node, !- Air Outlet Node Name + AUTOSIZE , !- Design Maximum Air Flow Rate + Continuous , !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 1017.592, !- Design Pressure Rise + 0.93 , !- Motor Efficiency + 1.0 , !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate + , !- Electric Power Per Unit Flow Rate Per Unit Pressure + 0.6045, !- Fan Total Efficiency + VAV Fan Curve, !- Electric Power Function of Flow Fraction Curve Name + , !- Night Ventilation Mode Pressure Rise + , !- Night Ventilation Mode Flow Fraction + , !- Motor Loss Zone Name + , !- Motor Loss Radiative Fraction + Fan Energy; !- End-Use Subcategory + +Fan:SystemModel, + VAV_5_Fan , !- Name + Always_ON , !- Availability Schedule Name + VAV_5_HeatC-VAV_5_FanNode, !- Air Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Air Outlet Node Name + AUTOSIZE , !- Design Maximum Air Flow Rate + Continuous , !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 1109.648, !- Design Pressure Rise + 0.91 , !- Motor Efficiency + 1.0 , !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate + , !- Electric Power Per Unit Flow Rate Per Unit Pressure + 0.5915, !- Fan Total Efficiency + VAV Fan Curve, !- Electric Power Function of Flow Fraction Curve Name + , !- Night Ventilation Mode Pressure Rise + , !- Night Ventilation Mode Flow Fraction + , !- Motor Loss Zone Name + , !- Motor Loss Radiative Fraction + Fan Energy; !- End-Use Subcategory + + Coil:Heating:Water, + Basement VAV Box Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + Basement VAV Box Reheat CoilDemand Inlet Node, !- Water Inlet Node Name + Basement VAV Box Reheat CoilDemand Outlet Node, !- Water Outlet Node Name + Basement VAV Box Damper Node, !- Air Inlet Node Name + Basement VAV Box Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Heating:Water, + VAV_2_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + VAV_2_HeatCDemand Inlet Node, !- Water Inlet Node Name + VAV_2_HeatCDemand Outlet Node, !- Water Outlet Node Name + VAV_2_CoolC-VAV_2_HeatCNode, !- Air Inlet Node Name + VAV_2_HeatC-VAV_2_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 40, !- Rated Inlet Water Temperature {C} + 9.0, !- Rated Inlet Air Temperature {C} + 36.0, !- Rated Outlet Water Temperature {C} + 35.0, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + ! 5.0; !- Design Water Temperature Difference + + Coil:Heating:Water, + VAV_1_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + VAV_1_HeatCDemand Inlet Node, !- Water Inlet Node Name + VAV_1_HeatCDemand Outlet Node, !- Water Outlet Node Name + VAV_1_CoolC-VAV_1_HeatCNode, !- Air Inlet Node Name + VAV_1_HeatC-VAV_1_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 40, !- Rated Inlet Water Temperature {C} + 9.0, !- Rated Inlet Air Temperature {C} + 36.0, !- Rated Outlet Water Temperature {C} + 35.0, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + !5.0; !- Design Water Temperature Difference + + Coil:Heating:Water, + VAV_3_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + VAV_3_HeatCDemand Inlet Node, !- Water Inlet Node Name + VAV_3_HeatCDemand Outlet Node, !- Water Outlet Node Name + VAV_3_CoolC-VAV_3_HeatCNode, !- Air Inlet Node Name + VAV_3_HeatC-VAV_3_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 40, !- Rated Inlet Water Temperature {C} + 9.0, !- Rated Inlet Air Temperature {C} + 36.0, !- Rated Outlet Water Temperature {C} + 35.0, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + ! 5.0; !- Design Water Temperature Difference + + Coil:Heating:Water, + VAV_5_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + VAV_5_HeatCDemand Inlet Node, !- Water Inlet Node Name + VAV_5_HeatCDemand Outlet Node, !- Water Outlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Air Inlet Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 40, !- Rated Inlet Water Temperature {C} + 9.0, !- Rated Inlet Air Temperature {C} + 36.0, !- Rated Outlet Water Temperature {C} + 35.0, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Cooling:Water, + VAV_3_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + VAV_3_CoolCDemand Inlet Node, !- Water Inlet Node Name + VAV_3_CoolCDemand Outlet Node, !- Water Outlet Node Name + VAV_3_OA-VAV_3_CoolCNode,!- Air Inlet Node Name + VAV_3_CoolC-VAV_3_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + VAV_2_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + VAV_2_CoolCDemand Inlet Node, !- Water Inlet Node Name + VAV_2_CoolCDemand Outlet Node, !- Water Outlet Node Name + VAV_2_OA-VAV_2_CoolCNode,!- Air Inlet Node Name + VAV_2_CoolC-VAV_2_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + VAV_1_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + VAV_1_CoolCDemand Inlet Node, !- Water Inlet Node Name + VAV_1_CoolCDemand Outlet Node, !- Water Outlet Node Name + VAV_1_OA-VAV_1_CoolCNode,!- Air Inlet Node Name + VAV_1_CoolC-VAV_1_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + VAV_5_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + VAV_5_CoolCDemand Inlet Node, !- Water Inlet Node Name + VAV_5_CoolCDemand Outlet Node, !- Water Outlet Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Air Inlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + AirTerminal:SingleDuct:VAV:Reheat, + Basement VAV Box Component, !- Name + ALWAYS_ON, !- Availability Schedule Name + Basement VAV Box Damper Node, !- Damper Air Outlet Node Name + Basement VAV Box Inlet Node Name, !- Air Inlet Node Name + AUTOSIZE, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Basement VAV Box Reheat Coil, !- Reheat Coil Name + AUTOSIZE, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Basement VAV Box Outlet Node Name, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + DesignSpecification:OutdoorAir, + Office DSOA, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Core_bottom PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Core_bottom PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Core_bottom PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Core_bottom PIUHEATING Outlet Node Name, !- Outlet Node Name + Core_bottom PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Core_bottom PIUHEATING Mixer, !- Zone Mixer Name + Core_bottom PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Core_bottom PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Core_bottom PIUHEATING Mixer, !- Name + Core_bottom PIUHEATING Fan Inlet Node, !- Outlet Node Name + Core_bottom PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Core_bottom PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Core_bottom, !- Zone Name + Core_bottom Equipment, !- Zone Conditioning Equipment List Name + Core_bottom Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Core_bottom_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Core_bottom Air Node, !- Zone Air Node Name + Core_bottom Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Core_bottom Inlet Nodes, !- Name + Core_bottom PIUHEATING Outlet Node Name, !- Node 1 Name + Core_bottom_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Core_bottom_ZoneCooling, !- Name + Load, !- Control Type + Core_bottom, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Core_bottom_ZoneOutlet Node, !- Air Inlet Node Name + Core_bottom_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Core_bottom_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Core_bottom Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Core_bottom Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Core_bottom PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Core_bottom PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Core_bottom_FanOutlet Node, !- Air Inlet Node Name + Core_bottom_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Core_bottom_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_bottom_ZoneOutlet Node, !- Air Inlet Node Name + Core_bottom_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Core_bottom PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_bottom PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Core_bottom PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Curve:Quartic, + fan curve 1, !- Name + 0.1379, !- Coefficient1 Constant + -0.2406, !- Coefficient2 x + 1.7851, !- Coefficient3 x**2 + -2.0248, !- Coefficient4 x**3 + 1.3456, !- Coefficient5 x**4 + 0.33, !- Minimum Value of x {BasedOnField A2} + 1, !- Maximum Value of x {BasedOnField A2} + , !- Minimum Curve Output {BasedOnField A3} + , !- Maximum Curve Output {BasedOnField A3} + Dimensionless; !- Input Unit Type for X + + Coil:Heating:Water, + Core_bottom PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Core_bottom PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Core_bottom PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Core_bottom PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Core_bottom PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Core_mid PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Core_mid PIUHEATING Primary Inlet Node Name, !- Primary Supply Air Inlet Node Name + Core_mid PIUHEATING Secondary Inlet Node, !- Secondary Induced Air Inlet Node Name + Core_mid PIUHEATING Outlet Node Name, !- Air Terminal Outlet Node Name + Core_mid PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Core_mid PIUHEATING Mixer, !- Zone Mixer Name + Core_mid PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Core_mid PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Core_mid PIUHEATING Mixer, !- Name + Core_mid PIUHEATING Fan Inlet Node, !- Outlet Node Name + Core_mid PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Core_mid PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Core_mid, !- Zone Name + Core_mid Equipment, !- Zone Conditioning Equipment List Name + Core_mid Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Core_mid_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Core_mid Air Node, !- Zone Air Node Name + Core_mid Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Core_mid Inlet Nodes, !- Name + Core_mid PIUHEATING Outlet Node Name, !- Node 1 Name + Core_mid_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Core_mid_ZoneCooling, !- Name + Load, !- Control Type + Core_mid, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Core_mid_ZoneOutlet Node, !- Air Inlet Node Name + Core_mid_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Core_mid_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Core_mid Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Core_mid Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Core_mid PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Core_mid PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Core_mid_FanOutlet Node, !- Air Inlet Node Name + Core_mid_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Core_mid_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_mid_ZoneOutlet Node, !- Air Inlet Node Name + Core_mid_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Core_mid PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_mid PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Core_mid PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Core_mid PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Core_mid PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Core_mid PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Core_mid PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Core_mid PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Core_top PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Core_top PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Core_top PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Core_top PIUHEATING Outlet Node Name, !- Outlet Node Name + Core_top PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Core_top PIUHEATING Mixer, !- Zone Mixer Name + Core_top PIUHEATING Fan, !- Fan Name + Coil:Heating:Electric, !- Reheat Coil Object Type + Core_top PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Core_top PIUHEATING Mixer, !- Name + Core_top PIUHEATING Fan Inlet Node, !- Outlet Node Name + Core_top PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Core_top PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Core_top, !- Zone Name + Core_top Equipment, !- Zone Conditioning Equipment List Name + Core_top Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Core_top_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Core_top Air Node, !- Zone Air Node Name + Core_top Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Core_top Inlet Nodes, !- Name + Core_top PIUHEATING Outlet Node Name, !- Node 1 Name + Core_top_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Core_top_ZoneCooling, !- Name + Load, !- Control Type + Core_top, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Core_top_ZoneOutlet Node, !- Air Inlet Node Name + Core_top_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Core_top_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Core_top Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Core_top Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Core_top PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Core_top PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Core_top_FanOutlet Node, !- Air Inlet Node Name + Core_top_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Core_top_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_top_ZoneOutlet Node, !- Air Inlet Node Name + Core_top_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Core_top PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Core_top PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Core_top PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Electric, + Core_top PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + 1.0, !- Efficiency + autosize, !- Nominal Capacity {W} + Core_top PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Core_top PIUHEATING Outlet Node Name; !- Air Outlet Node Name + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_bot_ZN_1 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_bot_ZN_1 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_bot_ZN_1 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_bot_ZN_1 PIUHEATING Mixer, !- Name + Perimeter_bot_ZN_1 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_1 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_1, !- Zone Name + Perimeter_bot_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_bot_ZN_1_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_bot_ZN_1 Inlet Nodes, !- Name + Perimeter_bot_ZN_1 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_bot_ZN_1_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_bot_ZN_1_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_bot_ZN_1, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_bot_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_bot_ZN_1_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_bot_ZN_1 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_bot_ZN_1 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_bot_ZN_1 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_1_FanOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_bot_ZN_1_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_1_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_bot_ZN_1 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_1 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_bot_ZN_1 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_bot_ZN_2 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_bot_ZN_2 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_bot_ZN_2 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_bot_ZN_2 PIUHEATING Mixer, !- Name + Perimeter_bot_ZN_2 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_2 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_2, !- Zone Name + Perimeter_bot_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_bot_ZN_2_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_bot_ZN_2 Inlet Nodes, !- Name + Perimeter_bot_ZN_2 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_bot_ZN_2_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_bot_ZN_2_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_bot_ZN_2, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_bot_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_bot_ZN_2_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_bot_ZN_2 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_bot_ZN_2 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_bot_ZN_2 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_2_FanOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_bot_ZN_2_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_2_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_bot_ZN_2 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_2 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_bot_ZN_2 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_bot_ZN_3 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_bot_ZN_3 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_bot_ZN_3 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_bot_ZN_3 PIUHEATING Mixer, !- Name + Perimeter_bot_ZN_3 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_3 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_3, !- Zone Name + Perimeter_bot_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_bot_ZN_3_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_bot_ZN_3 Inlet Nodes, !- Name + Perimeter_bot_ZN_3 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_bot_ZN_3_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_bot_ZN_3_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_bot_ZN_3, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_bot_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_bot_ZN_3_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_bot_ZN_3 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_bot_ZN_3 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_bot_ZN_3 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_3_FanOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_bot_ZN_3_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_3_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_bot_ZN_3 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_3 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_bot_ZN_3 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_bot_ZN_4 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_bot_ZN_4 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_bot_ZN_4 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_bot_ZN_4 PIUHEATING Mixer, !- Name + Perimeter_bot_ZN_4 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_4 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_4, !- Zone Name + Perimeter_bot_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_bot_ZN_4_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_bot_ZN_4 Inlet Nodes, !- Name + Perimeter_bot_ZN_4 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_bot_ZN_4_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_bot_ZN_4_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_bot_ZN_4, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_bot_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_bot_ZN_4_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_bot_ZN_4 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_bot_ZN_4 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_bot_ZN_4 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_4_FanOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_bot_ZN_4_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_4_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_bot_ZN_4 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_bot_ZN_4 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_bot_ZN_4 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_mid_ZN_1 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_mid_ZN_1 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_mid_ZN_1 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_mid_ZN_1 PIUHEATING Mixer, !- Name + Perimeter_mid_ZN_1 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_1 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_1, !- Zone Name + Perimeter_mid_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_mid_ZN_1_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_mid_ZN_1 Inlet Nodes, !- Name + Perimeter_mid_ZN_1 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_mid_ZN_1_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_mid_ZN_1_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_mid_ZN_1, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_mid_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_mid_ZN_1_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_mid_ZN_1 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_mid_ZN_1 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_mid_ZN_1 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_1_FanOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_mid_ZN_1_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_1_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_mid_ZN_1 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_1 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_mid_ZN_1 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_mid_ZN_2 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_mid_ZN_2 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_mid_ZN_2 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_mid_ZN_2 PIUHEATING Mixer, !- Name + Perimeter_mid_ZN_2 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_2 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_2, !- Zone Name + Perimeter_mid_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_mid_ZN_2_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_mid_ZN_2 Inlet Nodes, !- Name + Perimeter_mid_ZN_2 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_mid_ZN_2_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_mid_ZN_2_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_mid_ZN_2, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_mid_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_mid_ZN_2_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_mid_ZN_2 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_mid_ZN_2 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_mid_ZN_2 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_2_FanOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_mid_ZN_2_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_2_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_mid_ZN_2 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_2 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_mid_ZN_2 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_mid_ZN_3 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_mid_ZN_3 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_mid_ZN_3 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_mid_ZN_3 PIUHEATING Mixer, !- Name + Perimeter_mid_ZN_3 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_3 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_3, !- Zone Name + Perimeter_mid_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_mid_ZN_3_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_mid_ZN_3 Inlet Nodes, !- Name + Perimeter_mid_ZN_3 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_mid_ZN_3_ZoneInlet Node; !- Node 1 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_mid_ZN_3_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_mid_ZN_3, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_mid_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_mid_ZN_3_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_mid_ZN_3 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_mid_ZN_3 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_mid_ZN_3 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_3_FanOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_mid_ZN_3_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_3_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_mid_ZN_3 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_3 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_mid_ZN_3 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_mid_ZN_4 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_mid_ZN_4 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_mid_ZN_4 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_mid_ZN_4 PIUHEATING Mixer, !- Name + Perimeter_mid_ZN_4 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_4 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_4, !- Zone Name + Perimeter_mid_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_mid_ZN_4_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_mid_ZN_4 Inlet Nodes, !- Name + Perimeter_mid_ZN_4 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_mid_ZN_4_ZoneInlet Node; !- Node 1 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_mid_ZN_4_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_mid_ZN_4, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_mid_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_mid_ZN_4_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_mid_ZN_4 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_mid_ZN_4 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_mid_ZN_4 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_4_FanOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_mid_ZN_4_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_4_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_mid_ZN_4 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_mid_ZN_4 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_mid_ZN_4 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_top_ZN_1 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_top_ZN_1 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_top_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_top_ZN_1 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_top_ZN_1 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_top_ZN_1 PIUHEATING Mixer, !- Name + Perimeter_top_ZN_1 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_top_ZN_1 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_1 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_1, !- Zone Name + Perimeter_top_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_top_ZN_1_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_top_ZN_1 Inlet Nodes, !- Name + Perimeter_top_ZN_1 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_top_ZN_1_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_top_ZN_1_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_top_ZN_1, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_top_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_top_ZN_1_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_top_ZN_1 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + + Coil:Cooling:Water, + Perimeter_top_ZN_1 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_top_ZN_1 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_1_FanOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_1_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_top_ZN_1_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_1_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_1_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_top_ZN_1 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_1 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_top_ZN_1 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_top_ZN_1 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_1 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_top_ZN_2 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_top_ZN_2 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_top_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_top_ZN_2 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_top_ZN_2 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + AirLoopHVAC:ZoneMixer, + Perimeter_top_ZN_2 PIUHEATING Mixer, !- Name + Perimeter_top_ZN_2 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_top_ZN_2 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_2 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_2, !- Zone Name + Perimeter_top_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_top_ZN_2_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_top_ZN_2 Inlet Nodes, !- Name + Perimeter_top_ZN_2 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_top_ZN_2_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_top_ZN_2_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_top_ZN_2, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_top_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_top_ZN_2_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_top_ZN_2 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + + Coil:Cooling:Water, + Perimeter_top_ZN_2 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_top_ZN_2 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_2_FanOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_2_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_top_ZN_2_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_2_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_2_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + Fan:SystemModel, + Perimeter_top_ZN_2 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_2 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_top_ZN_2 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_top_ZN_2 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_2 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_top_ZN_3 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_top_ZN_3 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_top_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_top_ZN_3 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_top_ZN_3 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_3, !- Zone Name + Perimeter_top_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_top_ZN_3_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_top_ZN_3 Inlet Nodes, !- Name + Perimeter_top_ZN_3 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_top_ZN_3_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_top_ZN_3_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_top_ZN_3, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_top_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_top_ZN_3_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_top_ZN_3 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + + Coil:Cooling:Water, + Perimeter_top_ZN_3 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_top_ZN_3 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_3_FanOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_3_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_top_ZN_3_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_3_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_3_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + AirLoopHVAC:ZoneMixer, + Perimeter_top_ZN_3 PIUHEATING Mixer, !- Name + Perimeter_top_ZN_3 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_top_ZN_3 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_3 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + Fan:SystemModel, + Perimeter_top_ZN_3 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_3 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_top_ZN_3 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_top_ZN_3 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_3 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + AirTerminal:SingleDuct:SeriesPIU:Reheat, + Perimeter_top_ZN_4 PIUHEATING, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Maximum Total Air Flow Rate + AUTOSIZE, !- Design Primary Air Volume Flow Rate + AUTOSIZE, !- Minimum Primary Air Volume Flow Fraction + Perimeter_top_ZN_4 PIUHEATING Primary Inlet Node Name, !- Supply Air Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING Secondary Inlet Node, !- Secondary Air Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING Outlet Node Name, !- Outlet Node Name + Perimeter_top_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Reheat Coil Air Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING Mixer, !- Zone Mixer Name + Perimeter_top_ZN_4 PIUHEATING Fan, !- Fan Name + Coil:Heating:Water, !- Reheat Coil Object Type + Perimeter_top_ZN_4 PIUHEATING Reheat Coil, !- Reheat Coil Name + autosize; !- Maximum Hot Water or Steam Flow Rate {m3/s} + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_4, !- Zone Name + Perimeter_top_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + Perimeter_top_ZN_4_ZoneOutlet Node, !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Perimeter_top_ZN_4 Inlet Nodes, !- Name + Perimeter_top_ZN_4 PIUHEATING Outlet Node Name, !- Node 1 Name + Perimeter_top_ZN_4_ZoneInlet Node; !- Node 2 Name + + AirLoopHVAC:UnitarySystem, + Perimeter_top_ZN_4_ZoneCooling, !- Name + Load, !- Control Type + Perimeter_top_ZN_4, !- Controlling Zone or Thermostat Location + None, !- Dehumidification Control Type + ALWAYS_ON, !- Availability Schedule Name + Perimeter_top_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + Fan:SystemModel, !- Supply Fan Object Type + Perimeter_top_ZN_4_ZoneFan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + HVACOperationSchd, !- Supply Air Fan Operating Mode Schedule Name + , !- Heating Coil Object Type + , !- Heating Coil Name + , !- DX Heating Coil Sizing Ratio + Coil:Cooling:Water, !- Cooling Coil Object Type + Perimeter_top_ZN_4 Cooling Coil, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature + , !- Latent Load Control + , !- Supplemental Heating Coil Object Type + , !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + autosize; !- Cooling Supply Air Flow Rate + + Coil:Cooling:Water, + Perimeter_top_ZN_4 Cooling Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- Design Water Flow Rate {m3/s} + autosize, !- Design Air Flow Rate {m3/s} + autosize, !- Design Inlet Water Temperature {C} + autosize, !- Design Inlet Air Temperature {C} + autosize, !- Design Outlet Air Temperature {C} + autosize, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + autosize, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + Perimeter_top_ZN_4 PIUHEATING CW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING CW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_4_FanOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_4_ZoneInlet Node, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Fan:SystemModel, + Perimeter_top_ZN_4_ZoneFan 1, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_4_ZoneOutlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_4_FanOutlet Node, !- Air Outlet Node Name + AUTOSIZE, !- Design Maximum Air Flow Rate {m3/s} + Discrete, !- Speed Control Method + 0.0, !- Electric Power Minimum Flow Rate Fraction + 600.0, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Air Stream Fraction + AUTOSIZE, !- Design Electric Power Consumption {W} + TotalEfficiencyAndPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + , !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + 0.7; !- Fan Total Efficiency + + AirLoopHVAC:ZoneMixer, + Perimeter_top_ZN_4 PIUHEATING Mixer, !- Name + Perimeter_top_ZN_4 PIUHEATING Fan Inlet Node, !- Outlet Node Name + Perimeter_top_ZN_4 PIUHEATING Primary Inlet Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_4 PIUHEATING Secondary Inlet Node; !- Inlet 2 Node Name + + Fan:SystemModel, + Perimeter_top_ZN_4 PIUHEATING Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + Perimeter_top_ZN_4 PIUHEATING Fan Inlet Node, !- Air Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Outlet Node Name + autosize, !- Maximum Flow Rate {m3/s} + Continuous, + 0.39, !- Electric Power Minimum Flow Rate Fraction + 50, !- Design Pressure Rise {Pa} + 0.9, !- Motor Efficiency + 1, !- Motor In Air Stream Fraction + autosize, !- Design Electric Power Consumption {W} + PowerPerFlowPerPressure, !- Design Power Sizing Method + , !- Electric Power Per Unit Flow Rate {W/(m3/s)} + 1.87330816464, !- Electric Power Per Unit Flow Rate Per Unit Pressure {W/((m3/s)-Pa)} + , !- Fan Total Efficiency + fan curve 1; !- Electric Power Function of Flow Fraction Curve Name + + Coil:Heating:Water, + Perimeter_top_ZN_4 PIUHEATING Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + autosize, !- U-Factor Times Area Value {W/K} + autosize, !- Maximum Water Flow Rate {m3/s} + Perimeter_top_ZN_4 PIUHEATING HW Inlet Node, !- Water Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING HW Outlet Node, !- Water Outlet Node Name + Perimeter_top_ZN_4 PIUHEATING Reheat Coil Air In Node, !- Air Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + autosize, !- Rated Capacity {W} + 45.0, !- Rated Inlet Water Temperature {C} + 19.9, !- Rated Inlet Air Temperature {C} + 35.0, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + + ZoneHVAC:EquipmentList, + Basement Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Basement VAV Box, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1; !- Zone Equipment 1 Heating or No-Load Sequence + + ZoneHVAC:EquipmentConnections, + Basement, !- Zone Name + Basement Equipment, !- Zone Conditioning Equipment List Name + Basement Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Basement Air Node, !- Zone Air Node Name + Basement Return Air Node Name; !- Zone Return Air Node or NodeList Name + + NodeList, + Basement Inlet Nodes, !- Name + Basement VAV Box Outlet Node Name; !- Node 1 Name + + ZoneHVAC:EquipmentList, + Core_bottom Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_bottom PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Core_bottom_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Core_mid Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_mid PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Core_mid_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Core_top Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_top PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Core_top_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_1 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_bot_ZN_1_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_2 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_bot_ZN_2_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_3 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_bot_ZN_3_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_4 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_bot_ZN_4_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_1 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_mid_ZN_1_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_2 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_mid_ZN_2_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_3 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_mid_ZN_3_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_4 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_mid_ZN_4_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_1 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_top_ZN_1_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_2 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_top_ZN_2_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_3 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_top_ZN_3_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + + Schedule:Compact, + Primary Zone Equip Load Fraction Sched, !- Name + Fraction, !- ScheduleType + Through: 12/31, !- Complex Field \#1 + For: AllDays , !- Complex Field \#2 + Until: 24:00, !- Complex Field \#3 + 0.9; !- Complex Field \#4 + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_4 PIUHEATING ADU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + Primary Zone Equip Load Fraction Sched, !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + AirLoopHVAC:UnitarySystem, !- Zone Equipment 2 Object Type + Perimeter_top_ZN_4_ZoneCooling, !- Zone Equipment 2 Name + 2, !- Zone Equipment 2 Cooling Sequence + 2; !- Zone Equipment 2 Heating or No-Load Sequence + +! ***SIZING & CONTROLS*** + DesignSpecification:ZoneAirDistribution, + PIUHEATING Vent Distribution, !- Name + 1, !- Zone Air Distribution Effectiveness in Cooling Mode {dimensionless} + 0.8, !- Zone Air Distribution Effectiveness in Heating Mode {dimensionless} + , !- Zone Air Distribution Effectiveness Schedule Name + 0; !- Zone Secondary Recirculation Fraction {dimensionless} + + + Sizing:Zone, + Basement, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Basement, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + ; !- Heating Maximum Air Flow Fraction + + DesignSpecification:OutdoorAir, + SZ DSOA Basement, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Core_bottom, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_bottom, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Core_bottom, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Core_mid, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_mid, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Core_mid, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Core_top, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01056, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_top, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Core_top, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_1, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_2, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_3, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_4, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_1, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_2, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_3, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_4, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_top_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_1, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_top_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_2, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_top_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.6000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_3, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + Perimeter_top_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14.600, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 35.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.01055, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + PIUHEATING Vent Distribution, !- Design Specification Zone Air Distribution Object Name + YES, !- Account for Dedicated Outdoor Air System + ColdSupplyAir, !- Dedicated Outdoor Air System Control Strategy + 9.89, !- Dedicated Outdoor Air Low Setpoint Temperature for Design + 14.0; !- Dedicated Outdoor Air High Setpoint Temperature for Design + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_4, !- Name + Sum, !- Outdoor Air Method + 0.0060, !- Outdoor Air Flow per Person {m3/s-person} + 0.0010, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + ZoneControl:Thermostat, + Basement Thermostat, !- Name + Basement, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Basement DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Core_bottom Thermostat, !- Name + Core_bottom, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_bottom DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Core_bottom Humidistat, + Core_bottom, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Core_mid Thermostat, !- Name + Core_mid, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_mid DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Core_mid Humidistat, + Core_mid, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Core_top Thermostat, !- Name + Core_top, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_top DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Core_top Humidistat, + Core_top, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_bot_ZN_1 Thermostat, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_bot_ZN_1 Humidistat, + Perimeter_bot_ZN_1, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_bot_ZN_2 Thermostat, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_bot_ZN_2 Humidistat, + Perimeter_bot_ZN_2, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_bot_ZN_3 Thermostat, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_bot_ZN_3 Humidistat, + Perimeter_bot_ZN_3, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_bot_ZN_4 Thermostat, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_4 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_bot_ZN_4 Humidistat, + Perimeter_bot_ZN_4, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_mid_ZN_1 Thermostat, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_mid_ZN_1 Humidistat, + Perimeter_mid_ZN_1, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_mid_ZN_2 Thermostat, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_mid_ZN_2 Humidistat, + Perimeter_mid_ZN_2, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_mid_ZN_3 Thermostat, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_mid_ZN_3 Humidistat, + Perimeter_mid_ZN_3, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_mid_ZN_4 Thermostat, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_4 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_mid_ZN_4 Humidistat, + Perimeter_mid_ZN_4, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_top_ZN_1 Thermostat, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_top_ZN_1 Humidistat, + Perimeter_top_ZN_1, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_top_ZN_2 Thermostat, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_top_ZN_2 Humidistat, + Perimeter_top_ZN_2, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_top_ZN_3 Thermostat, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_top_ZN_3 Humidistat, + Perimeter_top_ZN_3, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ZoneControl:Thermostat, + Perimeter_top_ZN_4 Thermostat, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_4 DualSPSched; !- Control 1 Name + + ZoneControl:Humidistat, + Perimeter_top_ZN_4 Humidistat, + Perimeter_top_ZN_4, + Min Rel Hum Set Sched, + Max Rel Hum Set Sched; + + ThermostatSetpoint:DualSetpoint, + Basement DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_bottom DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_mid DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_top DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + Sizing:System, + VAV_1, !- AirLoop Name + VentilationRequirement, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Central Cooling Design Supply Air Temperature {C} + 9.3, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + YES, !- 100% Outdoor Air in Cooling + YES, !- 100% Outdoor Air in Heating + 0.0068, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + ZoneSum, !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + Sizing:System, + VAV_2, !- AirLoop Name + VentilationRequirement, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Central Cooling Design Supply Air Temperature {C} + 9.3, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + YES, !- 100% Outdoor Air in Cooling + YES, !- 100% Outdoor Air in Heating + 0.0068, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + ZoneSum, !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + Sizing:System, + VAV_3, !- AirLoop Name + VentilationRequirement, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 9.3, !- Central Cooling Design Supply Air Temperature {C} + 9.3, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + YES, !- 100% Outdoor Air in Cooling + YES, !- 100% Outdoor Air in Heating + 0.0068, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + ZoneSum, !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + + Sizing:System, + VAV_5, !- AirLoop Name + Sensible, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 8.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 8.9000, !- Central Cooling Design Supply Air Temperature {C} + 16.7000, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.006, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + Controller:OutdoorAir, + VAV_1_OA_Controller, !- Name + VAV_1_OARelief Node, !- Relief Air Outlet Node Name + VAV_1 Supply Equipment Inlet Node, !- Return Air Node Name + VAV_1_OA-VAV_1_CoolCNode,!- Mixed Air Node Name + VAV_1_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched, !- Minimum Outdoor Air Schedule Name + Always_On;!- Minimum Fraction of Outdoor Air Schedule Name + + Controller:OutdoorAir, + VAV_2_OA_Controller, !- Name + VAV_2_OARelief Node, !- Relief Air Outlet Node Name + VAV_2 Supply Equipment Inlet Node, !- Return Air Node Name + VAV_2_OA-VAV_2_CoolCNode,!- Mixed Air Node Name + VAV_2_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched, !- Minimum Outdoor Air Schedule Name + Always_On;!- Minimum Fraction of Outdoor Air Schedule Name + + Controller:OutdoorAir, + VAV_3_OA_Controller, !- Name + VAV_3_OARelief Node, !- Relief Air Outlet Node Name + VAV_3 Supply Equipment Inlet Node, !- Return Air Node Name + VAV_3_OA-VAV_3_CoolCNode,!- Mixed Air Node Name + VAV_3_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched, !- Minimum Outdoor Air Schedule Name + Always_On;!- Minimum Fraction of Outdoor Air Schedule Name + + Controller:OutdoorAir, ! Basement, regular VAV + VAV_5_OA_Controller, !- Name + VAV_5_OARelief Node, !- Relief Air Outlet Node Name + VAV_5 Supply Equipment Inlet Node, !- Return Air Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Mixed Air Node Name + VAV_5_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + NoEconomizer, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched; !- Minimum Outdoor Air Schedule Name + + SetpointManager:Scheduled, + VAV_1 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + VAV_1 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + VAV_2 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + VAV_2 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + VAV_3 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + VAV_3 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + VAV_5 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + VAV_5 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + +! ***AIR LOOPS*** + + AirLoopHVAC, + VAV_1, !- Name + VAV_1_Controllers, !- Controller List Name + VAV_1 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + VAV_1 Air Loop Branches, !- Branch List Name + , !- Connector List Name + VAV_1 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + VAV_1 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + VAV_1 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + VAV_1 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + VAV_2, !- Name + VAV_2_Controllers, !- Controller List Name + VAV_2 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + VAV_2 Air Loop Branches, !- Branch List Name + , !- Connector List Name + VAV_2 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + VAV_2 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + VAV_2 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + VAV_2 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + VAV_3, !- Name + VAV_3_Controllers, !- Controller List Name + VAV_3 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + VAV_3 Air Loop Branches, !- Branch List Name + , !- Connector List Name + VAV_3 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + VAV_3 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + VAV_3 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + VAV_3 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + VAV_5, !- Name + VAV_5_Controllers, !- Controller List Name + VAV_5 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + VAV_5 Air Loop Branches, !- Branch List Name + , !- Connector List Name + VAV_5 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + VAV_5 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + VAV_5 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + VAV_5 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + +! ***CONNECTIONS*** + + ZoneHVAC:AirDistributionUnit, + Basement VAV Box, !- Name + Basement VAV Box Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Basement VAV Box Component; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_bottom PIUHEATING ADU, !- Name + Core_bottom PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Core_bottom PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_mid PIUHEATING ADU, !- Name + Core_mid PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Core_mid PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_top PIUHEATING ADU, !- Name + Core_top PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Core_top PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_1 PIUHEATING ADU, !- Name + Perimeter_bot_ZN_1 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_bot_ZN_1 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_2 PIUHEATING ADU, !- Name + Perimeter_bot_ZN_2 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_bot_ZN_2 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_3 PIUHEATING ADU, !- Name + Perimeter_bot_ZN_3 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_bot_ZN_3 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_4 PIUHEATING ADU, !- Name + Perimeter_bot_ZN_4 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_bot_ZN_4 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_1 PIUHEATING ADU, !- Name + Perimeter_mid_ZN_1 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_mid_ZN_1 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_2 PIUHEATING ADU, !- Name + Perimeter_mid_ZN_2 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_mid_ZN_2 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_3 PIUHEATING ADU, !- Name + Perimeter_mid_ZN_3 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_mid_ZN_3 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_4 PIUHEATING ADU, !- Name + Perimeter_mid_ZN_4 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_mid_ZN_4 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_1 PIUHEATING ADU, !- Name + Perimeter_top_ZN_1 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_top_ZN_1 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_2 PIUHEATING ADU, !- Name + Perimeter_top_ZN_2 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_top_ZN_2 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_3 PIUHEATING ADU, !- Name + Perimeter_top_ZN_3 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_top_ZN_3 PIUHEATING; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_4 PIUHEATING ADU, !- Name + Perimeter_top_ZN_4 PIUHEATING Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:SeriesPIU:Reheat, !- Air Terminal Object Type + Perimeter_top_ZN_4 PIUHEATING; !- Air Terminal Name + + NodeList, + VAV_1_OANode List, !- Name + VAV_1_OAInlet Node; !- Node 1 Name + + NodeList, + VAV_2_OANode List, !- Name + VAV_2_OAInlet Node; !- Node 1 Name + + NodeList, + VAV_3_OANode List, !- Name + VAV_3_OAInlet Node; !- Node 1 Name + + NodeList, + VAV_5_OANode List, !- Name + VAV_5_OAInlet Node; !- Node 1 Name + + AvailabilityManagerAssignmentList, + VAV_1 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV_1 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + VAV_2 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV_2 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + VAV_3 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV_3 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + VAV_5 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV_5 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManager:NightCycle, + VAV_1 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + VAV_2 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + VAV_3 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + VAV_5 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + BranchList, + VAV_1 Air Loop Branches, !- Name + VAV_1 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + VAV_2 Air Loop Branches, !- Name + VAV_2 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + VAV_3 Air Loop Branches, !- Name + VAV_3 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + VAV_5 Air Loop Branches, !- Name + VAV_5 Air Loop Main Branch; !- Branch 1 Name + + Branch, + VAV_1 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV_1_OA, !- Component 1 Name + VAV_1 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + VAV_1_OA-VAV_1_CoolCNode,!- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + VAV_1_CoolC, !- Component 2 Name + VAV_1_OA-VAV_1_CoolCNode,!- Component 2 Inlet Node Name + VAV_1_CoolC-VAV_1_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV_1_HeatC, !- Component 3 Name + VAV_1_CoolC-VAV_1_HeatCNode, !- Component 3 Inlet Node Name + VAV_1_HeatC-VAV_1_FanNode, !- Component 3 Outlet Node Name + Fan:SystemModel, !- Component 4 Object Type + VAV_1_Fan, !- Component 4 Name + VAV_1_HeatC-VAV_1_FanNode, !- Component 4 Inlet Node Name + VAV_1 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + VAV_2 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV_2_OA, !- Component 1 Name + VAV_2 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + VAV_2_OA-VAV_2_CoolCNode,!- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + VAV_2_CoolC, !- Component 2 Name + VAV_2_OA-VAV_2_CoolCNode,!- Component 2 Inlet Node Name + VAV_2_CoolC-VAV_2_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV_2_HeatC, !- Component 3 Name + VAV_2_CoolC-VAV_2_HeatCNode, !- Component 3 Inlet Node Name + VAV_2_HeatC-VAV_2_FanNode, !- Component 3 Outlet Node Name + Fan:SystemModel, !- Component 4 Object Type + VAV_2_Fan, !- Component 4 Name + VAV_2_HeatC-VAV_2_FanNode, !- Component 4 Inlet Node Name + VAV_2 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + VAV_3 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV_3_OA, !- Component 1 Name + VAV_3 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + VAV_3_OA-VAV_3_CoolCNode,!- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + VAV_3_CoolC, !- Component 2 Name + VAV_3_OA-VAV_3_CoolCNode,!- Component 2 Inlet Node Name + VAV_3_CoolC-VAV_3_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV_3_HeatC, !- Component 3 Name + VAV_3_CoolC-VAV_3_HeatCNode, !- Component 3 Inlet Node Name + VAV_3_HeatC-VAV_3_FanNode, !- Component 3 Outlet Node Name + Fan:SystemModel, !- Component 4 Object Type + VAV_3_Fan, !- Component 4 Name + VAV_3_HeatC-VAV_3_FanNode, !- Component 4 Inlet Node Name + VAV_3 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + VAV_5 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV_5_OA, !- Component 1 Name + VAV_5 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + VAV_5_CoolC, !- Component 2 Name + VAV_5_OA-VAV_5_CoolCNode,!- Component 2 Inlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV_5_HeatC, !- Component 3 Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Component 3 Inlet Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Component 3 Outlet Node Name + Fan:SystemModel, !- Component 4 Object Type + VAV_5_Fan, !- Component 4 Name + VAV_5_HeatC-VAV_5_FanNode, !- Component 4 Inlet Node Name + VAV_5 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + AirLoopHVAC:ControllerList, + VAV_1_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV_1_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV_1_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + VAV_1_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV_1_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + VAV_2_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV_2_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV_2_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + VAV_2_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV_2_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + VAV_3_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV_3_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV_3_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + VAV_3_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV_3_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + VAV_5_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV_5_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV_5_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + VAV_5_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV_5_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV_1_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV_1_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV_2_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV_2_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV_3_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV_3_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV_5_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV_5_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem, + VAV_1_OA, !- Name + VAV_1_OA_Controllers, !- Controller List Name + VAV_1_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + VAV_2_OA, !- Name + VAV_2_OA_Controllers, !- Controller List Name + VAV_2_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + VAV_3_OA, !- Name + VAV_3_OA_Controllers, !- Controller List Name + VAV_3_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + VAV_5_OA, !- Name + VAV_5_OA_Controllers, !- Controller List Name + VAV_5_OA_Equipment; !- Outdoor Air Equipment List Name + + OutdoorAir:NodeList, + VAV_1_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + VAV_2_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + VAV_3_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + VAV_5_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:Mixer, + VAV_1_OAMixing Box, !- Name + VAV_1_OA-VAV_1_CoolCNode,!- Mixed Air Node Name + VAV_1_OAInlet Node, !- Outdoor Air Stream Node Name + VAV_1_OARelief Node, !- Relief Air Stream Node Name + VAV_1 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + VAV_2_OAMixing Box, !- Name + VAV_2_OA-VAV_2_CoolCNode,!- Mixed Air Node Name + VAV_2_OAInlet Node, !- Outdoor Air Stream Node Name + VAV_2_OARelief Node, !- Relief Air Stream Node Name + VAV_2 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + VAV_3_OAMixing Box, !- Name + VAV_3_OA-VAV_3_CoolCNode,!- Mixed Air Node Name + VAV_3_OAInlet Node, !- Outdoor Air Stream Node Name + VAV_3_OARelief Node, !- Relief Air Stream Node Name + VAV_3 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + VAV_5_OAMixing Box, !- Name + VAV_5_OA-VAV_5_CoolCNode,!- Mixed Air Node Name + VAV_5_OAInlet Node, !- Outdoor Air Stream Node Name + VAV_5_OARelief Node, !- Relief Air Stream Node Name + VAV_5 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + SetpointManager:MixedAir, + VAV_1_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_1_HeatC-VAV_1_FanNode, !- Fan Inlet Node Name + VAV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_1_CoolC-VAV_1_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_1_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_1_HeatC-VAV_1_FanNode, !- Fan Inlet Node Name + VAV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_1_HeatC-VAV_1_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_1_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_1_HeatC-VAV_1_FanNode, !- Fan Inlet Node Name + VAV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_1_OA-VAV_1_CoolCNode;!- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_2_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_2_HeatC-VAV_2_FanNode, !- Fan Inlet Node Name + VAV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_2_CoolC-VAV_2_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_2_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_2_HeatC-VAV_2_FanNode, !- Fan Inlet Node Name + VAV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_2_HeatC-VAV_2_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_2_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_2_HeatC-VAV_2_FanNode, !- Fan Inlet Node Name + VAV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_2_OA-VAV_2_CoolCNode;!- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_3_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_3_HeatC-VAV_3_FanNode, !- Fan Inlet Node Name + VAV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_3_CoolC-VAV_3_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_3_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_3_HeatC-VAV_3_FanNode, !- Fan Inlet Node Name + VAV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_3_HeatC-VAV_3_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_3_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_3_HeatC-VAV_3_FanNode, !- Fan Inlet Node Name + VAV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_3_OA-VAV_3_CoolCNode;!- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_HeatC-VAV_5_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_OA-VAV_5_CoolCNode;!- Setpoint Node or NodeList Name + + AirLoopHVAC:SupplyPath, + VAV_1, !- Name + VAV_1 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV_1 Supply Air Splitter; !- Component 1 Name + + AirLoopHVAC:SupplyPath, + VAV_2, !- Name + VAV_2 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV_2 Supply Air Splitter; !- Component 1 Name + + AirLoopHVAC:SupplyPath, + VAV_3, !- Name + VAV_3 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV_3 Supply Air Splitter; !- Component 1 Name + + AirLoopHVAC:SupplyPath, + VAV_5, !- Name + VAV_5 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV_5 Supply Air Splitter; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + VAV_1 Supply Air Splitter, !- Name + VAV_1 Zone Equipment Inlet Node, !- Inlet Node Name + Core_bottom PIUHEATING Primary Inlet Node Name, !- Outlet 1 Node Name + Perimeter_bot_ZN_3 PIUHEATING Primary Inlet Node Name, !- Outlet 2 Node Name + Perimeter_bot_ZN_2 PIUHEATING Primary Inlet Node Name, !- Outlet 3 Node Name + Perimeter_bot_ZN_1 PIUHEATING Primary Inlet Node Name, !- Outlet 4 Node Name + Perimeter_bot_ZN_4 PIUHEATING Primary Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + VAV_2 Supply Air Splitter, !- Name + VAV_2 Zone Equipment Inlet Node, !- Inlet Node Name + Core_mid PIUHEATING Primary Inlet Node Name, !- Outlet 1 Node Name + Perimeter_mid_ZN_3 PIUHEATING Primary Inlet Node Name, !- Outlet 2 Node Name + Perimeter_mid_ZN_2 PIUHEATING Primary Inlet Node Name, !- Outlet 3 Node Name + Perimeter_mid_ZN_1 PIUHEATING Primary Inlet Node Name, !- Outlet 4 Node Name + Perimeter_mid_ZN_4 PIUHEATING Primary Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + VAV_3 Supply Air Splitter, !- Name + VAV_3 Zone Equipment Inlet Node, !- Inlet Node Name + Core_top PIUHEATING Primary Inlet Node Name, !- Outlet 1 Node Name + Perimeter_top_ZN_3 PIUHEATING Primary Inlet Node Name, !- Outlet 2 Node Name + Perimeter_top_ZN_2 PIUHEATING Primary Inlet Node Name, !- Outlet 3 Node Name + Perimeter_top_ZN_1 PIUHEATING Primary Inlet Node Name, !- Outlet 4 Node Name + Perimeter_top_ZN_4 PIUHEATING Primary Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + VAV_5 Supply Air Splitter, !- Name + VAV_5 Zone Equipment Inlet Node, !- Inlet Node Name + Basement VAV Box Inlet Node Name; !- Outlet 1 Node Name + + AirLoopHVAC:ReturnPath, + VAV_1 Return Air Path, !- Name + VAV_1 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + VAV_1 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + VAV_1 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + VAV_2 Return Air Path, !- Name + VAV_2 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + VAV_2 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + VAV_2 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + VAV_3 Return Air Path, !- Name + VAV_3 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + VAV_3 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + VAV_3 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + VAV_5 Return Air Path, !- Name + VAV_5 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ZoneMixer, !- Component 1 Object Type + VAV_5 Return Air Mixer; !- Component 1 Name + + AirLoopHVAC:ReturnPlenum, + VAV_2 Return Plenum, !- Name + MidFloor_Plenum, !- Zone Name + MIDFLOOR_PLENUMPlenumNode, !- Zone Node Name + MIDFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + MIDFLOOR_PLENUM Induced Air Nodes, !- Induced Air Outlet Node or NodeList Name + Core_mid Return Air Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_mid_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_mid_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_mid_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + NodeList, + MIDFLOOR_PLENUM Induced Air Nodes, + Core_mid PIUHEATING Secondary Inlet Node, + Perimeter_mid_ZN_3 PIUHEATING Secondary Inlet Node, + Perimeter_mid_ZN_2 PIUHEATING Secondary Inlet Node, + Perimeter_mid_ZN_1 PIUHEATING Secondary Inlet Node, + Perimeter_mid_ZN_4 PIUHEATING Secondary Inlet Node; + + AirLoopHVAC:ReturnPlenum, + VAV_1 Return Plenum, !- Name + GroundFloor_Plenum, !- Zone Name + GROUNDFLOOR_PLENUMPlenumNode, !- Zone Node Name + GROUNDFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + GROUNDFLOOR_PLENUM Induced Air Nodes, !- Induced Air Outlet Node or NodeList Name + Core_bottom Return Air Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_bot_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_bot_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_bot_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + NodeList, + GROUNDFLOOR_PLENUM Induced Air Nodes, + Core_bottom PIUHEATING Secondary Inlet Node, + Perimeter_bot_ZN_3 PIUHEATING Secondary Inlet Node, + Perimeter_bot_ZN_2 PIUHEATING Secondary Inlet Node, + Perimeter_bot_ZN_1 PIUHEATING Secondary Inlet Node, + Perimeter_bot_ZN_4 PIUHEATING Secondary Inlet Node; + + AirLoopHVAC:ReturnPlenum, + VAV_3 Return Plenum, !- Name + TopFloor_Plenum, !- Zone Name + TOPFLOOR_PLENUMPlenumNode, !- Zone Node Name + TOPFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + TOPFLOOR_PLENUM Induced Air Nodes, !- Induced Air Outlet Node or NodeList Name + Core_top Return Air Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_top_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_top_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_top_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + NodeList, + TOPFLOOR_PLENUM Induced Air Nodes, + Core_top PIUHEATING Secondary Inlet Node, + Perimeter_top_ZN_3 PIUHEATING Secondary Inlet Node, + Perimeter_top_ZN_2 PIUHEATING Secondary Inlet Node, + Perimeter_top_ZN_1 PIUHEATING Secondary Inlet Node, + Perimeter_top_ZN_4 PIUHEATING Secondary Inlet Node; + + AirLoopHVAC:ZoneMixer, + VAV_1 Return Air Mixer, !- Name + VAV_1 Zone Equipment Outlet Node, !- Outlet Node Name + GROUNDFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + VAV_2 Return Air Mixer, !- Name + VAV_2 Zone Equipment Outlet Node, !- Outlet Node Name + MIDFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + VAV_3 Return Air Mixer, !- Name + VAV_3 Zone Equipment Outlet Node, !- Outlet Node Name + TOPFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + VAV_5 Return Air Mixer, !- Name + VAV_5 Zone Equipment Outlet Node, !- Outlet Node Name + Basement Return Air Node Name; !- Inlet 1 Node Name + +! ***SCHEDULES*** + + Schedule:Compact, + CLGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,26.7, !- Field 3 + Until: 22:00,24.0, !- Field 5 + Until: 24:00,26.7, !- Field 7 + For: Saturday, !- Field 9 + Until: 06:00,26.7, !- Field 10 + Until: 18:00,24.0, !- Field 12 + Until: 24:00,26.7, !- Field 14 + For WinterDesignDay, !- Field 16 + Until: 24:00,26.7, !- Field 17 + For: AllOtherDays, !- Field 19 + Until: 24:00,26.7; !- Field 20 + + Schedule:Compact, + HTGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 06:00,18.3, !- Field 3 + Until: 22:00,21.7, !- Field 5 + Until: 24:00,18.3, !- Field 7 + For SummerDesignDay, !- Field 9 + Until: 24:00,18.3, !- Field 10 + For: Saturday, !- Field 12 + Until: 06:00,15.6, !- Field 13 + Until: 18:00,21.7, !- Field 15 + Until: 24:00,15.6, !- Field 17 + For: WinterDesignDay, !- Field 19 + Until: 24:00,21.7, !- Field 20 + For: AllOtherDays, !- Field 22 + Until: 24:00,15.6; !- Field 23 + + Schedule:Compact , + Min Rel Hum Set Sched, !- Name + Humidity , !- ScheduleType + Through: 12/31, !- Complex Field \#1 + For: AllDays , !- Complex Field \#2 + Until: 24:00, !- Complex Field \#3 + 30.0; !- Complex Field \#4 + + Schedule:Compact , + Max Rel Hum Set Sched , !- Name + Humidity , !- ScheduleType + Through: 12/31, !- Complex Field \#1 + For: AllDays , !- Complex Field \#2 + Until: 24:00, !- Complex Field \#3 + 50.0; !- Complex Field \#4 + + Schedule:Compact, + Seasonal-Reset-Supply-Air-Temp-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,9.3; !- Field 3 + + Schedule:Compact, + MinOA_MotorizedDamper_Sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 07:00,0.0, !- Field 10 + Until: 18:00,1.0, !- Field 12 + Until: 24:00,0.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0; !- Field 17 + + Schedule:Compact, + Dual Zone Control Type Sched, !- Name + Control Type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + Schedule:Compact, + HVACOperationSchd, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 06:00,0.0, !- Field 10 + Until: 18:00,1.0, !- Field 12 + Until: 24:00,0.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0; !- Field 17 + +! ***EQUIPMENT*** + + + + Pump:VariableSpeed, + CoolSys1 Pump, !- Name + CoolSys1 Pump Inlet, !- Inlet Node Name + CoolSys1 Pump-CoolSys1 ChillerNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + autosize, !- Design Minimum Flow Rate {m3/s} + Intermittent, !- Pump Control Type + , !- Pump Flow Rate Schedule Name + , !- Pump Curve Name + , !- Impeller Diameter {m} + , !- VFD Control Type + , !- Pump rpm Schedule Name + , !- Minimum Pressure Schedule + , !- Maximum Pressure Schedule + , !- Minimum RPM Schedule + , !- Maximum RPM Schedule + , !- Zone Name + , !- Skin Loss Radiative Fraction + PowerPerFlow, !- Design Power Sizing Method + 348701.1, !- Design Electric Power per Unit Flow Rate {W/(m3/s)} + 1.282051282, !- Design Shaft Power per Unit Flow Rate per Unit Head {W/((m3/s)-Pa)} + 0.0; !- Design Minimum Flow Rate Fraction + + Pump:VariableSpeed, + HeatSys1 Pump, !- Name + HeatSys1 Supply Side Inlet, !- Inlet Node Name + HeatSys1 Pump-HeatSys1 BoilerNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.875, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0.0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + + +! ***SIZING & CONTROLS*** + + Sizing:Plant, + CoolSys1, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 6.67, !- Design Loop Exit Temperature {C} + 6.67, !- Loop Design Temperature Difference {deltaC} + nonCoincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + Sizing:Plant, + HeatSys1, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 48.0, !- Design Loop Exit Temperature {C} + 6.0, !- Loop Design Temperature Difference {deltaC} + nonCoincident, !- Sizing Option + 2, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + Sizing:Plant, + Secondary Hot Water Loop, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 48.0, !- Design Loop Exit Temperature {C} + 6.0, !- Loop Design Temperature Difference {deltaC} + nonCoincident, !- Sizing Option + 2, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + Controller:WaterCoil, + VAV_1_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + VAV_1_CoolC-VAV_1_HeatCNode, !- Sensor Node Name + VAV_1_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_1_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + VAV_1_HeatC-VAV_1_FanNode, !- Sensor Node Name + VAV_1_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_2_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + VAV_2_CoolC-VAV_2_HeatCNode, !- Sensor Node Name + VAV_2_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_2_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + VAV_2_HeatC-VAV_2_FanNode, !- Sensor Node Name + VAV_2_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_3_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + VAV_3_CoolC-VAV_3_HeatCNode, !- Sensor Node Name + VAV_3_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_3_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + VAV_3_HeatC-VAV_3_FanNode, !- Sensor Node Name + VAV_3_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_5_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + VAV_5_CoolC-VAV_5_HeatCNode, !- Sensor Node Name + VAV_5_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_5_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + VAV_5_HeatC-VAV_5_FanNode, !- Sensor Node Name + VAV_5_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + + SetpointManager:Scheduled, + CoolSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + CW-Loop-Temp-Schedule, !- Schedule Name + CoolSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + + + SetpointManager:Scheduled, + HeatSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + HW-Loop-Temp-Schedule, !- Schedule Name + HeatSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + +! ***LOOPS*** + + PlantLoop, + CoolSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + CoolSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + CoolSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98.0, !- Maximum Loop Temperature {C} + 1.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + CHW TANK INLET NODE, !- Plant Side Inlet Node Name + CoolSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + CoolSys1 Supply Branches,!- Plant Side Branch List Name + CoolSys1 Supply Connectors, !- Plant Side Connector List Name + CoolSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + CoolSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + CoolSys1 Demand Branches,!- Demand Side Branch List Name + CoolSys1 Demand Connectors, !- Demand Side Connector List Name + UniformLoad; !- Load Distribution Scheme + + PlantEquipmentOperationSchemes, + CoolSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + PlantLoop, + Secondary Hot Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Secondary Hot Loop Operation, !- Plant Equipment Operation Scheme Name + Secondary Hot Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Heating Side WSHP Load Side Inlet, !- Plant Side Inlet Node Name + Secondary Hot Supply Outlet Node, !- Plant Side Outlet Node Name + Secondary Heating Supply Side Branches, !- Plant Side Branch List Name + Secondary Heating Supply Side Connectors, !- Plant Side Connector List Name + Secondary HW Demand Inlet Node, !- Demand Side Inlet Node Name + Cooling Side WSHP Source Side Outlet, !- Demand Side Outlet Node Name + Secondary Heating Demand Side Branches, !- Demand Side Branch List Name + Secondary Heating Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + PlantEquipmentOperationSchemes, + Secondary Hot Loop Operation, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + PlantEquipmentList, + Primary to Secondary HW HX equip, !- Name + HeatExchanger:FluidToFluid, !- Equipment 1 Object Type + Primary to Secondary HW HX; !- Equipment 1 Name + + BranchList, + Secondary Heating Demand Side Branches, !- Name + Secondary Heating Demand Inlet Branch, !- Branch 1 Name + Secondary Heating Demand Load Branch 1, !- Branch 2 Name + Secondary Heating Demand Load Branch 2, !- Branch 3 Name + Secondary Heating Demand Load Branch 3, !- Branch 4 Name + ! Secondary Heating Demand Load Branch 4, !- Branch 5 Name + Secondary Heating Demand Load Branch 5, !- Branch 6 Name + Secondary Heating Demand Load Branch 6, !- Branch 7 Name + Secondary Heating Demand Load Branch 7, !- Branch 8 Name + Secondary Heating Demand Load Branch 8, !- Branch 9 Name + Secondary Heating Demand Load Branch 9, !- Branch 10 Name + Secondary Heating Demand Load Branch 10, !- Branch 11 Name + Secondary Heating Demand Load Branch 11, !- Branch 12 Name + Secondary Heating Demand Load Branch 12, !- Branch 13 Name + Secondary Heating Demand Load Branch 13, !- Branch 14 Name + Secondary Heating Demand Load Branch 14, !- Branch 15 Name + Secondary Heating Demand Load Branch 15, !- Branch 16 Name + Secondary Heating Demand Load Branch 16, !- Branch 17 Name + Secondary Heating Demand Load Branch 17, !- Branch 18 Name + Secondary Heating Demand Load Branch 18, !- Branch 19 Name + Secondary Heating Demand Load Branch 19, !- Branch 20 Name + Secondary Heating Demand Load Branch 20, !- Branch 21 Name + Secondary Heating Demand Bypass Branch, !- Branch 22 Name + Secondary Heating Demand Outlet Branch; !- Branch 23 Name + + ConnectorList, + Secondary Heating Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary HW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary HW Demand Mixer; !- Connector 2 Name + + Connector:Splitter, + Secondary HW Demand Splitter, !- Name + Secondary Heating Demand Inlet Branch, !- Inlet Branch Name + Secondary Heating Demand Load Branch 1, !- Branch 2 Name + Secondary Heating Demand Load Branch 2, !- Branch 3 Name + Secondary Heating Demand Load Branch 3, !- Branch 4 Name + ! Secondary Heating Demand Load Branch 4, !- Branch 5 Name + Secondary Heating Demand Load Branch 5, !- Branch 6 Name + Secondary Heating Demand Load Branch 6, !- Branch 7 Name + Secondary Heating Demand Load Branch 7, !- Branch 8 Name + Secondary Heating Demand Load Branch 8, !- Branch 9 Name + Secondary Heating Demand Load Branch 9, !- Branch 10 Name + Secondary Heating Demand Load Branch 10, !- Branch 11 Name + Secondary Heating Demand Load Branch 11, !- Branch 12 Name + Secondary Heating Demand Load Branch 12, !- Branch 13 Name + Secondary Heating Demand Load Branch 13, !- Branch 14 Name + Secondary Heating Demand Load Branch 14, !- Branch 15 Name + Secondary Heating Demand Load Branch 15, !- Branch 16 Name + Secondary Heating Demand Load Branch 16, !- Branch 17 Name + Secondary Heating Demand Load Branch 17, !- Branch 18 Name + Secondary Heating Demand Load Branch 18, !- Branch 19 Name + Secondary Heating Demand Load Branch 19, !- Branch 20 Name + Secondary Heating Demand Load Branch 20, !- Branch 21 Name + Secondary Heating Demand Bypass Branch; !- Branch 22 Name + + + Connector:Mixer, + Secondary HW Demand Mixer, !- Name + Secondary Heating Demand Outlet Branch, !- Outlet Branch Name + Secondary Heating Demand Load Branch 1, !- Branch 2 Name + Secondary Heating Demand Load Branch 2, !- Branch 3 Name + Secondary Heating Demand Load Branch 3, !- Branch 4 Name + ! Secondary Heating Demand Load Branch 4, !- Branch 5 Name + Secondary Heating Demand Load Branch 5, !- Branch 6 Name + Secondary Heating Demand Load Branch 6, !- Branch 7 Name + Secondary Heating Demand Load Branch 7, !- Branch 8 Name + Secondary Heating Demand Load Branch 8, !- Branch 9 Name + Secondary Heating Demand Load Branch 9, !- Branch 10 Name + Secondary Heating Demand Load Branch 10, !- Branch 11 Name + Secondary Heating Demand Load Branch 11, !- Branch 12 Name + Secondary Heating Demand Load Branch 12, !- Branch 13 Name + Secondary Heating Demand Load Branch 13, !- Branch 14 Name + Secondary Heating Demand Load Branch 14, !- Branch 15 Name + Secondary Heating Demand Load Branch 15, !- Branch 16 Name + Secondary Heating Demand Load Branch 16, !- Branch 17 Name + Secondary Heating Demand Load Branch 17, !- Branch 18 Name + Secondary Heating Demand Load Branch 18, !- Branch 19 Name + Secondary Heating Demand Load Branch 19, !- Branch 20 Name + Secondary Heating Demand Load Branch 20, !- Branch 21 Name + Secondary Heating Demand Bypass Branch; !- Branch 22 Name + + Branch, + Secondary Heating Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Heating Demand Side Inlet Pipe, !- Component 1 Name + Secondary HW Demand Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Heating Demand Side Inlet Pipe, !- Name + Secondary HW Demand Inlet Node, !- Inlet Node Name + Secondary HW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Secondary Heating Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Heating Demand Side Bypass Pipe, !- Component 1 Name + Secondary HW Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Heating Demand Side Bypass Pipe, !- Name + Secondary HW Demand Bypass Inlet Node, !- Inlet Node Name + Secondary HW Demand Bypass Outlet Node; !- Outlet Node Name + + Branch, + Secondary Heating Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + Dedicated HR Cooling Side WSHP, + Cooling Side WSHP Source Side Inlet, + Cooling Side WSHP Source Side Outlet; + + BranchList, + Secondary Heating Supply Side Branches, !- Name + Secondary HW Pump Branch,!- Branch 1 Name + Secondary HW HX Supply Branch, !- Branch 2 Name + Secondary Heating Supply Bypass Branch, !- Branch 3 Name + Secondary Heating Supply Outlet; !- Branch 4 Name + + Branch, + Secondary Heating Supply Outlet, !- Name + , !- Pressure Drop Curve Name + Boiler:HotWater, !- Component 1 Object Type + Secondary HW Aux Boiler, !- Component 1 Name + Secondary HW Aux Boiler Inlet Node, !- Component 1 Inlet Node Name + Secondary Hot Supply Outlet Node; !- Component 1 Outlet Node Name + + Boiler:HotWater, + Secondary HW Aux Boiler, !- Name + NATURALGAS, !- Fuel Type + AUTOSIZE, !- Nominal Capacity {W} + 0.78, !- Nominal Thermal Efficiency + LeavingBoiler, !- Efficiency Curve Temperature Evaluation Variable + , !- Normalized Boiler Efficiency Curve Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + 0.0, !- Minimum Part Load Ratio + 1.2, !- Maximum Part Load Ratio + 1.0, !- Optimum Part Load Ratio + Secondary HW Aux Boiler Inlet Node, !- Boiler Water Inlet Node Name + Secondary Hot Supply Outlet Node, !- Boiler Water Outlet Node Name + 95.0, !- Water Outlet Upper Temperature Limit {C} + LeavingSetpointModulated,!- Boiler Flow Mode + 0.0000, !- Parasitic Electric Load {W} + 1.0000; !- Sizing Factor + + Branch, + Secondary Heating Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary HW Supply Side Bypass, !- Component 1 Name + Secondary HW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary HW Supply Side Bypass, !- Name + Secondary HW Supply Bypass Inlet Node, !- Inlet Node Name + Secondary HW Supply Bypass Outlet Node; !- Outlet Node Name + + Branch, + Secondary HW HX supply Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary HW HX, !- Component 1 Name + Secondary HW HX Inlet Node, !- Component 1 Inlet Node Name + Secondary HW HX Outlet Node; !- Component 1 Outlet Node Name + + HeatExchanger:FluidToFluid, + Primary to Secondary HW HX, !- Name + always_on, !- Availability Schedule Name + Primary HW HX Inlet Node,!- Loop Demand Side Inlet Node Name + Primary HW HX Outet Node,!- Loop Demand Side Outlet Node Name + autosize, !- Loop Demand Side Design Flow Rate {m3/s} + Secondary HW HX Inlet Node, !- Loop Supply Side Inlet Node Name + Secondary HW HX Outlet Node, !- Loop Supply Side Outlet Node Name + Autosize, !- Loop Supply Side Design Flow Rate {m3/s} + CrossFlowBothMixed, !- Heat Exchange Model Type + Autosize, !- Heat Exchanger U-Factor Times Area Value {W/K} + HeatingSetpointModulated,!- Control Type + Secondary HW HX Outlet Node, !- Heat Exchanger Setpoint Node Name + 0.2, !- Minimum Temperature Difference to Activate Heat Exchanger {deltaC} + LoopToLoop; !- Heat Transfer Metering End Use Type + + NodeList, + Secondary Hot Water Loop Setpoint Node List, !- Name + Secondary Hot Supply Outlet Node, + Secondary HW HX Outlet Node; !- Node 1 Name + + SetpointManager:Scheduled, + Secondary Hot Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + Secondary HW Loop Temp Schedule, !- Schedule Name + Secondary Hot Water Loop Setpoint Node List; !- Setpoint Node or NodeList Name + + Schedule:Compact, + Secondary HW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Alldays, !- Field 2 + Until: 24:00,45.0; !- Field 3 + + Branch, + Secondary HW Pump Branch,!- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Heating, + Dedicated HR Heating Side WSHP, !- Name + Heating Side WSHP Load Side Inlet, !- Load Side Inlet Node Name + Heating Side WSHP Load Side Outlet, !- Load Side Outlet Node Name + Pump:VariableSpeed, !- Component 1 Object Type + Secondary HW Circ Pump, !- Component 1 Name + Heating Side WSHP Load Side Outlet, !- Component 1 Inlet Node Name + Secondary HW Pump Outlet Node; !- Component 1 Outlet Node Name + + Pump:VariableSpeed, + Secondary HW Circ Pump, !- Name + Heating Side WSHP Load Side Outlet, !- Inlet Node Name + Secondary HW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + + ConnectorList, + Secondary Heating Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary HW Loop Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary HW Loop Mixer; !- Connector 2 Name + + Connector:Splitter, + Secondary HW Loop Splitter, !- Name + Secondary HW Pump Branch,!- Inlet Branch Name + Secondary HW HX supply Branch, !- Outlet Branch 1 Name + Secondary Heating Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Secondary HW Loop Mixer, !- Name + Secondary Heating Supply Outlet, !- Outlet Branch Name + Secondary HW HX supply Branch, !- Inlet Branch 1 Name + Secondary Heating Supply Bypass Branch; !- Inlet Branch 2 Name + + PlantLoop, + HeatSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + HeatSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + HeatSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 80.0, !- Maximum Loop Temperature {C} + 10.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + HeatSys1 Supply Side Inlet, !- Plant Side Inlet Node Name + HeatSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + HeatSys1 Supply Branches,!- Plant Side Branch List Name + HeatSys1 Supply Connectors, !- Plant Side Connector List Name + HeatSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + HeatSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + HeatSys1 Demand Branches,!- Demand Side Branch List Name + HeatSys1 Demand Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + + PlantEquipmentOperationSchemes, + HeatSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + +! ***CONNECTIONS*** + + BranchList, + CoolSys1 Demand Branches,!- Name + CoolSys1 Demand Inlet Branch, !- Branch 1 Name + CoolSys1 Demand Load Branch 1, !- Branch 2 Name + CoolSys1 Demand Load Branch 2, !- Branch 3 Name + CoolSys1 Demand Load Branch 3, !- Branch 4 Name + CoolSys1 Demand Load Branch 4, !- Branch 5 Name + Primary to Secondary CW HX Branch, !- Branch 6 Name + CoolSys1 Demand Bypass Branch, !- Branch 7 Name + CoolSys1 Demand Outlet Branch; !- Branch 8 Name + + BranchList, + CoolSys1 Supply Branches,!- Name + CoolSys1 Supply Inlet Branch, !- Branch 1 Name + CoolSys1 Supply Equipment Branch 1, !- Branch 2 Name + CoolSys1 Supply Equipment Branch 2, !- Branch 2 Name + ! CoolSys1 Supply Equipment Bypass Branch, !- Branch 4 Name + CoolSys1 Supply Outlet Branch; !- Branch 5 Name + + BranchList, + HeatSys1 Demand Branches,!- Name + HeatSys1 Demand Inlet Branch, !- Branch 1 Name + HeatSys1 Primary to Secondary HX Branch, + HeatSys1 Demand Bypass Branch, !- Branch 22 Name + HeatSys1 Demand Outlet Branch; !- Branch 23 Name + + BranchList, + HeatSys1 Supply Branches,!- Name + HeatSys1 Supply Inlet Branch, !- Branch 1 Name + HeatSys1 Supply Equipment Branch 1, !- Branch 2 Name + HeatSys1 Supply Equipment Branch 2, !- Outlet Branch 1 Name +! HeatSys1 Supply Equipment Bypass Branch, !- Branch 4 Name + HeatSys1 Supply Outlet Branch; !- Branch 4 Name + + Branch, + HeatSys1 Primary to Secondary HX Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary HW HX, !- Component 1 Name + Primary HW HX Inlet Node,!- Component 1 Inlet Node Name + Primary HW HX Outet Node;!- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Demand Bypass Pipe, !- Component 1 Name + CoolSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + CoolSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Demand Inlet Pipe, !- Component 1 Name + CoolSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + CoolSys1 Demand Inlet Pipe-CoolSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + VAV_5_CoolC, !- Component 1 Name + VAV_5_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_5_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + VAV_1_CoolC, !- Component 1 Name + VAV_1_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_1_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + VAV_2_CoolC, !- Component 1 Name + VAV_2_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_2_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + VAV_3_CoolC, !- Component 1 Name + VAV_3_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_3_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Supply Equipment Branch 1, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + AWHP_1 Cooling Side, + AWHP_1 Cooling Side Inlet Node, + AWHP_1 Cooling Side Outlet Node; + + Branch, + CoolSys1 Supply Equipment Branch 2, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + AWHP_2 Cooling Side, + AWHP_2 Cooling Side Inlet Node, + AWHP_2 Cooling Side Outlet Node; + +! Branch, +! CoolSys1 Supply Equipment Bypass Branch, !- Name +! , !- Pressure Drop Curve Name +! Pipe:Adiabatic, !- Component 1 Object Type +! CoolSys1 Supply Equipment Bypass Pipe, !- Component 1 Name +! CoolSys1 Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name +! CoolSys1 Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + ThermalStorage:ChilledWater:Mixed, !- Component 2 Object Type + Chilled Water Storage Tank 1, !- Component 2 Name + CHW TANK INLET NODE, !- Component 2 Inlet Node Name + CoolSys1 Pump Inlet, !- Component 2 Outlet Node Name + Pump:VariableSpeed, !- Component 3 Object Type + CoolSys1 Pump, !- Component 3 Name + CoolSys1 Pump Inlet, !- Component 3 Inlet Node Name + CoolSys1 Pump-CoolSys1 ChillerNodeviaConnector; !- Component 3 Outlet Node Name + + Branch, + CoolSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Supply Outlet Pipe, !- Component 1 Name + CoolSys1 Supply Mixer-CoolSys1 Supply Outlet Pipe, !- Component 1 Inlet Node Name + CoolSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Primary to Secondary CW HX Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary CW HX, !- Component 1 Name + Primary CW HX Inlet Node,!- Component 1 Inlet Node Name + Primary CW HX Outet Node;!- Component 1 Outlet Node Name + + HeatExchanger:FluidToFluid, + Primary to Secondary CW HX, !- Name + always_on, !- Availability Schedule Name + Primary CW HX Inlet Node,!- Loop Demand Side Inlet Node Name + Primary CW HX Outet Node,!- Loop Demand Side Outlet Node Name + autosize, !- Loop Demand Side Design Flow Rate {m3/s} + Secondary CW HX Inlet Node, !- Loop Supply Side Inlet Node Name + Secondary CW HX Outlet Node, !- Loop Supply Side Outlet Node Name + Autosize, !- Loop Supply Side Design Flow Rate {m3/s} + CrossFlowBothMixed, !- Heat Exchange Model Type + Autosize, !- Heat Exchanger U-Factor Times Area Value {W/K} + CoolingSetpointModulated,!- Control Type + Secondary CW Supply Outlet Node, !- Heat Exchanger Setpoint Node Name + 0.2, !- Minimum Temperature Difference to Activate Heat Exchanger {deltaC} + LoopToLoop; !- Heat Transfer Metering End Use Type + + Sizing:Plant, + Secondary Chilled Water Loop, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 13.2, !- Design Loop Exit Temperature {C} + 2.0, !- Loop Design Temperature Difference {deltaC} + Coincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + PlantLoop, + Secondary Chilled Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Secondary CW Loop Operation, !- Plant Equipment Operation Scheme Name + Secondary CW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Cooling Side WSHP Load Side Inlet, !- Plant Side Inlet Node Name + Secondary CW Supply Outlet Node, !- Plant Side Outlet Node Name + Secondary Cooling Supply Side Branches, !- Plant Side Branch List Name + Secondary Cooling Supply Side Connectors, !- Plant Side Connector List Name + Secondary CW Demand Inlet Node, !- Demand Side Inlet Node Name + Heating Side WSHP Source Side Oulet, !- Demand Side Outlet Node Name + Secondary Cooling Demand Side Branches, !- Demand Side Branch List Name + Secondary Cooling Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + SetpointManager:Scheduled, + Secondary Chilled Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + Secondary CW Loop Temp Schedule, !- Schedule Name + Secondary Chilled Water Loop Setpoint Node List; !- Setpoint Node or NodeList Name + + Schedule:Compact, + Secondary CW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Alldays, !- Field 2 + Until: 24:00,13.7; !- Field 3 + + NodeList, + Secondary Chilled Water Loop Setpoint Node List, !- Name + Secondary CW Supply Outlet Node; !- Node 1 Name + + BranchList, + Secondary Cooling Supply Side Branches, !- Name + Secondary CW Pump Branch,!- Branch 1 Name + Secondary CW HX supply Branch, !- Branch 2 Name + Secondary Cooling Supply Bypass Branch, !- Branch 3 Name + Secondary Cooling Supply Outlet; !- Branch 4 Name + + BranchList, + Secondary Cooling Demand Side Branches, !- Name + Secondary Cooling Demand Inlet, !- Branch 1 Name + Secondary CW Demand Load Branch 1, !- Branch 1 Name + Secondary CW Demand Load Branch 2, !- Branch 2 Name + Secondary CW Demand Load Branch 3, !- Branch 3 Name + Secondary CW Demand Load Branch 4, !- Branch 4 Name + Secondary CW Demand Load Branch 5, !- Branch 5 Name + Secondary CW Demand Load Branch 6, !- Branch 6 Name + Secondary CW Demand Load Branch 7, !- Branch 7 Name + Secondary CW Demand Load Branch 8, !- Branch 8 Name + Secondary CW Demand Load Branch 9, !- Branch 9 Name + Secondary CW Demand Load Branch 10, !- Branch 10 Name + Secondary CW Demand Load Branch 11, !- Branch 11 Name + Secondary CW Demand Load Branch 12, !- Branch 12 Name + Secondary CW Demand Load Branch 13, !- Branch 13 Name + Secondary CW Demand Load Branch 14, !- Branch 14 Name + Secondary CW Demand Load Branch 15, !- Branch 15 Name + Secondary Cooling Demand Bypass Branch, !- Branch 17 Name + Secondary Cooling Demand Outlet; !- Branch 18 Name + + ConnectorList, + Secondary Cooling Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary CW Loop Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary CW Loop Mixer; !- Connector 2 Name + + ConnectorList, + Secondary Cooling Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary CW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary CW Demand Mixer; !- Connector 2 Name + + Branch, + Secondary Cooling Demand Inlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Cooling Demand Side Inlet Pipe, !- Component 1 Name + Secondary CW Demand Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Cooling Demand Side Inlet Pipe, !- Name + Secondary CW Demand Inlet Node, !- Inlet Node Name + Secondary CW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_top_ZN_1 Cooling Coil, !- Component 1 Name + Perimeter_top_ZN_1 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 5, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_top_ZN_2 Cooling Coil, !- Component 1 Name + Perimeter_top_ZN_2 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 6, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_top_ZN_3 Cooling Coil, !- Component 1 Name + Perimeter_top_ZN_3 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 7, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_top_ZN_4 Cooling Coil, !- Component 1 Name + Perimeter_top_ZN_4 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 8, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_mid_ZN_1 Cooling Coil, !- Component 1 Name + Perimeter_mid_ZN_1 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 9, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_bot_ZN_4 Cooling Coil, !- Component 1 Name + Perimeter_bot_ZN_4 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 10, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_bot_ZN_3 Cooling Coil, !- Component 1 Name + Perimeter_bot_ZN_3 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 11, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_bot_ZN_2 Cooling Coil, !- Component 1 Name + Perimeter_bot_ZN_2 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 12, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_bot_ZN_1 Cooling Coil, !- Component 1 Name + Perimeter_bot_ZN_1 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 13, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Core_top Cooling Coil, !- Component 1 Name + Core_top PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Core_top PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 14, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Core_mid Cooling Coil, !- Component 1 Name + Core_mid PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Core_mid PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 15, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Core_bottom Cooling Coil, !- Component 1 Name + Core_bottom PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Core_bottom PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_mid_ZN_2 Cooling Coil, !- Component 1 Name + Perimeter_mid_ZN_2 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_mid_ZN_3 Cooling Coil, !- Component 1 Name + Perimeter_mid_ZN_3 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + Perimeter_mid_ZN_4 Cooling Coil, !- Component 1 Name + Perimeter_mid_ZN_4 PIUHEATING CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Cooling Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Cooling Demand Side Bypass, !- Component 1 Name + Secondary CW Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Cooling Demand Side Bypass, !- Name + Secondary CW Demand Bypass Inlet Node, !- Inlet Node Name + Secondary CW Demand Bypass Outlet Node; !- Outlet Node Name + + Branch, + Secondary Cooling Demand Outlet, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Heating, !- Component 1 Object Type + Dedicated HR Heating Side WSHP, !- Component 1 Name + Heating Side WSHP Source Side Inlet, !- Component 1 Inlet Node Name + Heating Side WSHP Source Side Oulet; !- Component 1 Outlet Node Name + + + Branch, + Secondary Cooling Supply Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Supply Side Outlet Pipe, !- Component 1 Name + Secondary Supply Side Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Supply Side Outlet Pipe, !- Name + Secondary Supply Side Exit Pipe Inlet Node, !- Inlet Node Name + Secondary CW Supply Outlet Node; !- Outlet Node Name + + Branch, + Secondary CW Pump Branch,!- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + Dedicated HR Cooling Side WSHP, !- Name + Cooling Side WSHP Load Side Inlet, !- Load Side Inlet Node Name + Cooling Side WSHP Load Side Outlet, !- Load Side Outlet Node Name + Pump:VariableSpeed, !- Component 1 Object Type + Secondary CW Circ Pump, !- Component 1 Name + Cooling Side WSHP Load Side Outlet, !- Component 1 Inlet Node Name + Secondary CW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW HX supply Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary CW HX, !- Component 1 Name + Secondary CW HX Inlet Node, !- Component 1 Inlet Node Name + Secondary CW HX Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Cooling Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Supply Side Bypass, !- Component 1 Name + Secondary CW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Supply Side Bypass, !- Name + Secondary CW Supply Bypass Inlet Node, !- Inlet Node Name + Secondary CW Supply Bypass Outlet Node; !- Outlet Node Name + + Connector:Splitter, + Secondary CW Loop Splitter, !- Name + Secondary CW Pump Branch,!- Inlet Branch Name + Secondary CW HX supply Branch, !- Outlet Branch 1 Name + Secondary Cooling Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Secondary CW Loop Mixer, !- Name + Secondary Cooling Supply Outlet, !- Outlet Branch Name + Secondary CW HX supply Branch, !- Inlet Branch 1 Name + Secondary Cooling Supply Bypass Branch; !- Inlet Branch 2 Name + + Connector:Splitter, + Secondary CW Demand Splitter, !- Name + Secondary Cooling Demand Inlet, !- Inlet Branch Name + Secondary CW Demand Load Branch 1, !- Outlet Branch 1 Name + Secondary CW Demand Load Branch 2, !- Outlet Branch 2 Name + Secondary CW Demand Load Branch 3, !- Outlet Branch 3 Name + Secondary CW Demand Load Branch 4, !- Outlet Branch 4 Name + Secondary CW Demand Load Branch 5, !- Outlet Branch 5 Name + Secondary CW Demand Load Branch 6, !- Outlet Branch 6 Name + Secondary CW Demand Load Branch 7, !- Outlet Branch 7 Name + Secondary CW Demand Load Branch 8, !- Outlet Branch 8 Name + Secondary CW Demand Load Branch 9, !- Outlet Branch 9 Name + Secondary CW Demand Load Branch 10, !- Outlet Branch 10 Name + Secondary CW Demand Load Branch 11, !- Outlet Branch 11 Name + Secondary CW Demand Load Branch 12, !- Outlet Branch 12 Name + Secondary CW Demand Load Branch 13, !- Outlet Branch 13 Name + Secondary CW Demand Load Branch 14, !- Outlet Branch 14 Name + Secondary CW Demand Load Branch 15, !- Outlet Branch 15 Name + Secondary Cooling Demand Bypass Branch; !- Outlet Branch 16 Name + + Connector:Mixer, + Secondary CW Demand Mixer, !- Name + Secondary Cooling Demand Outlet, !- Outlet Branch Name + Secondary CW Demand Load Branch 1, !- Inlet Branch 1 Name + Secondary CW Demand Load Branch 2, !- Inlet Branch 2 Name + Secondary CW Demand Load Branch 3, !- Inlet Branch 3 Name + Secondary CW Demand Load Branch 4, !- Inlet Branch 4 Name + Secondary CW Demand Load Branch 5, !- Inlet Branch 5 Name + Secondary CW Demand Load Branch 6, !- Inlet Branch 6 Name + Secondary CW Demand Load Branch 7, !- Inlet Branch 7 Name + Secondary CW Demand Load Branch 8, !- Inlet Branch 8 Name + Secondary CW Demand Load Branch 9, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 10, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 11, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 12, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 13, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 14, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 15, !- Inlet Branch 9 Name + Secondary Cooling Demand Bypass Branch; !- Inlet Branch 16 Name + + PlantEquipmentOperationSchemes, + Secondary CW Loop Operation, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + + Pump:VariableSpeed, + Secondary CW Circ Pump, !- Name + Cooling Side WSHP Load Side Outlet, !- Inlet Node Name + Secondary CW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + +!____________________________________________ + + Branch, + HeatSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Demand Bypass Pipe, !- Component 1 Name + HeatSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Demand Inlet Pipe, !- Component 1 Name + HeatSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Demand Inlet Pipe-HeatSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Basement VAV Box Reheat Coil, !- Component 1 Name + Basement VAV Box Reheat CoilDemand Inlet Node, !- Component 1 Inlet Node Name + Basement VAV Box Reheat CoilDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Core_bottom PIUHEATING Reheat Coil, !- Component 1 Name + Core_bottom PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Core_bottom PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Core_mid PIUHEATING Reheat Coil, !- Component 1 Name + Core_mid PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Core_mid PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + + Branch, + Secondary Heating Demand Load Branch 5, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_bot_ZN_3 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_bot_ZN_3 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_3 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 6, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_bot_ZN_2 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_bot_ZN_2 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_2 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 7, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_bot_ZN_1 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_bot_ZN_1 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_1 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 8, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_bot_ZN_4 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_bot_ZN_4 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_4 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + + Branch, + Secondary Heating Demand Load Branch 9, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_mid_ZN_3 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_mid_ZN_3 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_3 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + + Branch, + Secondary Heating Demand Load Branch 10, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_mid_ZN_2 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_mid_ZN_2 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_2 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 11, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_mid_ZN_1 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_mid_ZN_1 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_1 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 12, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_mid_ZN_4 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_mid_ZN_4 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_4 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 13, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_top_ZN_3 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_top_ZN_3 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_3 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 14, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_top_ZN_2 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_top_ZN_2 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_2 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 15, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_top_ZN_1 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_top_ZN_1 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_1 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 16, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Perimeter_top_ZN_4 PIUHEATING Reheat Coil, !- Component 1 Name + Perimeter_top_ZN_4 PIUHEATING HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_4 PIUHEATING HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 17, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV_5_HeatC, !- Component 1 Name + VAV_5_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_5_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 18, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV_1_HeatC, !- Component 1 Name + VAV_1_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_1_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 19, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV_2_HeatC, !- Component 1 Name + VAV_2_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_2_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Load Branch 20, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV_3_HeatC, !- Component 1 Name + VAV_3_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_3_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + + Branch, + HeatSys1 Supply Equipment Branch 1, + , + HeatPump:PlantLoop:EIR:Heating, + AWHP_1 Heating Side, + AWHP_1 Heating Side Inlet, + AWHP_1 Heating Side Outlet; + + Branch, + HeatSys1 Supply Equipment Branch 2, + , + HeatPump:PlantLoop:EIR:Heating, + AWHP_2 Heating Side, + AWHP_2 Heating Side Inlet, + AWHP_2 Heating Side Outlet; + + + HeatPump:PlantLoop:EIR:Cooling, + AWHP_1 Cooling Side, !- Name + AWHP_1 Cooling Side Inlet Node, !- Load Side Inlet Node Name + AWHP_1 Cooling Side Outlet Node, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_1 Cooling Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_1 Cooling Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_1 Heating Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + CoolCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + CoolEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2; !- Minimum Part Load Ratio + + OutdoorAir:Node, + AWHP_1 Cooling Side Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Cooling, + AWHP_2 Cooling Side, !- Name + AWHP_2 Cooling Side Inlet Node, !- Load Side Inlet Node Name + AWHP_2 Cooling Side Outlet Node, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_2 Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_2 Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_2 Heating Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + CoolCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + CoolEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2; !- Minimum Part Load Ratio + +!- ACX 140 Biquadratic cooling curves provided by Trane +Curve:Biquadratic, + CoolCapCurveFuncTemp, !- Name + 1.06722728893252, !- Coefficient1 Constant + 0.0460678063570057, !- Coefficient2 x + 0.00034604993757372, !- Coefficient3 x**2 + -0.0069704934525177, !- Coefficient4 y + -0.0000288618548923695, !- Coefficient5 y**2 + -0.000475762640861958, !- Coefficient6 x*y + 2.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37.0, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + CoolEIRCurveFuncTemp, !- Name + 0.440305821838175, !- Coefficient1 Constant + -0.0241323110030793, !- Coefficient2 x + 0.000537914626055751, !- Coefficient3 x**2 + 0.0118716162533228, !- Coefficient4 y + 0.000305785618883187, !- Coefficient5 y**2 + -0.000617329632749052, !- Coefficient6 x*y + 2.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37.0, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + OutdoorAir:Node, + AWHP_2 Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Heating, + AWHP_1 Heating Side, !- Name + AWHP_1 Heating Side Inlet, !- Load Side Inlet Node Name + AWHP_1 Heating Side Outlet, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_1 Heating Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_1 Heating Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_1 Cooling Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + HeatCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + HeatEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1.1, !- Heating To Cooling Capacity Sizing Ratio + GreaterOfHeatingOrCooling, !- Heat Pump Sizing Method + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + -25.0, !- Minimum Source Inlet Temperature + 35.0, !- Maximum Source Inlet Temperature + MinSWTvsOAT, !- Minimum Supply Water Temperature Curve Name + MaxSWTvsOAT, !- Maximum Supply Water Temperature Curve Name + HeatDryCoilFuncOAT, !- Dry Outdoor Correction Factor Curve Name + 10.60675883, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + TimedEmpirical, !- Heat Pump Defrost Control + 0.1166667, !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + TimedDefrostFrequency, !- Timed Demand Defrost Frequency Curve Name + TimedDefrostHeatLoad, !- Timed Demand Defrost Heat Load Penalty Curve Name + TimedDefrostHeatEnergy; !- Timed Demand Defrost Heat Input Energy Fraction Curve Name + + Curve:Quadratic, + MinSWTvsOAT, !- Name + 0.0, !- Coefficient1 Constant + 1.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -17.77778, !- Minimum Value of x !- 0 F + 35.0, !- Maximum Value of x !- 95 F + 20.0, !- Minimum Curve Output + 35.0, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + Curve:Quadratic, + MaxSWTvsOAT, !- Name + 53.1666666666667, !- Coefficient1 Constant + 0.85, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -17.777778, !- Minimum Value of x !- 0 F + 35.0, !- Maximum Value of x !- 95 F + 20.0, !- Minimum Curve Output + 60.0, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + OutdoorAir:Node, + AWHP_1 Heating Side Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Heating, + AWHP_2 Heating Side, !- Name + AWHP_2 Heating Side Inlet, !- Load Side Inlet Node Name + AWHP_2 Heating Side Outlet, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_2 Heating Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_2 Heating Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_2 Cooling Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + HeatCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + HeatEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1.1, !- Heating To Cooling Capacity Sizing Ratio + GreaterOfHeatingOrCooling, !- Heat Pump Sizing Method + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + -25.0, !- Minimum Source Inlet Temperature + 35.0, !- Maximum Source Inlet Temperature + MinSWTvsOAT, !- Minimum Supply Water Temperature Curve Name + MaxSWTvsOAT, !- Maximum Supply Water Temperature Curve Name + HeatDryCoilFuncOAT, !- Dry Outdoor Correction Factor Curve Name + 10.60675883, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + TimedEmpirical, !- Heat Pump Defrost Control + 0.1166667, !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + TimedDefrostFrequency, !- Timed Demand Defrost Frequency Curve Name + TimedDefrostHeatLoad, !- Timed Demand Defrost Heat Load Penalty Curve Name + TimedDefrostHeatEnergy; !- Timed Demand Defrost Heat Input Energy Fraction Curve Name + +!-ACX Heating Capacity BiQuadratic created from Trane quadratic curves +Curve:Biquadratic, + HeatCapCurveFuncTemp, !- Name + 0.794900878202383, !- Coefficient1 Constant + 0.00388524034840032, !- Coefficient2 x + -0.0000575169230965453, !- Coefficient3 x**2 + 0.0278109488428528, !- Coefficient4 y + 0.000318168, !- Coefficient5 y**2 + -0.000130572089253355, !- Coefficient6 x*y + 15.0, !- Minimum Value of x + 70.0, !- Maximum Value of x + -17.0, !- Minimum Value of y + 37.22, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HeatEIRCurveFuncTemp, !- Name + 0.530730392560108, !- Coefficient1 Constant + 0.00655164780603528, !- Coefficient2 x + 0.000263599226028026, !- Coefficient3 x**2 + -0.03620668194737, !- Coefficient4 y + 0.00126617163409192, !- Coefficient5 y**2 + -0.000791224057761721, !- Coefficient6 x*y + 15.0, !- Minimum Value of x + 70.0, !- Maximum Value of x + -17.0, !- Minimum Value of y + 37.22, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + OutdoorAir:Node, + AWHP_2 Heating Side Condenser Air Inlet Node, + -1; + +!___ FAKE CURVES BELOW!!! + + Curve:Biquadratic, + FakeCapCurveFuncTemp, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 5.0, !- Minimum Value of x + 10.0, !- Maximum Value of x + 24.0, !- Minimum Value of y + 35.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + EIRCurveFuncPLR, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + + Curve:Quadratic, + TimedDefrostHeatEnergy, !- Name + 0.03423, !- Coefficient1 Constant + -0.00072, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + TimedDefrostFrequency, !- Name + 0.71582, !- Coefficient1 Constant + -0.024822, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + TimedDefrostHeatLoad, !- Name + 0.08286, !- Coefficient1 Constant + -0.007812, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + HeatDryCoilFuncOAT, !- Name + 0.9574744, !- Coefficient1 Constant + -0.00299322, !- Coefficient2 x + 0.000055728, !- Coefficient3 x**2 + -11.675, !- Minimum Value of x !- curve evaluates to ~1 here + 26.6666667; !- Maximum Value of x !- curve evaluates to min value here, ~ 0.91728 + + Curve:Quadratic, + HeatCapCurveFuncPLR, !- Name + 0.0473, !- Coefficient1 Constant + 0.8643, !- Coefficient2 x + 0.0884, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + + +! Branch, +! HeatSys1 Supply Equipment Bypass Branch, !- Name +! , !- Pressure Drop Curve Name +! Pipe:Adiabatic, !- Component 1 Object Type +! HeatSys1 Supply Equipment Bypass Pipe, !- Component 1 Name +! HeatSys1 Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name +! HeatSys1 Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + HeatSys1 Pump, !- Component 1 Name + HeatSys1 Supply Side Inlet, !- Component 1 Inlet Node Name + HeatSys1 Pump-HeatSys1 BoilerNodeviaConnector; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Supply Outlet Pipe, !- Component 1 Name + HeatSys1 Supply Mixer-HeatSys1 Supply Outlet Pipe, !- Component 1 Inlet Node Name + HeatSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + + + ConnectorList, + CoolSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CoolSys1 Demand Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CoolSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + CoolSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CoolSys1 Supply Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CoolSys1 Supply Mixer; !- Connector 2 Name + + ConnectorList, + HeatSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + HeatSys1 Demand Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + HeatSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + HeatSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + HeatSys1 Supply Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + HeatSys1 Supply Mixer; !- Connector 2 Name + + + Connector:Splitter, + CoolSys1 Demand Splitter,!- Name + CoolSys1 Demand Inlet Branch, !- Inlet Branch Name + CoolSys1 Demand Load Branch 1, !- Outlet Branch 1 Name + CoolSys1 Demand Load Branch 2, !- Outlet Branch 2 Name + CoolSys1 Demand Load Branch 3, !- Outlet Branch 3 Name + CoolSys1 Demand Load Branch 4, !- Outlet Branch 4 Name + Primary to Secondary CW HX Branch, !- Outlet Branch 5 Name + CoolSys1 Demand Bypass Branch; !- Outlet Branch 6 Name + + Connector:Splitter, + CoolSys1 Supply Splitter,!- Name + CoolSys1 Supply Inlet Branch, !- Inlet Branch Name + CoolSys1 Supply Equipment Branch 1, !- Outlet Branch 1 Name + CoolSys1 Supply Equipment Branch 2; +! CoolSys1 Supply Equipment Bypass Branch; !- Outlet Branch 3 Name + + Connector:Splitter, + HeatSys1 Demand Splitter,!- Name + HeatSys1 Demand Inlet Branch, !- Inlet Branch Name + HEATSYS1 PRIMARY TO SECONDARY HX BRANCH, + HeatSys1 Demand Bypass Branch; !- Outlet Branch 21 Name + + Connector:Mixer, + HeatSys1 Demand Mixer, !- Name + HeatSys1 Demand Outlet Branch, !- Outlet Branch Name + HEATSYS1 PRIMARY TO SECONDARY HX BRANCH, + HeatSys1 Demand Bypass Branch; !- Inlet Branch 21 Name + + Connector:Splitter, + HeatSys1 Supply Splitter,!- Name + HeatSys1 Supply Inlet Branch, !- Inlet Branch Name + HeatSys1 Supply Equipment Branch 1, !- Outlet Branch 1 Name + HeatSys1 Supply Equipment Branch 2; !- Outlet Branch 1 Name +! HeatSys1 Supply Equipment Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + CoolSys1 Demand Mixer, !- Name + CoolSys1 Demand Outlet Branch, !- Outlet Branch Name + CoolSys1 Demand Load Branch 1, !- Inlet Branch 1 Name + CoolSys1 Demand Load Branch 2, !- Inlet Branch 2 Name + CoolSys1 Demand Load Branch 3, !- Inlet Branch 3 Name + CoolSys1 Demand Load Branch 4, !- Inlet Branch 4 Name + Primary to Secondary CW HX Branch, !- Inlet Branch 5 Name + CoolSys1 Demand Bypass Branch; !- Inlet Branch 6 Name + + Connector:Mixer, + CoolSys1 Supply Mixer, !- Name + CoolSys1 Supply Outlet Branch, !- Outlet Branch Name + CoolSys1 Supply Equipment Branch 1, !- Inlet Branch 1 Name + CoolSys1 Supply Equipment Branch 2; +! CoolSys1 Supply Equipment Bypass Branch; !- Inlet Branch 3 Name + + Connector:Mixer, + HeatSys1 Supply Mixer, !- Name + HeatSys1 Supply Outlet Branch, !- Outlet Branch Name + HeatSys1 Supply Equipment Branch 1, !- Inlet Branch 1 Name + HeatSys1 Supply Equipment Branch 2; !- Outlet Branch 1 Name +! HeatSys1 Supply Equipment Bypass Branch; !- Inlet Branch 2 Name + + Pipe:Adiabatic, + CoolSys1 Demand Bypass Pipe, !- Name + CoolSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + CoolSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Demand Inlet Pipe, !- Name + CoolSys1 Demand Inlet Node, !- Inlet Node Name + CoolSys1 Demand Inlet Pipe-CoolSys1 Demand Mixer; !- Outlet Node Name + +! Pipe:Adiabatic, +! CoolSys1 Supply Equipment Bypass Pipe, !- Name +! CoolSys1 Supply Equip Bypass Inlet Node, !- Inlet Node Name +! CoolSys1 Supply Equip Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Supply Outlet Pipe, !- Name + CoolSys1 Supply Mixer-CoolSys1 Supply Outlet Pipe, !- Inlet Node Name + CoolSys1 Supply Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Demand Bypass Pipe, !- Name + HeatSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + HeatSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Demand Inlet Pipe, !- Name + HeatSys1 Demand Inlet Node, !- Inlet Node Name + HeatSys1 Demand Inlet Pipe-HeatSys1 Demand Mixer; !- Outlet Node Name + +! Pipe:Adiabatic, +! HeatSys1 Supply Equipment Bypass Pipe, !- Name +! HeatSys1 Supply Equip Bypass Inlet Node, !- Inlet Node Name +! HeatSys1 Supply Equip Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Supply Outlet Pipe, !- Name + HeatSys1 Supply Mixer-HeatSys1 Supply Outlet Pipe, !- Inlet Node Name + HeatSys1 Supply Outlet Node; !- Outlet Node Name + + Branch, + CoolSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + + Pipe:Adiabatic, !- Component 2 Object Type + CoolSys1 Demand Outlet Pipe, !- Component 2 Name + CoolSys1 Demand Outlet Pipe Inlet, !- Component 2 Inlet Node Name + CoolSys1 Demand Outlet Node; !- Component 2 Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Demand Outlet Pipe, !- Name + CoolSys1 Demand Outlet Pipe Inlet, !- Inlet Node Name + CoolSys1 Demand Outlet Node; !- Outlet Node Name + + Branch, + HeatSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, + HeatSys1 Demand Outlet Pipe, + HeatSys1 Demand Outlet Pipe Inlet, + HeatSys1 Demand Outlet Node; + + Pipe:Adiabatic, + HeatSys1 Demand Outlet Pipe, !- Name + HeatSys1 Demand Outlet Pipe Inlet, !- Inlet Node Name + HeatSys1 Demand Outlet Node; !- Outlet Node Name + + HeatPump:PlantLoop:EIR:Heating, + Dedicated HR Heating Side WSHP, !- Name + Heating Side WSHP Load Side Inlet, !- Load Side Inlet Node Name + Heating Side WSHP Load Side Outlet, !- Load Side Outlet Node Name + WaterSource, !- Condenser Type + Heating Side WSHP Source Side Inlet, !- Source Side Inlet Node Name + Heating Side WSHP Source Side Oulet, !- Source Side Outlet Node Name + Dedicated HR Cooling Side WSHP, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 3.5, !- Reference Coefficient of Performance {W/W} + 0.2, !- Sizing Factor + CapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + EIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1.0, !- Heating To Cooling Capacity Sizing Ratio + CoolingCapacity, !- Heat Pump Sizing Method + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + 2.0, !- Minimum Source Inlet Temperature + 25.0, !- Maximum Source Inlet Temperature + , !- Minimum Supply Water Temperature Curve Name + , !- Maximum Supply Water Temperature Curve Name + , !- Dry Outdoor Correction Factor Curve Name + , !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + , !- Heat Pump Defrost Control + , !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + , !- Timed Demand Defrost Frequency Curve Name + , !- Timed Demand Defrost Heat Load Penalty Curve Name + ; !- Timed Demand Defrost Heat Input Energy Fraction Curve Name + + Curve:Biquadratic, + CapCurveFuncTemp, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 5.0, !- Minimum Value of x + 10.0, !- Maximum Value of x + 24.0, !- Minimum Value of y + 35.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + EIRCurveFuncTemp, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 5.0, !- Minimum Value of x + 10.0, !- Maximum Value of x + 24.0, !- Minimum Value of y + 35.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + + HeatPump:PlantLoop:EIR:Cooling, + Dedicated HR Cooling Side WSHP, !- Name + Cooling Side WSHP Load Side Inlet, !- Load Side Inlet Node Name + Cooling Side WSHP Load Side Outlet, !- Load Side Outlet Node Name + WaterSource, !- Condenser Type + Cooling Side WSHP Source Side Inlet, !- Source Side Inlet Node Name + Cooling Side WSHP Source Side Outlet, !- Source Side Outlet Node Name + Dedicated HR Heating Side WSHP, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 3.5, !- Reference Coefficient of Performance {W/W} + 0.2, !- Sizing Factor + CapCurveFuncTemp2, !- Capacity Modifier Function of Temperature Curve Name + EIRCurveFuncTemp2, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR2, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + 10.0, !- Minimum Source Inlet Temperature + 50.0; !- Maximum Source Inlet Temperature + + Curve:Biquadratic, + CapCurveFuncTemp2, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 5.0, !- Minimum Value of x + 10.0, !- Maximum Value of x + 24.0, !- Minimum Value of y + 35.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + EIRCurveFuncTemp2, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Coefficient4 y + 0.0, !- Coefficient5 y**2 + 0.0, !- Coefficient6 x*y + 5.0, !- Minimum Value of x + 10.0, !- Maximum Value of x + 24.0, !- Minimum Value of y + 35.0, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Quadratic, + EIRCurveFuncPLR2, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + SetpointManager:Scheduled, + CoolSys1 HX Setpoint Manager, !- Name + Temperature, !- Control Variable + CW-Loop-Temp-Schedule, !- Schedule Name + CoolSys1 Pump Inlet; !- Setpoint Node or NodeList Name + + ThermalStorage:ChilledWater:Mixed, + Chilled Water Storage Tank 1, !- Name + 50.0, !- Tank Volume {m3} + CW-Tank-Temp-Schedule, !- Setpoint Temperature Schedule Name + 2.5, !- Deadband Temperature Difference {deltaC} + 1.0, !- Minimum Temperature Limit {C} + , !- Nominal Cooling Capacity {W} + Outdoors, !- Ambient Temperature Indicator + , !- Ambient Temperature Schedule Name + , !- Ambient Temperature Zone Name + VAV_1_OAInlet Node, !- Ambient Temperature Outdoor Air Node Name + 5.0, !- Heat Gain Coefficient from Ambient Temperature {W/K} + ChW Tank Inlet node, !- Use Side Inlet Node Name + CoolSys1 Pump Inlet, !- Use Side Outlet Node Name + 1.0, !- Use Side Heat Transfer Effectiveness + ALWAYS_ON, !- Use Side Availability Schedule Name + Autosize, !- Use Side Design Flow Rate {m3/s} + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + , !- Source Side Heat Transfer Effectiveness + , !- Source Side Availability Schedule Name + , !- Source Side Design Flow Rate {m3/s} + ; !- Tank Recovery Time {hr} + + Schedule:Compact, + CW-Tank-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,6.7; !- Field 3 + +! ***SCHEDULES*** + + Schedule:Compact, + CW-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,6.7; !- Field 3 + + Schedule:Compact, + HW-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,40.0; !- Field 3 + +! ***SWH EQUIPMENT*** + + WaterHeater:Mixed, + SWHSys1 Water Heater, !- Name + 0.7571, !- Tank Volume {m3} + SWHSys1 Water Heater Setpoint Temperature Schedule Name, !- Setpoint Temperature Schedule Name + 2.0, !- Deadband Temperature Difference {deltaC} + 82.2222, !- Maximum Temperature Limit {C} + Cycle, !- Heater Control Type + 845000, !- Heater Maximum Capacity {W} + , !- Heater Minimum Capacity {W} + , !- Heater Ignition Minimum Flow Rate {m3/s} + , !- Heater Ignition Delay {s} + NATURALGAS, !- Heater Fuel Type + 0.8, !- Heater Thermal Efficiency + , !- Part Load Factor Curve Name + 20, !- Off Cycle Parasitic Fuel Consumption Rate {W} + NATURALGAS, !- Off Cycle Parasitic Fuel Type + 0.8, !- Off Cycle Parasitic Heat Fraction to Tank + , !- On Cycle Parasitic Fuel Consumption Rate {W} + NATURALGAS, !- On Cycle Parasitic Fuel Type + , !- On Cycle Parasitic Heat Fraction to Tank + SCHEDULE, !- Ambient Temperature Indicator + SWHSys1 Water Heater Ambient Temperature Schedule Name, !- Ambient Temperature Schedule Name + , !- Ambient Temperature Zone Name + , !- Ambient Temperature Outdoor Air Node Name + 6.0, !- Off Cycle Loss Coefficient to Ambient Temperature {W/K} + , !- Off Cycle Loss Fraction to Zone + 6.0, !- On Cycle Loss Coefficient to Ambient Temperature {W/K} + , !- On Cycle Loss Fraction to Zone + , !- Peak Use Flow Rate {m3/s} + , !- Use Flow Rate Fraction Schedule Name + , !- Cold Water Supply Temperature Schedule Name + SWHSys1 Pump-SWHSys1 Water HeaterNode, !- Use Side Inlet Node Name + SWHSys1 Supply Equipment Outlet Node, !- Use Side Outlet Node Name + 1.0, !- Use Side Effectiveness + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + 1.0, !- Source Side Effectiveness + AUTOSIZE, !- Use Side Design Flow Rate {m3/s} + AUTOSIZE, !- Source Side Design Flow Rate {m3/s} + 1.5; !- Indirect Water Heating Recovery Time {hr} + + WaterUse:Equipment, + Core_bottom Water Equipment, !- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_bottom, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + WaterUse:Equipment, + Core_mid Water Equipment,!- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_mid, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + WaterUse:Equipment, + Core_top Water Equipment,!- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_top, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + PlantEquipmentList, + SWHSys1 Equipment List, !- Name + WaterHeater:Mixed, !- Equipment 1 Object Type + SWHSys1 Water Heater; !- Equipment 1 Name + + Pump:VariableSpeed, + SWHSys1 Pump, !- Name + SWHSys1 Supply Inlet Node, !- Inlet Node Name + SWHSys1 Pump-SWHSys1 Water HeaterNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.85, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0.0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + +! ***SWH SIZING & CONTROLS*** + + Sizing:Plant, + SWHSys1, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 60, !- Design Loop Exit Temperature {C} + 5.0; !- Loop Design Temperature Difference {deltaC} + + SetpointManager:Scheduled, + SWHSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + SWHSys1-Loop-Temp-Schedule, !- Schedule Name + SWHSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + PlantEquipmentOperationSchemes, + SWHSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + SWHSys1 Operation Scheme,!- Control Scheme 1 Name + ALWAYS_ON; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:HeatingLoad, + SWHSys1 Operation Scheme,!- Name + 0.0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + SWHSys1 Equipment List; !- Range 1 Equipment List Name + +! ***SWH LOOP*** + + PlantLoop, + SWHSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + SWHSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + SWHSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 60.0, !- Maximum Loop Temperature {C} + 10.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + SWHSys1 Supply Inlet Node, !- Plant Side Inlet Node Name + SWHSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + SWHSys1 Supply Branches, !- Plant Side Branch List Name + SWHSys1 Supply Connectors, !- Plant Side Connector List Name + SWHSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + SWHSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + SWHSys1 Demand Branches, !- Demand Side Branch List Name + SWHSys1 Demand Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + +! ***SWH CONNECTIONS*** + + BranchList, + SWHSys1 Demand Branches, !- Name + SWHSys1 Demand Inlet Branch, !- Branch 1 Name + SWHSys1 Demand Load Branch 1, !- Branch 2 Name + SWHSys1 Demand Load Branch 2, !- Branch 3 Name + SWHSys1 Demand Load Branch 3, !- Branch 4 Name + SWHSys1 Demand Bypass Branch, !- Branch 5 Name + SWHSys1 Demand Outlet Branch; !- Branch 6 Name + + BranchList, + SWHSys1 Supply Branches, !- Name + SWHSys1 Supply Inlet Branch, !- Branch 1 Name + SWHSys1 Supply Equipment Branch, !- Branch 2 Name + SWHSys1 Supply Equipment Bypass Branch, !- Branch 3 Name + SWHSys1 Supply Outlet Branch; !- Branch 4 Name + + Branch, + SWHSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Bypass Pipe, !- Component 1 Name + SWHSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Inlet Pipe, !- Component 1 Name + SWHSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Demand Inlet Pipe-SWHSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_bottom Water Equipment, !- Component 1 Name + Core_bottom Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_bottom Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_mid Water Equipment,!- Component 1 Name + Core_mid Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_mid Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_top Water Equipment,!- Component 1 Name + Core_top Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_top Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Outlet Pipe, !- Component 1 Name + SWHSys1 Demand Mixer-SWHSys1 Demand Outlet Pipe, !- Component 1 Inlet Node Name + SWHSys1 Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Equipment Branch, !- Name + , !- Pressure Drop Curve Name + WaterHeater:Mixed, !- Component 1 Object Type + SWHSys1 Water Heater, !- Component 1 Name + SWHSys1 Pump-SWHSys1 Water HeaterNode, !- Component 1 Inlet Node Name + SWHSys1 Supply Equipment Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Equipment Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Supply Equipment Bypass Pipe, !- Component 1 Name + SWHSys1 Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + SWHSys1 Pump, !- Component 1 Name + SWHSys1 Supply Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Pump-SWHSys1 Water HeaterNodeviaConnector; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Supply Outlet Pipe, !- Component 1 Name + SWHSys1 Supply Mixer-SWHSys1 Supply Outlet Pipe, !- Component 1 Inlet Node Name + SWHSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + ConnectorList, + SWHSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + SWHSys1 Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + SWHSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + SWHSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + SWHSys1 Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + SWHSys1 Supply Mixer; !- Connector 2 Name + + WaterUse:Connections, + Core_bottom Water Equipment, !- Name + Core_bottom Water Equipment Water Inlet Node, !- Inlet Node Name + Core_bottom Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_bottom Water Equipment; !- Water Use Equipment 1 Name + + WaterUse:Connections, + Core_mid Water Equipment,!- Name + Core_mid Water Equipment Water Inlet Node, !- Inlet Node Name + Core_mid Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_mid Water Equipment;!- Water Use Equipment 1 Name + + WaterUse:Connections, + Core_top Water Equipment,!- Name + Core_top Water Equipment Water Inlet Node, !- Inlet Node Name + Core_top Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_top Water Equipment;!- Water Use Equipment 1 Name + + Connector:Splitter, + SWHSys1 Demand Splitter, !- Name + SWHSys1 Demand Inlet Branch, !- Inlet Branch Name + SWHSys1 Demand Load Branch 1, !- Outlet Branch 1 Name + SWHSys1 Demand Load Branch 2, !- Outlet Branch 2 Name + SWHSys1 Demand Load Branch 3, !- Outlet Branch 3 Name + SWHSys1 Demand Bypass Branch; !- Outlet Branch 4 Name + + Connector:Splitter, + SWHSys1 Supply Splitter, !- Name + SWHSys1 Supply Inlet Branch, !- Inlet Branch Name + SWHSys1 Supply Equipment Branch, !- Outlet Branch 1 Name + SWHSys1 Supply Equipment Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + SWHSys1 Demand Mixer, !- Name + SWHSys1 Demand Outlet Branch, !- Outlet Branch Name + SWHSys1 Demand Load Branch 1, !- Inlet Branch 1 Name + SWHSys1 Demand Load Branch 2, !- Inlet Branch 2 Name + SWHSys1 Demand Load Branch 3, !- Inlet Branch 3 Name + SWHSys1 Demand Bypass Branch; !- Inlet Branch 4 Name + + Connector:Mixer, + SWHSys1 Supply Mixer, !- Name + SWHSys1 Supply Outlet Branch, !- Outlet Branch Name + SWHSys1 Supply Equipment Branch, !- Inlet Branch 1 Name + SWHSys1 Supply Equipment Bypass Branch; !- Inlet Branch 2 Name + + Pipe:Adiabatic, + SWHSys1 Demand Bypass Pipe, !- Name + SWHSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + SWHSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Demand Inlet Pipe, !- Name + SWHSys1 Demand Inlet Node, !- Inlet Node Name + SWHSys1 Demand Inlet Pipe-SWHSys1 Demand Mixer; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Demand Outlet Pipe, !- Name + SWHSys1 Demand Mixer-SWHSys1 Demand Outlet Pipe, !- Inlet Node Name + SWHSys1 Demand Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Supply Equipment Bypass Pipe, !- Name + SWHSys1 Supply Equip Bypass Inlet Node, !- Inlet Node Name + SWHSys1 Supply Equip Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Supply Outlet Pipe, !- Name + SWHSys1 Supply Mixer-SWHSys1 Supply Outlet Pipe, !- Inlet Node Name + SWHSys1 Supply Outlet Node; !- Outlet Node Name + +! ***SWH SCHEDULES*** + + Schedule:Compact, + BLDG_SWH_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 05:00,0.05, !- Field 3 + Until: 06:00,0.08, !- Field 5 + Until: 07:00,0.07, !- Field 7 + Until: 08:00,0.19, !- Field 9 + Until: 09:00,0.35, !- Field 11 + Until: 10:00,0.38, !- Field 13 + Until: 11:00,0.39, !- Field 15 + Until: 12:00,0.47, !- Field 17 + Until: 13:00,0.57, !- Field 19 + Until: 14:00,0.54, !- Field 21 + Until: 15:00,0.34, !- Field 23 + Until: 16:00,0.33, !- Field 25 + Until: 17:00,0.44, !- Field 27 + Until: 18:00,0.26, !- Field 29 + Until: 19:00,0.21, !- Field 31 + Until: 20:00,0.15, !- Field 33 + Until: 21:00,0.17, !- Field 35 + Until: 22:00,0.08, !- Field 37 + Until: 24:00,0.05, !- Field 39 + For: Saturday WinterDesignDay, !- Field 41 + Until: 05:00,0.05, !- Field 42 + Until: 06:00,0.08, !- Field 44 + Until: 07:00,0.07, !- Field 46 + Until: 08:00,0.11, !- Field 48 + Until: 09:00,0.15, !- Field 50 + Until: 10:00,0.21, !- Field 52 + Until: 11:00,0.19, !- Field 54 + Until: 12:00,0.23, !- Field 56 + Until: 13:00,0.20, !- Field 58 + Until: 14:00,0.19, !- Field 60 + Until: 15:00,0.15, !- Field 62 + Until: 16:00,0.13, !- Field 64 + Until: 17:00,0.14, !- Field 66 + Until: 21:00,0.07, !- Field 68 + Until: 22:00,0.09, !- Field 70 + Until: 24:00,0.05, !- Field 72 + For: AllOtherDays, !- Field 74 + Until: 05:00,0.04, !- Field 75 + Until: 06:00,0.07, !- Field 77 + Until: 11:00,0.04, !- Field 79 + Until: 13:00,0.06, !- Field 81 + Until: 14:00,0.09, !- Field 83 + Until: 15:00,0.06, !- Field 85 + Until: 21:00,0.04, !- Field 87 + Until: 22:00,0.07, !- Field 89 + Until: 24:00,0.04; !- Field 91 + + Schedule:Compact, + Water Equipment Latent fract sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.05; !- Field 3 + + Schedule:Compact, + Water Equipment Sensible fract sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.2; !- Field 3 + + Schedule:Compact, + SWHSys1 Water Heater Ambient Temperature Schedule Name, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,22.0; !- Field 3 + + Schedule:Compact, + Water Equipment Temp Sched, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,43.3; !- Field 3 + + Schedule:Compact, + Water Equipment Hot Supply Temp Sched, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,43.3; !- Field 3 + + Schedule:Compact, + SWHSys1 Water Heater Setpoint Temperature Schedule Name, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,60.0; !- Field 3 + + Schedule:Compact, + SWHSys1-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,60.0; !- Field 3 + +! ***ECONOMICS*** +! IN_EIAMonthlyRateGas, Source EIA historical Nov2003 thru Oct2004 +! Indiana 1999 state average electricity emissions factors based on eGRID, 1065, AirData +! PSI_CS_CommercialElectricService, source http://www.cinergypsi.com/pdfs/RateCS.pdf, effective 2004-05-24 +! PSI_LLF_LowLoadFactorService,source http://www.cinergypsi.com/pdfs/RATELLF.pdf, effective 2004-05-24 + + UtilityCost:Tariff, + PSI_LLF_LowLoadFactorService, !- Name + Electricity:Facility, !- Output Meter Name + kWh, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + HalfHour, !- Demand Window Length + 15.00, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Elect; !- Group Name + + UtilityCost:Charge:Block, + AnnualEnergyCharge, !- Utility Cost Charge Block Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + , !- Remaining Into Variable + , !- Block Size Multiplier Value or Variable Name + 300, !- Block Size 1 Value or Variable Name + 0.108222, !- Block 1 Cost per Unit Value or Variable Name + 700, !- Block Size 2 Value or Variable Name + 0.087021, !- Block 2 Cost per Unit Value or Variable Name + 1500, !- Block Size 3 Value or Variable Name + 0.078420, !- Block 3 Cost per Unit Value or Variable Name + remaining, !- Block Size 4 Value or Variable Name + 0.058320; !- Block 4 Cost per Unit Value or Variable Name + + UtilityCost:Charge:Block, + AnnualDemandBaseCharge, !- Utility Cost Charge Block Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + , !- Remaining Into Variable + TotalDemand, !- Block Size Multiplier Value or Variable Name + 190, !- Block Size 1 Value or Variable Name + 0.0, !- Block 1 Cost per Unit Value or Variable Name + 110, !- Block Size 2 Value or Variable Name + 0.051773, !- Block 2 Cost per Unit Value or Variable Name + remaining, !- Block Size 3 Value or Variable Name + 0.046965; !- Block 3 Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + FuelCostAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.002028; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + QualPollutionControlAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000536; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + SoxNoxRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.001127; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + DSMRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000370; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + PurchPowerTrackerAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000031; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + MidwestISOAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000216; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + CleanCoalRiderEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000833; !- Cost per Unit Value or Variable Name + + UtilityCost:Qualify, + MinDemand75kw, !- Utility Cost Qualify Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + TotalDemand, !- Variable Name + Minimum, !- Qualify Type + 75, !- Threshold Value or Variable Name + Annual, !- Season + Count, !- Threshold Test + 12; !- Number of Months + + UtilityCost:Charge:Simple, + TaxofeightPercent, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.08; !- Cost per Unit Value or Variable Name + +!end PSI_LLF_LowLoadFactorService + +! ***GENERAL REPORTING*** + + OutputControl:ReportingTolerances, + 0.556, !- Tolerance for Time Heating Setpoint Not Met {deltaC} + 0.556; !- Tolerance for Time Cooling Setpoint Not Met {deltaC} + + Output:SQLite, + Simple; !- Option Type + + Output:VariableDictionary,IDF,Unsorted; + + Output:Surfaces:List,Details; + + Output:Surfaces:Drawing,DXF; + + Output:Constructions,Constructions; + +! ***REPORT METERS/VARIABLES*** + + Output:Variable,*,Site Outdoor Air Relative Humidity,timestep; + + Output:Variable,*,Air System Outdoor Air Mass Flow Rate,timestep; + + Output:Variable,*,Zone Mean Air Temperature,timestep; + + Output:Variable,*,Heat Pump Electricity Rate,timestep; + + Output:Variable,*,Boiler Mass Flow Rate,timestep; + + Output:Variable,*,Boiler NaturalGas Rate,timestep; + + Output:Variable,*,Heat Pump Load Side Mass Flow Rate,timestep; + + Output:Variable,*,Heat Pump Source Side Mass Flow Rate,timestep; + + Output:Variable,*,Heat Pump Load Side Heat Transfer Rate,timestep; + + Output:Variable,*,Heat Pump Source Side Heat Transfer Rate,timestep; + + Output:Variable,*,Heat Pump Load Side Heat Transfer Energy,timestep; + + Output:Variable,*,Heat Pump Source Side Heat Transfer Energy,timestep; + + Output:Variable,VAV_5 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; + +! ***REPORT TABLES*** + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AnnualBuildingUtilityPerformanceSummary, !- Report 2 Name + InputVerificationandResultsSummary, !- Report 3 Name + ClimaticDataSummary, !- Report 4 Name + EnvelopeSummary, !- Report 5 Name + EquipmentSummary, !- Report 6 Name + ComponentSizingSummary, !- Report 7 Name + CoilSizingDetails, !- Report 8 Name + HVACSizingSummary, !- Report 9 Name + SystemSummary; !- Report 10 Name + +! ***ENVIRONMENTAL FACTORS REPORTING*** + + EnvironmentalImpactFactors, + 0.663, !- District Heating Efficiency + 4.18, !- District Cooling COP {W/W} + 0.585, !- Steam Conversion Efficiency + 80.7272, !- Total Carbon Equivalent Emission Factor From N2O {kg/kg} + 6.2727, !- Total Carbon Equivalent Emission Factor From CH4 {kg/kg} + 0.2727; !- Total Carbon Equivalent Emission Factor From CO2 {kg/kg} + +! Indiana electricity source and emission factors based on Deru and Torcellini 2007 + + FuelFactors, + Electricity, !- Existing Fuel Resource Name + 3.546, !- Source Energy Factor {J/J} + , !- Source Energy Schedule Name + 3.417E+02, !- CO2 Emission Factor {g/MJ} + , !- CO2 Emission Factor Schedule Name + 1.186E-01, !- CO Emission Factor {g/MJ} + , !- CO Emission Factor Schedule Name + 7.472E-01, !- CH4 Emission Factor {g/MJ} + , !- CH4 Emission Factor Schedule Name + 6.222E-01, !- NOx Emission Factor {g/MJ} + , !- NOx Emission Factor Schedule Name + 8.028E-03, !- N2O Emission Factor {g/MJ} + , !- N2O Emission Factor Schedule Name + 1.872E+00, !- SO2 Emission Factor {g/MJ} + , !- SO2 Emission Factor Schedule Name + 0.0, !- PM Emission Factor {g/MJ} + , !- PM Emission Factor Schedule Name + 1.739E-02, !- PM10 Emission Factor {g/MJ} + , !- PM10 Emission Factor Schedule Name + 0.0, !- PM2.5 Emission Factor {g/MJ} + , !- PM2.5 Emission Factor Schedule Name + 0.0, !- NH3 Emission Factor {g/MJ} + , !- NH3 Emission Factor Schedule Name + 1.019E-02, !- NMVOC Emission Factor {g/MJ} + , !- NMVOC Emission Factor Schedule Name + 5.639E-06, !- Hg Emission Factor {g/MJ} + , !- Hg Emission Factor Schedule Name + 2.778E-05, !- Pb Emission Factor {g/MJ} + , !- Pb Emission Factor Schedule Name + 0.4309556, !- Water Emission Factor {L/MJ} + , !- Water Emission Factor Schedule Name + 0, !- Nuclear High Level Emission Factor {g/MJ} + , !- Nuclear High Level Emission Factor Schedule Name + 0; !- Nuclear Low Level Emission Factor {m3/MJ} + +! Deru and Torcellini 2007 +! Source Energy and Emission Factors for Energy Use in Buildings +! NREL/TP-550-38617 +! source factor and Higher Heating Values from Table 5 +! post-combustion emission factors for boiler from Table 9 (with factor of 1000 correction for natural gas) + + FuelFactors, + NaturalGas, !- Existing Fuel Resource Name + 1.092, !- Source Energy Factor {J/J} + , !- Source Energy Schedule Name + 5.21E+01, !- CO2 Emission Factor {g/MJ} + , !- CO2 Emission Factor Schedule Name + 3.99E-02, !- CO Emission Factor {g/MJ} + , !- CO Emission Factor Schedule Name + 1.06E-03, !- CH4 Emission Factor {g/MJ} + , !- CH4 Emission Factor Schedule Name + 4.73E-02, !- NOx Emission Factor {g/MJ} + , !- NOx Emission Factor Schedule Name + 1.06E-03, !- N2O Emission Factor {g/MJ} + , !- N2O Emission Factor Schedule Name + 2.68E-04, !- SO2 Emission Factor {g/MJ} + , !- SO2 Emission Factor Schedule Name + 0.0, !- PM Emission Factor {g/MJ} + , !- PM Emission Factor Schedule Name + 3.59E-03, !- PM10 Emission Factor {g/MJ} + , !- PM10 Emission Factor Schedule Name + 0.0, !- PM2.5 Emission Factor {g/MJ} + , !- PM2.5 Emission Factor Schedule Name + 0, !- NH3 Emission Factor {g/MJ} + , !- NH3 Emission Factor Schedule Name + 2.61E-03, !- NMVOC Emission Factor {g/MJ} + , !- NMVOC Emission Factor Schedule Name + 1.11E-07, !- Hg Emission Factor {g/MJ} + , !- Hg Emission Factor Schedule Name + 2.13E-07, !- Pb Emission Factor {g/MJ} + , !- Pb Emission Factor Schedule Name + 0, !- Water Emission Factor {L/MJ} + , !- Water Emission Factor Schedule Name + 0, !- Nuclear High Level Emission Factor {g/MJ} + , !- Nuclear High Level Emission Factor Schedule Name + 0; !- Nuclear Low Level Emission Factor {m3/MJ} + +Output:Variable,*,Zone Air Terminal Heating Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Zone Air Terminal Sensible Cooling Rate,timestep; !- HVAC Sum [W] +Output:Variable,Core_bottom PIUHEATING Primary Inlet Node Name,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING Primary Inlet Node Name,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING Secondary Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING Secondary Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING Outlet Node Name,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING Outlet Node Name,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING Fan Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING Fan Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING Reheat Coil Air In Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING Reheat Coil Air In Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING Fan,Fan Air Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Core_bottom PIUHEATING Fan,Fan Electricity Rate,timestep; !- HVAC Average [W] +Output:Variable,Core_bottom PIUHEATING Fan,Fan Rise in Air Temperature,timestep; !- HVAC Average [deltaC] +Output:Variable,Core_bottom PIUHEATING Fan,Fan Heat Gain to Air,timestep; !- HVAC Average [W] + +Output:Variable,Core_bottom,Zone Air System Sensible Heating Rate,timestep; !- HVAC Average [W] +Output:Variable,Core_bottom,Zone Air System Sensible Cooling Rate,timestep; !- HVAC Average [W] + + +Output:Variable,Core_bottom,Zone Thermostat Heating Setpoint Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom,Zone Thermostat Cooling Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Core_bottom PIUHEATING CW Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING CW Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_bottom PIUHEATING CW Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_bottom PIUHEATING CW Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,*,Plant Supply Side Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Plant Supply Side Outlet Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Core_mid PIUHEATING Primary Inlet Node Name,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING Primary Inlet Node Name,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING Secondary Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING Secondary Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING Outlet Node Name,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING Outlet Node Name,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING Fan Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING Fan Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING Reheat Coil Air In Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING Reheat Coil Air In Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING Fan,Fan Air Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Core_mid PIUHEATING Fan,Fan Electricity Rate,timestep; !- HVAC Average [W] +Output:Variable,Core_mid PIUHEATING Fan,Fan Rise in Air Temperature,timestep; !- HVAC Average [deltaC] +Output:Variable,Core_mid PIUHEATING Fan,Fan Heat Gain to Air,timestep; !- HVAC Average [W] + + +Output:Variable,Core_mid,Zone Thermostat Heating Setpoint Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid,Zone Thermostat Cooling Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Core_mid PIUHEATING CW Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING CW Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Core_mid PIUHEATING CW Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Core_mid PIUHEATING CW Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,*,Air System Outdoor Air Flow Fraction,timestep; !- HVAC Average [] +Output:Variable,*,Air System Outdoor Air Minimum Flow Fraction,timestep; !- HVAC Average [] +Output:Variable,*,Air System Outdoor Air Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,*,Air System Mixed Air Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,*,Schedule Value,timestep; !- Zone Average [] + +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Wetbulb Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Dewpoint Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Humidity Ratio,timestep; !- HVAC Average [kgWater/kgDryAir] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Wetbulb Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Dewpoint Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Humidity Ratio,timestep; !- HVAC Average [kgWater/kgDryAir] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,*,Plant System Cycle On Off Status,timestep; !- HVAC Average [] +Output:Variable,*,Plant Supply Side Cooling Demand Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Plant Supply Side Heating Demand Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Plant Supply Side Inlet Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,*,Plant Supply Side Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Plant Supply Side Outlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Plant Supply Side Not Distributed Demand Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Plant Supply Side Unmet Demand Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Debug Plant Loop Bypass Fraction,timestep; !- HVAC Average [] +Output:Variable,*,Debug Plant Last Simulated Loop Side,timestep; !- HVAC Average [] +Output:Variable,*,Plant Solver Sub Iteration Count,timestep; !- HVAC Sum [] +Output:Variable,*,Plant Solver Half Loop Calls Count,timestep; !- HVAC Sum [] + +Output:Variable,*,Heating Coil Heating Rate,timestep; !- HVAC Average [W] + +Output:Variable,Cooling Side WSHP Load Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Cooling Side WSHP Load Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + + PlantEquipmentOperation:ChillerHeaterChangeover, + Two AWHP Operation Scheme , !- Name + 6.6 , !- Primary Cooling Plant Setpoint Temperature + 13.7, !- Secondary Distribution Cooling Plant Setpoint Temperature + 59.8 , !- Primary Heating Plant Setpoint at Outdoor High Temperature + 10.0, !- Outdoor High Temperature + 37.6, !- Primary Heating Plant Setpoint at Outdoor Low Temperature + -18.0, !- Outdoor Low Temperature + 45.0, !- Secondary Distribution Heating Plant Setpoint Temperature + All Conditioned Zones, !- Zone Load Polling ZoneList Name + Two AWHP Cooling Operation Scheme, !- Cooling Only Load Plant Equipment Operation Cooling Load Name + Two AWHP Heating Operation Scheme, !- Heating Only Load Plant Equipment Operation Heating Load Name + One AWHP Cooling Operation Scheme, !- Simultaneous Cooling And Heating Plant Equipment Operation Cooling Load Name + One AWHP Heating Operation Scheme, !- Simultaneous Cooling And Heating Plant Equipment Operation Heating Load Name + Dedicated HR Cooling Side WSHP, !- Dedicated Chilled Water Return Recovery HeatPump Name + Dedicated HR Heating Side WSHP; !- Dedicated Hot Water Return Recovery HeatPump Name + + PlantEquipmentOperation:CoolingLoad, + Two AWHP Cooling Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 50000, !- Load Range 1 Upper Limit {W} + One AWHP Cooling Equipment List, !- Range 1 Equipment List Name + 50000, !- Load Range 2 Lower Limit {W} + 10000000000000, !- Load Range 2 Upper Limit {W} + Two AWHP Cooling Equipment List; !- Range 2 Equipment List Name + + + PlantEquipmentList, + Two AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side, !- Equipment 1 Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 2 Object Type + AWHP_2 Cooling Side; !- Equipment 2 Name + + PlantEquipmentOperation:HeatingLoad, + Two AWHP Heating Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 50000, !- Load Range 1 Upper Limit {W} + One AWHP Heating Equipment List, !- Range 1 Equipment List Name + 100000, !- Load Range 2 Lower Limit {W} + 10000000000000, !- Load Range 2 Upper Limit {W} + Two AWHP Heating Equipment List; !- Range 2 Equipment List Name + + PlantEquipmentList, + Two AWHP Heating Equipment List, !- Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 1 Object Type + AWHP_1 Heating Side, !- Equipment 1 Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 2 Object Type + AWHP_2 Heating Side; !- Equipment 2 Name + + + PlantEquipmentOperation:CoolingLoad, + One AWHP Cooling Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 10000000000000000, !- Load Range 1 Upper Limit {W} + One AWHP Cooling Equipment List; !- Range 1 Equipment List Name + + + PlantEquipmentList, + One AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side; !- Equipment 1 Name + + PlantEquipmentOperation:HeatingLoad, + One AWHP Heating Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 10000000000000000, !- Load Range 1 Upper Limit {W} + One AWHP Heating Equipment List; !- Range 1 Equipment List Name + + + PlantEquipmentList, + One AWHP Heating Equipment List, !- Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 1 Object Type + AWHP_2 Heating Side; !- Equipment 1 Name + + + ZoneList, + All Conditioned Zones, + Basement, + Core_bottom, + Core_mid, + Core_top, + Perimeter_bot_ZN_1, + Perimeter_bot_ZN_2, + Perimeter_bot_ZN_3, + Perimeter_bot_ZN_4, + Perimeter_mid_ZN_1, + Perimeter_mid_ZN_2, + Perimeter_mid_ZN_3, + Perimeter_mid_ZN_4, + Perimeter_top_ZN_1, + Perimeter_top_ZN_2, + Perimeter_top_ZN_3, + Perimeter_top_ZN_4; + + + Output:Variable,*,Fluid Heat Exchanger Heat Transfer Rate,timestep; !- HVAC Average [W] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Mass Flow Rate,timestep; !- HVAC Average [kg/s] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Inlet Temperature,timestep; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Outlet Temperature,timestep; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Mass Flow Rate,timestep; !- HVAC Average [kg/s] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Inlet Temperature,timestep; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Outlet Temperature,timestep; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Operation Status,timestep; !- HVAC Average [] + Output:Variable,*,Fluid Heat Exchanger Effectiveness,timestep; !- HVAC Average [] + +Output:Variable,*,Supervisory Plant Heat Pump Operation Mode,timestep; !- HVAC Average [unknown] +Output:Variable,*,Supervisory Plant Operation Polled Building Heating Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Operation Polled Building Cooling Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Heat Recovery Operation Mode,timestep; !- HVAC Average [unknown] +Output:Variable,*,Supervisory Plant Operation Primary Plant Heating Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Operation Primary Plant Cooling Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Operation Secondary Plant Heating Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Operation Secondary Plant Cooling Load,timestep; !- HVAC Average [W] +Output:Variable,*,Supervisory Plant Auxiliary Boiler Mode,timestep; !- HVAC Average [unknown] + +Output:Variable,*,Chilled Water Thermal Storage Tank Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Chilled Water Thermal Storage Tank Heat Gain Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Chilled Water Thermal Storage Use Side Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,*,Chilled Water Thermal Storage Use Side Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Chilled Water Thermal Storage Use Side Outlet Temperature,timestep; !- HVAC Average [C] + +Output:Variable,*,Heat Pump Part Load Ratio,timestep; !- HVAC Average [] +Output:Variable,*,Heat Pump Cycling Ratio,timestep; !- HVAC Average [] +Output:Variable,*,Heat Pump Load Side Heat Transfer Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Heat Pump Load Side Heat Transfer Energy,timestep; !- HVAC Sum [J] +Output:Variable,*,Heat Pump Source Side Heat Transfer Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Heat Pump Source Side Heat Transfer Energy,timestep; !- HVAC Sum [J] +Output:Variable,*,Heat Pump Load Side Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Heat Pump Load Side Outlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Heat Pump Source Side Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Heat Pump Source Side Outlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Heat Pump Electricity Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Heat Pump Electricity Energy,timestep; !- HVAC Sum [J] +Output:Variable,*,Heat Pump Load Side Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,*,Heat Pump Source Side Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,*,Boiler Heating Rate,timestep; !- HVAC Average [W] +Output:Variable,*,Boiler Inlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Boiler Outlet Temperature,timestep; !- HVAC Average [C] +Output:Variable,*,Boiler Mass Flow Rate,timestep; +Output:Variable,*,Boiler Mass Flow Rate,timestep; + +Output:Variable,AWHP_2 Heating Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_2 Heating Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,AWHP_2 Heating Side Outlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_2 Heating Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,AWHP_2 Heating Side Outlet,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,AWHP_1 Heating Side Outlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_1 Heating Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,AWHP_1 Heating Side Outlet,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,AWHP_1 Heating Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_1 Heating Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,AWHP_2 Cooling Side Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_2 Cooling Side Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,AWHP_2 Cooling Side Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,AWHP_2 Cooling Side Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_2 Cooling Side Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,AWHP_1 Cooling Side Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_1 Cooling Side Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,AWHP_1 Cooling Side Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,AWHP_1 Cooling Side Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,AWHP_1 Cooling Side Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Cooling Side WSHP Load Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Cooling Side WSHP Load Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable, Cooling Side WSHP Load Side Outlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable, Cooling Side WSHP Load Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable, Cooling Side WSHP Load Side Outlet,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Cooling Side WSHP Source Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Cooling Side WSHP Source Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Cooling Side WSHP Source Side Outlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Cooling Side WSHP Source Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Cooling Side WSHP Source Side Outlet,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Heating Side WSHP Load Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Heating Side WSHP Load Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Heating Side WSHP Load Side Outlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Heating Side WSHP Load Side Outlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Heating Side WSHP Load Side Outlet,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Heating Side WSHP Source Side Inlet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Heating Side WSHP Source Side Inlet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Heating Side WSHP Source Side Oulet,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Heating Side WSHP Source Side Oulet,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Secondary HW Aux Boiler Inlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Secondary HW Aux Boiler Inlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] + +Output:Variable,Secondary Hot Supply Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Secondary Hot Supply Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Secondary Hot Supply Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,HeatSys1 Supply Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,HeatSys1 Supply Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,HeatSys1 Supply Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,Secondary CW Supply Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,Secondary CW Supply Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,Secondary CW Supply Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,CoolSys1 Supply Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,CoolSys1 Supply Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,CoolSys1 Supply Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,VAV_1 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_1 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,VAV_1 Supply Equipment Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,VAV_2 Supply Equipment Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,VAV_3_OA-VAV_3_CoolCNode,System Node Temperature,timestep; !- HVAC Average [C] + +Output:Variable,VAV_1_CoolCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_2_CoolCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_3_CoolCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_5_CoolCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; + +Output:Variable,VAV_1_HeatCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_2_HeatCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_3_HeatCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; +Output:Variable,VAV_5_HeatCDemand Inlet Node,System Node Standard Density Volume Flow Rate,timestep; + +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,VAV_3 Supply Equipment Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,VAV_5 Supply Equipment Outlet Node,System Node Temperature,timestep; !- HVAC Average [C] +Output:Variable,VAV_5 Supply Equipment Outlet Node,System Node Mass Flow Rate,timestep; !- HVAC Average [kg/s] +Output:Variable,VAV_5 Supply Equipment Outlet Node,System Node Setpoint Temperature,timestep; !- HVAC Average [C] + +Output:Variable,*,Site Outdoor Air Drybulb Temperature,timestep; !- Zone Average [C] + +Output:Variable,*,Availability Manager Night Cycle Control Status,timestep; !- HVAC Average [] + +Output:Variable,*,Zone Heating Setpoint Not Met While Occupied Time,timestep; !- Zone Sum [hr] +Output:Variable,*,Zone Cooling Setpoint Not Met While Occupied Time,timestep; !- Zone Sum [hr] diff --git a/testfiles/PlantLoopHeatPump_EIR_LargeOffice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam.idf b/testfiles/PlantLoopHeatPump_EIR_LargeOffice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam.idf new file mode 100644 index 00000000000..0530ea6024c --- /dev/null +++ b/testfiles/PlantLoopHeatPump_EIR_LargeOffice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam.idf @@ -0,0 +1,10360 @@ +!-PlantLoopHeatPump_EIR_LargeOffice-2-AWHP-AuxBoiler-Pri-Sec-4PipeBeam +! +! - testfile derived from FourPipeBeamLargeOffice.idf +! - Demonstrates supervisory control of air source heat pump plants serving chilled water and hot water plants +! - + +! Large office, new construction 90.1-2004 +! ASHRAE Standards 90.1-2004 and 62-1999 +! +! Description: 12 story plus basement, office building derived from DOE reference building models and adapted to demonstrate four pipe beam model. +! Form: Area = 46,320 m2 (498,588 ft2); Number of Stories = 12; Shape = rectangle, Aspect ratio = 1.5 +! Envelope: Envelope thermal properties vary with climate according to ASHRAE Standard 90.1-2004. +! Opaque constructions: mass walls; built-up flat roof (insulation above deck); slab-on-grade floor +! Windows: window-to-wall ratio = 38.0%, equal distribution of windows +! Infiltration in perimeter zones only +! = 0.4 cfm/ft2 above grade wall area at 0.3 in wc (75 Pa) adjusted to 0.016 in wc (4 Pa). +! 25% of full value when ventilation system on. +! HVAC: 2 air-cooled chiller heaters (HeatPump:PlantLoop:EIR), Four pipe Chilled Beam air terminal units and plenum zones +! primary secondary chilled water and hot water systems +! Basement left on its own VAV +! Economizer per 90.1-2004 +! Chiller part load curve corrected from original +! +! Int. gains: lights = 10.76 W/m2 (1.0 W/ft2) (building area method); +! elec. plug loads = 10.76 W/m2 (1.0 W/ft2) +! gas plug load = 0 W/m2 (0 W/ft2) +! people = 2,397 total, 5.38/100 m2 (5.0/1000 ft2); basement 2.69/100 m2 (2.5/1000 ft2) +! elevators = 12 @ 25 HP each, 91% motor efficiency, motor heat exhausted directly +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Zonal Equipment: None +! Air Primary Loops: Four Pipe CV Beam Air Terminal units. +! Plant Loops: SWHSys1, HeatSys1, CoolSys1, Secondary Chilled Water Loop, secondary hot water loop +! System Equipment Autosize: Yes +! Purchased Cooling: None +! Purchased Heating: None +! Coils: Coil:Cooling:Water; Coil:Heating:Water +! Pumps: Yes +! Boilers: Boiler:HotWater (gas-fired) +! Chillers: HeatPump:PlantLoop:EIR:Cooling, HeatPump:PlantLoop:EIR:Heating +! Number of Zones: 19 + + Version,23.2; + + SimulationControl, + YES, !- Do Zone Sizing Calculation + YES, !- Do System Sizing Calculation + YES, !- Do Plant Sizing Calculation + no, !- Run Simulation for Sizing Periods + yes, !- Run Simulation for Weather File Run Periods + no, !- Do HVAC Sizing Simulation for Sizing Periods + 2; !- Maximum Number of HVAC Sizing Simulation Passes + + Building, + Ref Bldg Large Office New2004_v1.3_5.0, !- Name + 0.0000, !- North Axis {deg} + City, !- Terrain + 0.0400, !- Loads Convergence Tolerance Value {W} + 0.2000, !- Temperature Convergence Tolerance Value {deltaC} + FullInteriorAndExterior, !- Solar Distribution + 25, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + RunPeriod, + annual, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 12, !- End Month + 31, !- End Day of Month + , !- End Year + Sunday, !- Day of Week for Start Day + No, !- Use Weather File Holidays and Special Days + No, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + +! ***HOLIDAYS & DAYLIGHT SAVINGS*** + + RunPeriodControl:DaylightSavingTime, + 2nd Sunday in March, !- Start Date + 1st Sunday in November; !- End Date + + RunPeriodControl:SpecialDays, + New Years Day, !- Name + January 1, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Veterans Day, !- Name + November 11, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Christmas, !- Name + December 25, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Independence Day, !- Name + July 4, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + MLK Day, !- Name + 3rd Monday in January, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Presidents Day, !- Name + 3rd Monday in February, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Memorial Day, !- Name + Last Monday in May, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Labor Day, !- Name + 1st Monday in September, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Columbus Day, !- Name + 2nd Monday in October, !- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + + RunPeriodControl:SpecialDays, + Thanksgiving, !- Name + 4th Thursday in November,!- Start Date + 1, !- Duration {days} + Holiday; !- Special Day Type + +! ***SCHEDULE TYPES*** + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + Humidity, !- Name + 10, !- Lower Limit Value + 90, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Number; !- Name + +! ***ALWAYS ON SCHEDULE*** + + Schedule:Compact, + ALWAYS_ON, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1; !- Field 3 + +! ***MISC SIMULATION PARAMETERS*** + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + HeatBalanceAlgorithm,ConductionTransferFunction,200.0000; + + ZoneAirHeatBalanceAlgorithm, + AnalyticalSolution; !- Algorithm + + Sizing:Parameters, + 1.33, !- Heating Sizing Factor + 1.33, !- Cooling Sizing Factor + 6; !- Timesteps in Averaging Window + + ConvergenceLimits, + 2, !- Minimum System Timestep {minutes} + 25, !- Maximum HVAC Iterations + 4, !- Minimum Plant Iterations + 12; !- Maximum Plant Iterations + + ShadowCalculation, + PolygonClipping, !- Shading Calculation Method + Periodic, !- Shading Calculation Update Frequency Method + 7, !- Shading Calculation Update Frequency + 15000; !- Maximum Figures in Shadow Overlap Calculations + + Timestep,4; + +! WeatherFileName=USA_IL_Chicago-OHare_TMY2.epw + + Site:Location, + USA IL-CHICAGO-OHARE, !- Name + 41.77, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190; !- Elevation {m} + +! CHICAGO_IL_USA Annual Heating 99.6%, MaxDB=-20.6°C + + SizingPeriod:DesignDay, + CHICAGO Ann Htg 99.6% Condns DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -20.6, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -20.6, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling (WB=>MDB) .4%, MDB=31.2°C WB=25.5°C + + SizingPeriod:DesignDay, + CHICAGO Ann Clg .4% Condns WB=>MDB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.2, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 25.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.00; !- Sky Clearness + + Site:WaterMainsTemperature, + CORRELATION, !- Calculation Method + , !- Temperature Schedule Name + 9.69, !- Annual Average Outdoor Air Temperature {C} + 28.10; !- Maximum Difference In Monthly Average Outdoor Air Temperatures {deltaC} + + Site:GroundTemperature:BuildingSurface,19.527,19.502,19.536,19.598,20.002,21.640,22.225,22.375,21.449,20.121,19.802,19.633; + +! ***OPAQUE CONSTRUCTIONS AND MATERIALS*** +! Exterior Walls + + Construction, + Mass Non-res Ext Wall, !- Name + 1IN Stucco, !- Outside Layer + 8IN Concrete HW, !- Layer 2 + Mass NonRes Wall Insulation, !- Layer 3 + 1/2IN Gypsum; !- Layer 4 + + Material, + Mass NonRes Wall Insulation, !- Name + MediumRough, !- Roughness + 0.0495494599433393, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Roof + + Construction, + IEAD Non-res Roof, !- Name + Roof Membrane, !- Outside Layer + IEAD NonRes Roof Insulation, !- Layer 2 + Metal Decking; !- Layer 3 + + Material, + IEAD NonRes Roof Insulation, !- Name + MediumRough, !- Roughness + 0.127338688569477, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Slab on grade, unheated + + Construction, + ext-slab, !- Name + HW CONCRETE, !- Outside Layer + CP02 CARPET PAD; !- Layer 2 + +! Interior Walls + + Construction, + int-walls, !- Name + 1/2IN Gypsum, !- Outside Layer + 1/2IN Gypsum; !- Layer 2 + +! Interior Floors + + Construction, + INT-FLOOR-TOPSIDE, !- Name + MAT-CC05 4 HW CONCRETE, !- Outside Layer + CP02 CARPET PAD; !- Layer 2 + + Construction, + INT-FLOOR-UNDERSIDE, !- Name + CP02 CARPET PAD, !- Outside Layer + MAT-CC05 4 HW CONCRETE; !- Layer 2 + + Construction, + Underground Wall Non-res,!- Name + 8IN Concrete HW, !- Outside Layer + UGWall NonRes Insulation;!- Layer 2 + + Material, + UGWall NonRes Insulation,!- Name + MediumRough, !- Roughness + 0.0001, !- Thickness {m} + 0.049, !- Conductivity {W/m-K} + 265.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! ***WINDOW/DOOR CONSTRUCTIONS AND MATERIALS*** + + Construction, + Window Non-res Fixed, !- Name + NonRes Fixed Assembly Window; !- Outside Layer + + WindowMaterial:SimpleGlazingSystem, + NonRes Fixed Assembly Window, !- Name + 3.23646, !- U-Factor {W/m2-K} + 0.39; !- Solar Heat Gain Coefficient + +! ***COMMON CONSTRUCTIONS AND MATERIALS*** + + Construction, + DropCeiling, !- Name + Std AC02; !- Outside Layer + + Construction, + InteriorFurnishings, !- Name + Std Wood 6inch; !- Outside Layer + + Material, + Std Wood 6inch, !- Name + MediumSmooth, !- Roughness + 0.15, !- Thickness {m} + 0.12, !- Conductivity {W/m-K} + 540.0000, !- Density {kg/m3} + 1210, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + Wood Siding, !- Name + MediumSmooth, !- Roughness + 0.0100, !- Thickness {m} + 0.1100, !- Conductivity {W/m-K} + 544.6200, !- Density {kg/m3} + 1210.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7800, !- Solar Absorptance + 0.7800; !- Visible Absorptance + + Material, + 1/2IN Gypsum, !- Name + Smooth, !- Roughness + 0.0127, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 784.9000, !- Density {kg/m3} + 830.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 1IN Stucco, !- Name + Smooth, !- Roughness + 0.0253, !- Thickness {m} + 0.6918, !- Conductivity {W/m-K} + 1858.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.9200, !- Solar Absorptance + 0.9200; !- Visible Absorptance + + Material, + 8IN CONCRETE HW, !- Name + Rough, !- Roughness + 0.2032, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Siding, !- Name + Smooth, !- Roughness + 0.0015, !- Thickness {m} + 44.9600, !- Conductivity {W/m-K} + 7688.8600, !- Density {kg/m3} + 410.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.2000, !- Solar Absorptance + 0.2000; !- Visible Absorptance + + Material, + HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material:NoMass, + CP02 CARPET PAD, !- Name + VeryRough, !- Roughness + 0.2165, !- Thermal Resistance {m2-K/W} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.8000; !- Visible Absorptance + + Material, + Roof Membrane, !- Name + VeryRough, !- Roughness + 0.0095, !- Thickness {m} + 0.1600, !- Conductivity {W/m-K} + 1121.2900, !- Density {kg/m3} + 1460.0000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + + Material, + Metal Decking, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + Metal Roofing, !- Name + MediumSmooth, !- Roughness + 0.0015, !- Thickness {m} + 45.0060, !- Conductivity {W/m-K} + 7680.0000, !- Density {kg/m3} + 418.4000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.3000; !- Visible Absorptance + + Material, + MAT-CC05 4 HW CONCRETE, !- Name + Rough, !- Roughness + 0.1016, !- Thickness {m} + 1.3110, !- Conductivity {W/m-K} + 2240.0000, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000, !- Thermal Absorptance + 0.7000, !- Solar Absorptance + 0.7000; !- Visible Absorptance + +! Acoustic tile for drop ceiling + + Material, + Std AC02, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 5.7000000E-02, !- Conductivity {W/m-K} + 288.0000, !- Density {kg/m3} + 1339.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.2000000; !- Visible Absorptance + + Material:NoMass, + MAT-AIR-WALL, !- Name + Rough, !- Roughness + 0.2079491, !- Thermal Resistance {m2-K/W} + 0.9, !- Thermal Absorptance + 0.7; !- Solar Absorptance + +! ZONE LIST: +! Basement +! Core_bottom +! Core_mid (mult=10) +! Core_top +! GroundFloor_Plenum +! MidFloor_Plenum (mult=10) +! Perimeter_bot_ZN_1 +! Perimeter_bot_ZN_2 +! Perimeter_bot_ZN_3 +! Perimeter_bot_ZN_4 +! Perimeter_mid_ZN_1 (mult=10) +! Perimeter_mid_ZN_2 (mult=10) +! Perimeter_mid_ZN_3 (mult=10) +! Perimeter_mid_ZN_4 (mult=10) +! Perimeter_top_ZN_1 +! Perimeter_top_ZN_2 +! Perimeter_top_ZN_3 +! Perimeter_top_ZN_4 +! TopFloor_Plenum +! ***ZONES*** + + Zone, + Basement, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0400, !- Y Origin {m} + 0.2000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_bottom, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_mid, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Core_top, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + GroundFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + + Zone, + MidFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_bot_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_mid_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 10, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_1, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_2, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_3, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + Perimeter_top_ZN_4, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + Yes; !- Part of Total Floor Area + + Zone, + TopFloor_Plenum, !- Name + 0.0000, !- Direction of Relative North {deg} + 0.0000, !- X Origin {m} + 0.0000, !- Y Origin {m} + 0.0000, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + , !- Ceiling Height {m} + , !- Volume {m3} + autocalculate, !- Floor Area {m2} + , !- Zone Inside Convection Algorithm + , !- Zone Outside Convection Algorithm + No; !- Part of Total Floor Area + +! ***WALLS*** + + BuildingSurface:Detailed, + Basement_Ceiling_1, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_2, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_3, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_4, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Ceiling_5, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Floor, !- Name + Floor, !- Surface Type + ext-slab, !- Construction Name + Basement, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,-2.4390; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_East, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_North, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_South, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Basement_Wall_West, !- Name + Wall, !- Surface Type + Underground Wall Non-res,!- Construction Name + Basement, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,-2.4390, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,-2.4390, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Building_Roof, !- Name + Roof, !- Surface Type + IEAD Non-res Roof, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,47.5584, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,47.5584, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_bot_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_bottom, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_mid_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_mid, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_5, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Floor, !- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Floor, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_North,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_South,!- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Core_top_ZN_5_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Core_top, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Ceiling, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,3.9632, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,3.9632, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + GroundFloor_Plenum_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + GroundFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,3.9632, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,3.9632; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Ceiling, !- Name + Ceiling, !- Surface Type + INT-FLOOR-UNDERSIDE, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,23.7792, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,23.7792, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + MidFloor_Plenum_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + MidFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,23.7792, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,23.7792; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + GroundFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Basement_Ceiling_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,0.0000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_bot_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_bot_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_bot_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_bot_ZN_4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,2.7440, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,0.0000, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.0000, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.7440; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + MidFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,19.8160; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_mid_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_mid_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_mid_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_mid_ZN_4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,22.5600, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,19.8160, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,19.8160, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.5600; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_South,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_1_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_South, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_2, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_2_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_East, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_3, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_North,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_3_Wall_West, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_3, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Wall_North, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Ceiling, !- Name + Ceiling, !- Surface Type + DropCeiling, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + TopFloor_Plenum_Floor_4, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Floor,!- Name + Floor, !- Surface Type + INT-FLOOR-TOPSIDE, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Floor,!- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,43.5952; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_East, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_North, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 4.5732,44.1650,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_South, !- Name + Wall, !- Surface Type + int-walls, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Wall_West, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Perimeter_top_ZN_4_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + Perimeter_top_ZN_4, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,43.5952, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,43.5952, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_1, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_1_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 68.5340,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_2, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_2_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_3, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_3_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,44.1650,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_4, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Perimeter_top_ZN_4_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Floor_5, !- Name + Floor, !- Surface Type + DropCeiling, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Core_top_ZN_5_Ceiling, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 4.5732,44.1650,46.3392, !- X,Y,Z ==> Vertex 1 {m} + 68.5340,44.1650,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 68.5340,4.5732,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 4.5732,4.5732,46.3392; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_East, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7381,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_North, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,0.0000,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_South, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 73.1072,48.7381,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,47.5584; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TopFloor_Plenum_Wall_West, !- Name + Wall, !- Surface Type + Mass Non-res Ext Wall, !- Construction Name + TopFloor_Plenum, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + AutoCalculate, !- View Factor to Ground + 4, !- Number of Vertices + 0.0000,48.7381,47.5584, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7381,46.3392, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,46.3392, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,47.5584; !- X,Y,Z ==> Vertex 4 {m} + +! ***WINDOWS*** + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_bot_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_bot_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,2.5000, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,0.9146, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,0.9146, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,2.5000; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_mid_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_mid_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,22.3160, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,20.7306, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,20.7306, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,22.3160; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_1_Wall_South_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_1_Wall_South, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,0.0000,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,0.0000,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 73.1070,0.0000,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 73.1070,0.0000,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_2_Wall_East_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_2_Wall_East, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1072,0.0000,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 73.1072,0.0000,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 73.1072,48.7380,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 73.1072,48.7380,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_3_Wall_North_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_3_Wall_North, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 73.1070,48.7381,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 73.1070,48.7381,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,48.7381,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,48.7381,46.0952; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + Perimeter_top_ZN_4_Wall_West_Window, !- Name + Window, !- Surface Type + Window Non-res Fixed, !- Construction Name + Perimeter_top_ZN_4_Wall_West, !- Building Surface Name + , !- Outside Boundary Condition Object + AutoCalculate, !- View Factor to Ground + , !- Frame and Divider Name + 1.0000, !- Multiplier + 4, !- Number of Vertices + 0.0000,48.7380,46.0952, !- X,Y,Z ==> Vertex 1 {m} + 0.0000,48.7380,44.5098, !- X,Y,Z ==> Vertex 2 {m} + 0.0000,0.0000,44.5098, !- X,Y,Z ==> Vertex 3 {m} + 0.0000,0.0000,46.0952; !- X,Y,Z ==> Vertex 4 {m} + +! ***GEOMETRY RULES*** + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + Counterclockwise, !- Vertex Entry Direction + Relative, !- Coordinate System + Relative; !- Daylighting Reference Point Coordinate System + +! ***PEOPLE*** + + People, + Basement People, !- Name + Basement, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 37.16, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_bottom People, !- Name + Core_bottom, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_mid People, !- Name + Core_mid, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Core_top People, !- Name + Core_top, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_1 People, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_2 People, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_3 People, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_bot_ZN_4 People, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_1 People, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_2 People, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_3 People, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_mid_ZN_4 People, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_1 People, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_2 People, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_3 People, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + + People, + Perimeter_top_ZN_4 People, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_OCC_SCH, !- Number of People Schedule Name + Area/Person, !- Number of People Calculation Method + , !- Number of People + , !- People per Floor Area {person/m2} + 18.58, !- Floor Area per Person {m2/person} + 0.3000, !- Fraction Radiant + AUTOCALCULATE, !- Sensible Heat Fraction + ACTIVITY_SCH, !- Activity Level Schedule Name + , !- Carbon Dioxide Generation Rate {m3/s-W} + No, !- Enable ASHRAE 55 Comfort Warnings + ZoneAveraged, !- Mean Radiant Temperature Calculation Type + , !- Surface Name/Angle Factor List Name + WORK_EFF_SCH, !- Work Efficiency Schedule Name + ClothingInsulationSchedule, !- Clothing Insulation Calculation Method + , !- Clothing Insulation Calculation Method Schedule Name + CLOTHING_SCH, !- Clothing Insulation Schedule Name + AIR_VELO_SCH, !- Air Velocity Schedule Name + FANGER; !- Thermal Comfort Model 1 Type + +! ***LIGHTS*** + + Lights, + Basement_Lights, !- Name + Basement, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_bottom_Lights, !- Name + Core_bottom, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_mid_Lights, !- Name + Core_mid, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Core_top_Lights, !- Name + Core_top, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_1_Lights, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_2_Lights, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_3_Lights, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_bot_ZN_4_Lights, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_1_Lights, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_2_Lights, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_3_Lights, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_mid_ZN_4_Lights, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_1_Lights, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_2_Lights, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_3_Lights, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + + Lights, + Perimeter_top_ZN_4_Lights, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_LIGHT_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Lighting Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Return Air Fraction + 0.7000, !- Fraction Radiant + 0.2000, !- Fraction Visible + 1.0000, !- Fraction Replaceable + General, !- End-Use Subcategory + No; !- Return Air Fraction Calculated from Plenum Temperature + +! ***EQUIPMENT GAINS*** + + ElectricEquipment, + Basement_PlugMisc_Equip, !- Name + Basement, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_bottom_PlugMisc_Equip, !- Name + Core_bottom, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_mid_PlugMisc_Equip, !- Name + Core_mid, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Core_top_PlugMisc_Equip, !- Name + Core_top, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_1_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_2_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_3_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_bot_ZN_4_PlugMisc_Equip, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_1_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_2_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_3_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_mid_ZN_4_PlugMisc_Equip, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_1_PlugMisc_Equip, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_2_PlugMisc_Equip, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_3_PlugMisc_Equip, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + + ElectricEquipment, + Perimeter_top_ZN_4_PlugMisc_Equip, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + BLDG_EQUIP_SCH, !- Schedule Name + Watts/Area, !- Design Level Calculation Method + , !- Design Level {W} + 10.76, !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0000, !- Fraction Latent + 0.5000, !- Fraction Radiant + 0.0000, !- Fraction Lost + General; !- End-Use Subcategory + +! ***EXTERIOR LOADS*** + + Exterior:Lights, + Exterior Facade Lighting,!- Name + ALWAYS_ON, !- Schedule Name + 51262, !- Design Level {W} + AstronomicalClock, !- Control Option + Exterior Facade Lighting;!- End-Use Subcategory + + Exterior:FuelEquipment, + Elevators, !- Name + Electricity, !- Fuel Use Type + BLDG_ELEVATORS, !- Schedule Name + 244443.956043956, !- Design Level {W} + Elevators; !- End-Use Subcategory + +! ***INFILTRATION*** + + ZoneInfiltration:DesignFlowRate, + GroundFloor_Plenum_Infiltration, !- Name + GroundFloor_Plenum, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + MidFloor_Plenum_Infiltration, !- Name + MidFloor_Plenum, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_1_Infiltration, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_2_Infiltration, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_3_Infiltration, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_bot_ZN_4_Infiltration, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_1_Infiltration, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_2_Infiltration, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_3_Infiltration, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_mid_ZN_4_Infiltration, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_1_Infiltration, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_2_Infiltration, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_3_Infiltration, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + Perimeter_top_ZN_4_Infiltration, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + TopFloor_Plenum_Infiltration, !- Name + TopFloor_Plenum, !- Zone or ZoneList or Space or SpaceList Name + INFIL_QUARTER_ON_SCH, !- Schedule Name + Flow/ExteriorArea, !- Design Flow Rate Calculation Method + , !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + 0.000302, !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 1.0000, !- Constant Term Coefficient + 0.0000, !- Temperature Term Coefficient + 0.0000, !- Velocity Term Coefficient + 0.0000; !- Velocity Squared Term Coefficient + +! ***INTERNAL MASS*** + + InternalMass, + Basement Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Basement, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 7126.2120; !- Surface Area {m2} + + InternalMass, + Core_bottom Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_bottom, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Core_mid Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_mid, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Core_top Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Core_top, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 5064.6464; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_bot_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_mid_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_1 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8394; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_2 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_3 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 626.8257; !- Surface Area {m2} + + InternalMass, + Perimeter_top_ZN_4 Internal Mass, !- Name + InteriorFurnishings, !- Construction Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + , !- Space or SpaceList Name + 403.9503; !- Surface Area {m2} + +! ***INTERNAL GAINS SCHEDULES*** + + Schedule:Compact, + BLDG_ELEVATORS, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 04:00,0.05, !- Field 3 + Until: 05:00,0.10, !- Field 5 + Until: 06:00,0.20, !- Field 7 + Until: 07:00,0.40, !- Field 9 + Until: 09:00,0.50, !- Field 11 + Until: 10:00,0.35, !- Field 13 + Until: 16:00,0.15, !- Field 15 + Until: 17:00,0.35, !- Field 17 + Until: 19:00,0.50, !- Field 19 + Until: 21:00,0.40, !- Field 21 + Until: 22:00,0.30, !- Field 23 + Until: 23:00,0.20, !- Field 25 + Until: 24:00,0.10; !- Field 27 + + Schedule:Compact, + INFIL_QUARTER_ON_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,1.0, !- Field 3 + Until: 22:00,0.25, !- Field 5 + Until: 24:00,1.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 06:00,1.0, !- Field 10 + Until: 18:00,0.25, !- Field 12 + Until: 24:00,1.0, !- Field 14 + For: Sunday Holidays AllOtherDays, !- Field 16 + Until: 24:00,1.0; !- Field 17 + + Schedule:Compact, + BLDG_OCC_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.05, !- Field 7 + For: Weekdays, !- Field 9 + Until: 06:00,0.0, !- Field 10 + Until: 07:00,0.1, !- Field 12 + Until: 08:00,0.2, !- Field 14 + Until: 12:00,0.95, !- Field 16 + Until: 13:00,0.5, !- Field 18 + Until: 17:00,0.95, !- Field 20 + Until: 18:00,0.7, !- Field 22 + Until: 20:00,0.4, !- Field 24 + Until: 22:00,0.1, !- Field 26 + Until: 24:00,0.05, !- Field 28 + For: Saturday, !- Field 30 + Until: 06:00,0.0, !- Field 31 + Until: 08:00,0.1, !- Field 33 + Until: 14:00,0.5, !- Field 35 + Until: 17:00,0.1, !- Field 37 + Until: 24:00,0.0, !- Field 39 + For: AllOtherDays, !- Field 41 + Until: 24:00,0.0; !- Field 42 + + Schedule:Compact, + BLDG_LIGHT_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 05:00,0.05, !- Field 3 + Until: 07:00,0.1, !- Field 5 + Until: 08:00,0.3, !- Field 7 + Until: 17:00,0.9, !- Field 9 + Until: 18:00,0.7, !- Field 11 + Until: 20:00,0.5, !- Field 13 + Until: 22:00,0.3, !- Field 15 + Until: 23:00,0.1, !- Field 17 + Until: 24:00,0.05, !- Field 19 + For: Saturday, !- Field 21 + Until: 06:00,0.05, !- Field 22 + Until: 08:00,0.1, !- Field 24 + Until: 14:00,0.5, !- Field 26 + Until: 17:00,0.15, !- Field 28 + Until: 24:00,0.05, !- Field 30 + For: SummerDesignDay, !- Field 32 + Until: 24:00,1.0, !- Field 33 + For: WinterDesignDay, !- Field 35 + Until: 24:00,0.0, !- Field 36 + For: AllOtherDays, !- Field 38 + Until: 24:00,0.05; !- Field 39 + + Schedule:Compact, + BLDG_EQUIP_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 08:00,0.40, !- Field 3 + Until: 12:00,0.90, !- Field 5 + Until: 13:00,0.80, !- Field 7 + Until: 17:00,0.90, !- Field 9 + Until: 18:00,0.80, !- Field 11 + Until: 20:00,0.60, !- Field 13 + Until: 22:00,0.50, !- Field 15 + Until: 24:00,0.40, !- Field 17 + For: Saturday, !- Field 19 + Until: 06:00,0.30, !- Field 20 + Until: 08:00,0.4, !- Field 22 + Until: 14:00,0.5, !- Field 24 + Until: 17:00,0.35, !- Field 26 + Until: 24:00,0.30, !- Field 28 + For: SummerDesignDay, !- Field 30 + Until: 24:00,1.0, !- Field 31 + For: WinterDesignDay, !- Field 33 + Until: 24:00,0.0, !- Field 34 + For: AllOtherDays, !- Field 36 + Until: 24:00,0.30; !- Field 37 + + Schedule:Compact, + ACTIVITY_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,120; !- Field 3 + + Schedule:Compact, + WORK_EFF_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.0; !- Field 3 + + Schedule:Compact, + AIR_VELO_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.2; !- Field 3 + + Schedule:Compact, + CLOTHING_SCH, !- Name + Any Number, !- Schedule Type Limits Name + Through: 04/30, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.0, !- Field 3 + Through: 09/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.5, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.0; !- Field 11 + +! ***HVAC EQUIPMENT*** + + Fan:ConstantVolume, + CV_1_Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + 0.65, !- Fan Total Efficiency + 700.0, !- Pressure Rise {Pa} + AUTOSIZE, !- Maximum Flow Rate {m3/s} + 0.825, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + CV_1_HeatC-CV_1_FanNode, !- Air Inlet Node Name + CV_1 Supply Equipment Outlet Node, !- Air Outlet Node Name + Beam Primary AHU Fan Energy; !- End-Use Subcategory + + Fan:ConstantVolume, + CV_2_Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + 0.65, !- Fan Total Efficiency + 700.0, !- Pressure Rise {Pa} + AUTOSIZE, !- Maximum Flow Rate {m3/s} + 0.825, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + CV_2_HeatC-CV_2_FanNode, !- Air Inlet Node Name + CV_2 Supply Equipment Outlet Node, !- Air Outlet Node Name + Beam Primary AHU Fan Energy; !- End-Use Subcategory + + Fan:ConstantVolume, + CV_3_Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + 0.65, !- Fan Total Efficiency + 700.0, !- Pressure Rise {Pa} + AUTOSIZE, !- Maximum Flow Rate {m3/s} + 0.825, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + CV_3_HeatC-CV_3_FanNode, !- Air Inlet Node Name + CV_3 Supply Equipment Outlet Node, !- Air Outlet Node Name + Beam Primary AHU Fan Energy; !- End-Use Subcategory + + Fan:VariableVolume, + VAV_5_Fan, !- Name + HVACOperationSchd, !- Availability Schedule Name + 0.5915, !- Fan Total Efficiency + 1109.648, !- Pressure Rise {Pa} + AUTOSIZE, !- Maximum Flow Rate {m3/s} + FixedFlowRate, !- Fan Power Minimum Flow Rate Input Method + , !- Fan Power Minimum Flow Fraction + 0.0000, !- Fan Power Minimum Air Flow Rate {m3/s} + 0.91, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.0407598940, !- Fan Power Coefficient 1 + 0.08804497, !- Fan Power Coefficient 2 + -0.072926120, !- Fan Power Coefficient 3 + 0.9437398230, !- Fan Power Coefficient 4 + 0, !- Fan Power Coefficient 5 + VAV_5_HeatC-VAV_5_FanNode, !- Air Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Air Outlet Node Name + Fan Energy; !- End-Use Subcategory + + Coil:Heating:Water, + Basement VAV Box Reheat Coil, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + Basement VAV Box Reheat CoilDemand Inlet Node, !- Water Inlet Node Name + Basement VAV Box Reheat CoilDemand Outlet Node, !- Water Outlet Node Name + Basement VAV Box Damper Node, !- Air Inlet Node Name + Basement VAV Box Outlet Node Name, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Heating:Water, + CV_1_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + CV_1_HeatCDemand Inlet Node, !- Water Inlet Node Name + CV_1_HeatCDemand Outlet Node, !- Water Outlet Node Name + CV_1_CoolC-CV_1_HeatCNode, !- Air Inlet Node Name + CV_1_HeatC-CV_1_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Heating:Water, + CV_2_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + CV_2_HeatCDemand Inlet Node, !- Water Inlet Node Name + CV_2_HeatCDemand Outlet Node, !- Water Outlet Node Name + CV_2_CoolC-CV_2_HeatCNode, !- Air Inlet Node Name + CV_2_HeatC-CV_2_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Heating:Water, + CV_3_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + CV_3_HeatCDemand Inlet Node, !- Water Inlet Node Name + CV_3_HeatCDemand Outlet Node, !- Water Outlet Node Name + CV_3_CoolC-CV_3_HeatCNode, !- Air Inlet Node Name + CV_3_HeatC-CV_3_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Heating:Water, + VAV_5_HeatC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- U-Factor Times Area Value {W/K} + AUTOSIZE, !- Maximum Water Flow Rate {m3/s} + VAV_5_HeatCDemand Inlet Node, !- Water Inlet Node Name + VAV_5_HeatCDemand Outlet Node, !- Water Outlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Air Inlet Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Air Outlet Node Name + UFactorTimesAreaAndDesignWaterFlowRate, !- Performance Input Method + AUTOSIZE, !- Rated Capacity {W} + 82.2, !- Rated Inlet Water Temperature {C} + 16.6, !- Rated Inlet Air Temperature {C} + 71.1, !- Rated Outlet Water Temperature {C} + 32.2, !- Rated Outlet Air Temperature {C} + ; !- Rated Ratio for Air and Water Convection + + Coil:Cooling:Water, + CV_3_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + CV_3_CoolCDemand Inlet Node, !- Water Inlet Node Name + CV_3_CoolCDemand Outlet Node, !- Water Outlet Node Name + CV_3_OA-CV_3_CoolCNode, !- Air Inlet Node Name + CV_3_CoolC-CV_3_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + CV_2_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + CV_2_CoolCDemand Inlet Node, !- Water Inlet Node Name + CV_2_CoolCDemand Outlet Node, !- Water Outlet Node Name + CV_2_OA-CV_2_CoolCNode, !- Air Inlet Node Name + CV_2_CoolC-CV_2_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + CV_1_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + CV_1_CoolCDemand Inlet Node, !- Water Inlet Node Name + CV_1_CoolCDemand Outlet Node, !- Water Outlet Node Name + CV_1_OA-CV_1_CoolCNode, !- Air Inlet Node Name + CV_1_CoolC-CV_1_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + Coil:Cooling:Water, + VAV_5_CoolC, !- Name + ALWAYS_ON, !- Availability Schedule Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + AUTOSIZE, !- Design Air Flow Rate {m3/s} + AUTOSIZE, !- Design Inlet Water Temperature {C} + AUTOSIZE, !- Design Inlet Air Temperature {C} + AUTOSIZE, !- Design Outlet Air Temperature {C} + AUTOSIZE, !- Design Inlet Air Humidity Ratio {kgWater/kgDryAir} + AUTOSIZE, !- Design Outlet Air Humidity Ratio {kgWater/kgDryAir} + VAV_5_CoolCDemand Inlet Node, !- Water Inlet Node Name + VAV_5_CoolCDemand Outlet Node, !- Water Outlet Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Air Inlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Air Outlet Node Name + SimpleAnalysis, !- Type of Analysis + CrossFlow; !- Heat Exchanger Configuration + + AirTerminal:SingleDuct:VAV:Reheat, + Basement VAV Box Component, !- Name + ALWAYS_ON, !- Availability Schedule Name + Basement VAV Box Damper Node, !- Damper Air Outlet Node Name + Basement VAV Box Inlet Node Name, !- Air Inlet Node Name + AUTOSIZE, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + Basement VAV Box Reheat Coil, !- Reheat Coil Name + AUTOSIZE, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Basement VAV Box Outlet Node Name, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Core_bottom 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Core_bottom 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Core_bottom 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Core_bottom 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Core_bottom 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Core_bottom 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Core_bottom 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Core_mid 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Core_mid 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Core_mid 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Core_mid 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Core_mid 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Core_mid 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Core_mid 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Core_top 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Core_top 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Core_top 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Core_top 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Core_top 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Core_top 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Core_top 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_bot_ZN_1 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_bot_ZN_1 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_bot_ZN_1 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_bot_ZN_1 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_bot_ZN_1 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_bot_ZN_1 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_bot_ZN_1 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_bot_ZN_2 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_bot_ZN_2 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_bot_ZN_2 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_bot_ZN_2 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_bot_ZN_2 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_bot_ZN_2 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_bot_ZN_2 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_bot_ZN_3 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_bot_ZN_3 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_bot_ZN_3 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_bot_ZN_3 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_bot_ZN_3 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_bot_ZN_3 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_bot_ZN_3 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_bot_ZN_4 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_bot_ZN_4 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_bot_ZN_4 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_bot_ZN_4 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_bot_ZN_4 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_bot_ZN_4 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_bot_ZN_4 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_mid_ZN_1 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_mid_ZN_1 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_mid_ZN_1 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_mid_ZN_1 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_mid_ZN_1 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_mid_ZN_1 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_mid_ZN_1 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_mid_ZN_2 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_mid_ZN_2 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_mid_ZN_2 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_mid_ZN_2 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_mid_ZN_2 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_mid_ZN_2 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_mid_ZN_2 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_mid_ZN_3 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_mid_ZN_3 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_mid_ZN_3 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_mid_ZN_3 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_mid_ZN_3 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_mid_ZN_3 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_mid_ZN_3 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_mid_ZN_4 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_mid_ZN_4 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_mid_ZN_4 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_mid_ZN_4 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_mid_ZN_4 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_mid_ZN_4 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_mid_ZN_4 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_top_ZN_1 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_top_ZN_1 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_top_ZN_1 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_top_ZN_1 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_top_ZN_1 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_top_ZN_1 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_top_ZN_1 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_top_ZN_2 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_top_ZN_2 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_top_ZN_2 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_top_ZN_2 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_top_ZN_2 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_top_ZN_2 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_top_ZN_2 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_top_ZN_3 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_top_ZN_3 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_top_ZN_3 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_top_ZN_3 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_top_ZN_3 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_top_ZN_3 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_top_ZN_3 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, + Perimeter_top_ZN_4 4pipe Beam, !- Name + ALWAYS_ON, !- Primary Air Availability Schedule Name + ALWAYS_ON, !- Cooling Availability Schedule Name + ALWAYS_ON, !- Heating Availability Schedule Name + Perimeter_top_ZN_4 4pipe Beam Inlet Node Name, !- Primary Air Inlet Node Name + Perimeter_top_ZN_4 4pipe Beam Outlet Node Name, !- Primary Air Outlet Node Name + Perimeter_top_ZN_4 4pipe Beam CW Inlet Node, !- Chilled Water Inlet Node Name + Perimeter_top_ZN_4 4pipe Beam CW Outlet Node, !- Chilled Water Outlet Node Name + Perimeter_top_ZN_4 4pipe Beam HW Inlet Node, !- Hot Water Inlet Node Name + Perimeter_top_ZN_4 4pipe Beam HW Outlet Node, !- Hot Water Outlet Node Name + AUTOSIZE, !- Design Primary Air Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Chilled Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Design Hot Water Volume Flow Rate {m3/s} + AUTOSIZE, !- Zone Total Beam Length {m} + 0.036, !- Rated Primary Air Flow Rate per Beam Length {m3/s-m} + 597, !- Beam Rated Cooling Capacity per Beam Length {W/m} + 10.0, !- Beam Rated Cooling Room Air Chilled Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Chilled Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Cooling Capacity Temperature Difference Modification Factor Curve Name + CoolCapModFuncOfSAFlow, !- Beam Cooling Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow, !- Beam Cooling Capacity Chilled Water Flow Modification Factor Curve Name + 1548, !- Beam Rated Heating Capacity per Beam Length {W/m} + 27.8, !- Beam Rated Heating Room Air Hot Water Temperature Difference {deltaC} + 5.2E-5, !- Beam Rated Hot Water Volume Flow Rate per Beam Length {m3/s-m} + CapModFuncOfTempDiff, !- Beam Heating Capacity Temperature Difference Modification Factor Curve Name + HeatCapModFuncOfSAFlow, !- Beam Heating Capacity Air Flow Modification Factor Curve Name + CapModFuncOfWaterFlow; !- Beam Heating Capacity Hot Water Flow Modification Factor Curve Name + + Curve:Linear, + CapModFuncOfTempDiff, !- Name + 0, !- Coefficient1 Constant + 1, !- Coefficient2 x + 0, !- Minimum Value of x + 1.5, !- Maximum Value of x + 0.0, !- Minimum Curve Output + 1.5; !- Maximum Curve Output + + Table:IndependentVariable, + CoolCapModFuncOfSAFlow_IndependentVariable1, !- Name + Cubic, !- Interpolation Method + Constant, !- Extrapolation Method + 0.714, !- Minimum Value + 1.2857, !- Maximum Value + , !- Normalization Reference Value + dimensionless, !- Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.714286, !- Value 1 + 1.0, !- Value 2 + 1.2857; !- + + Table:IndependentVariableList, + CoolCapModFuncOfSAFlow_IndependentVariableList, !- Name + CoolCapModFuncOfSAFlow_IndependentVariable1; !- Independent Variable 1 Name + + Table:Lookup, + CoolCapModFuncOfSAFlow, !- Name + CoolCapModFuncOfSAFlow_IndependentVariableList, !- Independent Variable List Name + , !- Normalization Method + , !- Normalization Divisor + 0.8234, !- Minimum Output + 1.1256, !- Maximum Output + dimensionless, !- Output Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.823403, !- Output Value 1 + 1.0, !- Output Value 2 + 1.1256; !- + + Table:IndependentVariable, + CapModFuncOfWaterFlow_IndependentVariable1, !- Name + Cubic, !- Interpolation Method + Constant, !- Extrapolation Method + 0.0, !- Minimum Value + 1.333333, !- Maximum Value + , !- Normalization Reference Value + dimensionless, !- Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.0, !- Value 1 + 0.05, !- Value 2 + 0.33333, !- + 0.5, !- + 0.666667, !- + 0.833333, !- + 1.0, !- + 1.333333; !- + + Table:IndependentVariableList, + CapModFuncOfWaterFlow_IndependentVariableList, !- Name + CapModFuncOfWaterFlow_IndependentVariable1; !- Independent Variable 1 Name + + Table:Lookup, + CapModFuncOfWaterFlow, !- Name + CapModFuncOfWaterFlow_IndependentVariableList, !- Independent Variable List Name + , !- Normalization Method + , !- Normalization Divisor + 0.0, !- Minimum Output + 1.04, !- Maximum Output + dimensionless, !- Output Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.0, !- Output Value 1 + 0.001, !- Output Value 2 + 0.71, !- + 0.85, !- + 0.92, !- + 0.97, !- + 1.0, !- + 1.04; !- + + Table:IndependentVariable, + HeatCapModFuncOfSAFlow_IndependentVariable1, !- Name + Cubic, !- Interpolation Method + Constant, !- Extrapolation Method + 0.714, !- Minimum Value + 1.2857, !- Maximum Value + , !- Normalization Reference Value + dimensionless, !- Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.714286, !- Value 1 + 1.0, !- Value 2 + 1.2857; !- + + Table:IndependentVariableList, + HeatCapModFuncOfSAFlow_IndependentVariableList, !- Name + HeatCapModFuncOfSAFlow_IndependentVariable1; !- Independent Variable 1 Name + + Table:Lookup, + HeatCapModFuncOfSAFlow, !- Name + HeatCapModFuncOfSAFlow_IndependentVariableList, !- Independent Variable List Name + , !- Normalization Method + , !- Normalization Divisor + 0.8554, !- Minimum Output + 1.0778, !- Maximum Output + dimensionless, !- Output Unit Type + , !- External File Name + , !- External File Column Number + , !- External File Starting Row Number + 0.8554, !- Output Value 1 + 1.0, !- Output Value 2 + 1.0778; !- + + ZoneHVAC:EquipmentList, + Basement Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Basement VAV Box, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Core_bottom Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_bottom 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Core_mid Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_mid 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Core_top Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Core_top 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_1 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_2 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_3 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_bot_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_bot_ZN_4 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_1 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_2 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_3 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_mid_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_mid_ZN_4 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_1 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_2 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_2 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_3 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_3 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + Perimeter_top_ZN_4 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + Perimeter_top_ZN_4 4pipe Beam, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + +! ***SIZING & CONTROLS*** + + Sizing:Zone, + Basement, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Basement, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Basement, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Core_bottom, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_bottom, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Core_bottom, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Core_mid, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_mid, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Core_mid, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Core_top, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Core_top, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Core_top, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_1, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_2, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_3, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_bot_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_bot_ZN_4, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_1, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_2, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_3, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_mid_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_mid_ZN_4, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_top_ZN_1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_1, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_1, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_top_ZN_2, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_2, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_2, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_top_ZN_3, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_3, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_3, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + Sizing:Zone, + Perimeter_top_ZN_4, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 12.8000, !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50.0000, !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.0085, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA Perimeter_top_ZN_4, !- Design Specification Outdoor Air Object Name + , !- Zone Heating Sizing Factor + , !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + , !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + , !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA Perimeter_top_ZN_4, !- Name + Flow/Person, !- Outdoor Air Method + 0.0125; !- Outdoor Air Flow per Person {m3/s-person} + + ZoneControl:Thermostat, + Basement Thermostat, !- Name + Basement, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Basement DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Core_bottom Thermostat, !- Name + Core_bottom, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_bottom DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Core_mid Thermostat, !- Name + Core_mid, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_mid DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Core_top Thermostat, !- Name + Core_top, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Core_top DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_bot_ZN_1 Thermostat, !- Name + Perimeter_bot_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_bot_ZN_2 Thermostat, !- Name + Perimeter_bot_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_bot_ZN_3 Thermostat, !- Name + Perimeter_bot_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_bot_ZN_4 Thermostat, !- Name + Perimeter_bot_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_bot_ZN_4 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_mid_ZN_1 Thermostat, !- Name + Perimeter_mid_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_mid_ZN_2 Thermostat, !- Name + Perimeter_mid_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_mid_ZN_3 Thermostat, !- Name + Perimeter_mid_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_mid_ZN_4 Thermostat, !- Name + Perimeter_mid_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_mid_ZN_4 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_top_ZN_1 Thermostat, !- Name + Perimeter_top_ZN_1, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_1 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_top_ZN_2 Thermostat, !- Name + Perimeter_top_ZN_2, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_2 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_top_ZN_3 Thermostat, !- Name + Perimeter_top_ZN_3, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_3 DualSPSched; !- Control 1 Name + + ZoneControl:Thermostat, + Perimeter_top_ZN_4 Thermostat, !- Name + Perimeter_top_ZN_4, !- Zone or ZoneList Name + Dual Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type + Perimeter_top_ZN_4 DualSPSched; !- Control 1 Name + + ThermostatSetpoint:DualSetpoint, + Basement DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_bottom DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_mid DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Core_top DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_bot_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_mid_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_1 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_2 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_3 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + Perimeter_top_ZN_4 DualSPSched, !- Name + HTGSETP_SCH, !- Heating Setpoint Temperature Schedule Name + CLGSETP_SCH; !- Cooling Setpoint Temperature Schedule Name + + Sizing:System, + CV_1, !- AirLoop Name + Sensible, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Central Cooling Design Supply Air Temperature {C} + 16.7000, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.0085, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + ONOFF; !- Central Cooling Capacity Control Method + + Sizing:System, + CV_2, !- AirLoop Name + SEnsible, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Central Cooling Design Supply Air Temperature {C} + 16.7000, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.0085, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + ONOFF; !- Central Cooling Capacity Control Method + + Sizing:System, + CV_3, !- AirLoop Name + SEnsible, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Central Cooling Design Supply Air Temperature {C} + 16.7000, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.0085, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + ONOFF; !- Central Cooling Capacity Control Method + + Sizing:System, + VAV_5, !- AirLoop Name + Sensible, !- Type of Load to Size On + AUTOSIZE, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8000, !- Central Cooling Design Supply Air Temperature {C} + 16.7000, !- Central Heating Design Supply Air Temperature {C} + NonCoincident, !- Type of Zone Sum to Use + No, !- 100% Outdoor Air in Cooling + No, !- 100% Outdoor Air in Heating + 0.0085, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.0080, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + , !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + , !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + + Controller:OutdoorAir, + CV_1_OA_Controller, !- Name + CV_1_OARelief Node, !- Relief Air Outlet Node Name + CV_1 Supply Equipment Inlet Node, !- Return Air Node Name + CV_1_OA-CV_1_CoolCNode, !- Mixed Air Node Name + CV_1_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + DifferentialDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched; !- Minimum Outdoor Air Schedule Name + + Controller:OutdoorAir, + CV_2_OA_Controller, !- Name + CV_2_OARelief Node, !- Relief Air Outlet Node Name + CV_2 Supply Equipment Inlet Node, !- Return Air Node Name + CV_2_OA-CV_2_CoolCNode, !- Mixed Air Node Name + CV_2_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + DifferentialDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched; !- Minimum Outdoor Air Schedule Name + + Controller:OutdoorAir, + CV_3_OA_Controller, !- Name + CV_3_OARelief Node, !- Relief Air Outlet Node Name + CV_3 Supply Equipment Inlet Node, !- Return Air Node Name + CV_3_OA-CV_3_CoolCNode, !- Mixed Air Node Name + CV_3_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + DifferentialDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched; !- Minimum Outdoor Air Schedule Name + + Controller:OutdoorAir, + VAV_5_OA_Controller, !- Name + VAV_5_OARelief Node, !- Relief Air Outlet Node Name + VAV_5 Supply Equipment Inlet Node, !- Return Air Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Mixed Air Node Name + VAV_5_OAInlet Node, !- Actuator Node Name + AUTOSIZE, !- Minimum Outdoor Air Flow Rate {m3/s} + AUTOSIZE, !- Maximum Outdoor Air Flow Rate {m3/s} + DifferentialDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 28.0, !- Economizer Maximum Limit Dry-Bulb Temperature {C} + 64000.0, !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + -100.0, !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + MinOA_MotorizedDamper_Sched; !- Minimum Outdoor Air Schedule Name + + SetpointManager:Scheduled, + CV_1 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + CV_1 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + CV_2 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + CV_2 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + CV_3 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + CV_3 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + VAV_5 SAT setpoint, !- Name + Temperature, !- Control Variable + Seasonal-Reset-Supply-Air-Temp-Sch, !- Schedule Name + VAV_5 Supply Equipment Outlet Node; !- Setpoint Node or NodeList Name + +! ***AIR LOOPS*** + + AirLoopHVAC, + CV_1, !- Name + CV_1_Controllers, !- Controller List Name + CV_1 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + CV_1 Air Loop Branches, !- Branch List Name + , !- Connector List Name + CV_1 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + CV_1 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + CV_1 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + CV_1 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + CV_2, !- Name + CV_2_Controllers, !- Controller List Name + CV_2 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + CV_2 Air Loop Branches, !- Branch List Name + , !- Connector List Name + CV_2 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + CV_2 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + CV_2 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + CV_2 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + CV_3, !- Name + CV_3_Controllers, !- Controller List Name + CV_3 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + CV_3 Air Loop Branches, !- Branch List Name + , !- Connector List Name + CV_3 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + CV_3 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + CV_3 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + CV_3 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + + AirLoopHVAC, + VAV_5, !- Name + VAV_5_Controllers, !- Controller List Name + VAV_5 Availability Manager List, !- Availability Manager List Name + AUTOSIZE, !- Design Supply Air Flow Rate {m3/s} + VAV_5 Air Loop Branches, !- Branch List Name + , !- Connector List Name + VAV_5 Supply Equipment Inlet Node, !- Supply Side Inlet Node Name + VAV_5 Zone Equipment Outlet Node, !- Demand Side Outlet Node Name + VAV_5 Zone Equipment Inlet Node, !- Demand Side Inlet Node Names + VAV_5 Supply Equipment Outlet Node; !- Supply Side Outlet Node Names + +! ***CONNECTIONS*** + + ZoneHVAC:EquipmentConnections, + Basement, !- Zone Name + Basement Equipment, !- Zone Conditioning Equipment List Name + Basement Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Basement Air Node, !- Zone Air Node Name + Basement Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Core_bottom, !- Zone Name + Core_bottom Equipment, !- Zone Conditioning Equipment List Name + Core_bottom Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Core_bottom Air Node, !- Zone Air Node Name + Core_bottom Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Core_mid, !- Zone Name + Core_mid Equipment, !- Zone Conditioning Equipment List Name + Core_mid Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Core_mid Air Node, !- Zone Air Node Name + Core_mid Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Core_top, !- Zone Name + Core_top Equipment, !- Zone Conditioning Equipment List Name + Core_top Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Core_top Air Node, !- Zone Air Node Name + Core_top Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_1, !- Zone Name + Perimeter_bot_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_2, !- Zone Name + Perimeter_bot_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_3, !- Zone Name + Perimeter_bot_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_bot_ZN_4, !- Zone Name + Perimeter_bot_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_bot_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_bot_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_bot_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_1, !- Zone Name + Perimeter_mid_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_2, !- Zone Name + Perimeter_mid_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_3, !- Zone Name + Perimeter_mid_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_mid_ZN_4, !- Zone Name + Perimeter_mid_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_mid_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_mid_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_mid_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_1, !- Zone Name + Perimeter_top_ZN_1 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_1 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_1 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_1 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_2, !- Zone Name + Perimeter_top_ZN_2 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_2 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_2 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_2 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_3, !- Zone Name + Perimeter_top_ZN_3 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_3 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_3 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_3 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + Perimeter_top_ZN_4, !- Zone Name + Perimeter_top_ZN_4 Equipment, !- Zone Conditioning Equipment List Name + Perimeter_top_ZN_4 Inlet Nodes, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + Perimeter_top_ZN_4 Air Node, !- Zone Air Node Name + Perimeter_top_ZN_4 Return Air Node Name; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:AirDistributionUnit, + Basement VAV Box, !- Name + Basement VAV Box Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + Basement VAV Box Component; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_bottom 4pipe Beam, !- Name + Core_bottom 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Core_bottom 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_mid 4pipe Beam, !- Name + Core_mid 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Core_mid 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Core_top 4pipe Beam, !- Name + Core_top 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Core_top 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_1 4pipe Beam, !- Name + Perimeter_bot_ZN_1 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_bot_ZN_1 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_2 4pipe Beam, !- Name + Perimeter_bot_ZN_2 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_bot_ZN_2 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_3 4pipe Beam, !- Name + Perimeter_bot_ZN_3 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_bot_ZN_3 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_bot_ZN_4 4pipe Beam, !- Name + Perimeter_bot_ZN_4 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_bot_ZN_4 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_1 4pipe Beam, !- Name + Perimeter_mid_ZN_1 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_mid_ZN_1 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_2 4pipe Beam, !- Name + Perimeter_mid_ZN_2 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_mid_ZN_2 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_3 4pipe Beam, !- Name + Perimeter_mid_ZN_3 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_mid_ZN_3 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_mid_ZN_4 4pipe Beam, !- Name + Perimeter_mid_ZN_4 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_mid_ZN_4 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_1 4pipe Beam, !- Name + Perimeter_top_ZN_1 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_top_ZN_1 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_2 4pipe Beam, !- Name + Perimeter_top_ZN_2 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_top_ZN_2 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_3 4pipe Beam, !- Name + Perimeter_top_ZN_3 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_top_ZN_3 4pipe Beam; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + Perimeter_top_ZN_4 4pipe Beam, !- Name + Perimeter_top_ZN_4 4pipe Beam Outlet Node Name, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Air Terminal Object Type + Perimeter_top_ZN_4 4pipe Beam; !- Air Terminal Name + + NodeList, + Basement Inlet Nodes, !- Name + Basement VAV Box Outlet Node Name; !- Node 1 Name + + NodeList, + Core_bottom Inlet Nodes, !- Name + Core_bottom 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Core_mid Inlet Nodes, !- Name + Core_mid 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Core_top Inlet Nodes, !- Name + Core_top 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_bot_ZN_1 Inlet Nodes, !- Name + Perimeter_bot_ZN_1 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_bot_ZN_2 Inlet Nodes, !- Name + Perimeter_bot_ZN_2 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_bot_ZN_3 Inlet Nodes, !- Name + Perimeter_bot_ZN_3 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_bot_ZN_4 Inlet Nodes, !- Name + Perimeter_bot_ZN_4 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_mid_ZN_1 Inlet Nodes, !- Name + Perimeter_mid_ZN_1 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_mid_ZN_2 Inlet Nodes, !- Name + Perimeter_mid_ZN_2 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_mid_ZN_3 Inlet Nodes, !- Name + Perimeter_mid_ZN_3 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_mid_ZN_4 Inlet Nodes, !- Name + Perimeter_mid_ZN_4 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_top_ZN_1 Inlet Nodes, !- Name + Perimeter_top_ZN_1 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_top_ZN_2 Inlet Nodes, !- Name + Perimeter_top_ZN_2 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_top_ZN_3 Inlet Nodes, !- Name + Perimeter_top_ZN_3 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + Perimeter_top_ZN_4 Inlet Nodes, !- Name + Perimeter_top_ZN_4 4pipe Beam Outlet Node Name; !- Node 1 Name + + NodeList, + CV_1_OANode List, !- Name + CV_1_OAInlet Node; !- Node 1 Name + + NodeList, + CV_2_OANode List, !- Name + CV_2_OAInlet Node; !- Node 1 Name + + NodeList, + CV_3_OANode List, !- Name + CV_3_OAInlet Node; !- Node 1 Name + + NodeList, + VAV_5_OANode List, !- Name + VAV_5_OAInlet Node; !- Node 1 Name + + AvailabilityManagerAssignmentList, + CV_1 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + CV_1 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + CV_2 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + CV_2 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + CV_3 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + CV_3 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManagerAssignmentList, + VAV_5 Availability Manager List, !- Name + AvailabilityManager:NightCycle, !- Availability Manager 1 Object Type + VAV_5 Availability Manager; !- Availability Manager 1 Name + + AvailabilityManager:NightCycle, + CV_1 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + CV_2 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + CV_3 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + AvailabilityManager:NightCycle, + VAV_5 Availability Manager, !- Name + ALWAYS_ON, !- Applicability Schedule Name + HVACOperationSchd, !- Fan Schedule Name + CycleOnAny, !- Control Type + 1.0, !- Thermostat Tolerance {deltaC} + FixedRunTime, !- Cycling Run Time Control Type + 1800; !- Cycling Run Time {s} + + BranchList, + CV_1 Air Loop Branches, !- Name + CV_1 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + CV_2 Air Loop Branches, !- Name + CV_2 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + CV_3 Air Loop Branches, !- Name + CV_3 Air Loop Main Branch; !- Branch 1 Name + + BranchList, + VAV_5 Air Loop Branches, !- Name + VAV_5 Air Loop Main Branch; !- Branch 1 Name + + Branch, + CV_1 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + CV_1_OA, !- Component 1 Name + CV_1 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + CV_1_OA-CV_1_CoolCNode, !- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + CV_1_CoolC, !- Component 2 Name + CV_1_OA-CV_1_CoolCNode, !- Component 2 Inlet Node Name + CV_1_CoolC-CV_1_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + CV_1_HeatC, !- Component 3 Name + CV_1_CoolC-CV_1_HeatCNode, !- Component 3 Inlet Node Name + CV_1_HeatC-CV_1_FanNode, !- Component 3 Outlet Node Name + Fan:ConstantVolume, !- Component 4 Object Type + CV_1_Fan, !- Component 4 Name + CV_1_HeatC-CV_1_FanNode, !- Component 4 Inlet Node Name + CV_1 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + CV_2 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + CV_2_OA, !- Component 1 Name + CV_2 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + CV_2_OA-CV_2_CoolCNode, !- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + CV_2_CoolC, !- Component 2 Name + CV_2_OA-CV_2_CoolCNode, !- Component 2 Inlet Node Name + CV_2_CoolC-CV_2_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + CV_2_HeatC, !- Component 3 Name + CV_2_CoolC-CV_2_HeatCNode, !- Component 3 Inlet Node Name + CV_2_HeatC-CV_2_FanNode, !- Component 3 Outlet Node Name + Fan:ConstantVolume, !- Component 4 Object Type + CV_2_Fan, !- Component 4 Name + CV_2_HeatC-CV_2_FanNode, !- Component 4 Inlet Node Name + CV_2 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + CV_3 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + CV_3_OA, !- Component 1 Name + CV_3 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + CV_3_OA-CV_3_CoolCNode, !- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + CV_3_CoolC, !- Component 2 Name + CV_3_OA-CV_3_CoolCNode, !- Component 2 Inlet Node Name + CV_3_CoolC-CV_3_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + CV_3_HeatC, !- Component 3 Name + CV_3_CoolC-CV_3_HeatCNode, !- Component 3 Inlet Node Name + CV_3_HeatC-CV_3_FanNode, !- Component 3 Outlet Node Name + Fan:ConstantVolume, !- Component 4 Object Type + CV_3_Fan, !- Component 4 Name + CV_3_HeatC-CV_3_FanNode, !- Component 4 Inlet Node Name + CV_3 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + Branch, + VAV_5 Air Loop Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV_5_OA, !- Component 1 Name + VAV_5 Supply Equipment Inlet Node, !- Component 1 Inlet Node Name + VAV_5_OA-VAV_5_CoolCNode,!- Component 1 Outlet Node Name + Coil:Cooling:Water, !- Component 2 Object Type + VAV_5_CoolC, !- Component 2 Name + VAV_5_OA-VAV_5_CoolCNode,!- Component 2 Inlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Component 2 Outlet Node Name + Coil:Heating:Water, !- Component 3 Object Type + VAV_5_HeatC, !- Component 3 Name + VAV_5_CoolC-VAV_5_HeatCNode, !- Component 3 Inlet Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Component 3 Outlet Node Name + Fan:VariableVolume, !- Component 4 Object Type + VAV_5_Fan, !- Component 4 Name + VAV_5_HeatC-VAV_5_FanNode, !- Component 4 Inlet Node Name + VAV_5 Supply Equipment Outlet Node; !- Component 4 Outlet Node Name + + AirLoopHVAC:ControllerList, + CV_1_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + CV_1_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + CV_1_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + CV_1_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + CV_1_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + CV_2_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + CV_2_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + CV_2_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + CV_2_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + CV_2_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + CV_3_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + CV_3_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + CV_3_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + CV_3_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + CV_3_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + VAV_5_Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV_5_CoolC_Controller, !- Controller 1 Name + Controller:WaterCoil, !- Controller 2 Object Type + VAV_5_HeatC_Controller; !- Controller 2 Name + + AirLoopHVAC:ControllerList, + VAV_5_OA_Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV_5_OA_Controller; !- Controller 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + CV_1_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + CV_1_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + CV_2_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + CV_2_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + CV_3_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + CV_3_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV_5_OA_Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV_5_OAMixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem, + CV_1_OA, !- Name + CV_1_OA_Controllers, !- Controller List Name + CV_1_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + CV_2_OA, !- Name + CV_2_OA_Controllers, !- Controller List Name + CV_2_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + CV_3_OA, !- Name + CV_3_OA_Controllers, !- Controller List Name + CV_3_OA_Equipment; !- Outdoor Air Equipment List Name + + AirLoopHVAC:OutdoorAirSystem, + VAV_5_OA, !- Name + VAV_5_OA_Controllers, !- Controller List Name + VAV_5_OA_Equipment; !- Outdoor Air Equipment List Name + + OutdoorAir:NodeList, + CV_1_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + CV_2_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + CV_3_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:NodeList, + VAV_5_OANode List; !- Node or NodeList Name 1 + + OutdoorAir:Mixer, + CV_1_OAMixing Box, !- Name + CV_1_OA-CV_1_CoolCNode, !- Mixed Air Node Name + CV_1_OAInlet Node, !- Outdoor Air Stream Node Name + CV_1_OARelief Node, !- Relief Air Stream Node Name + CV_1 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + CV_2_OAMixing Box, !- Name + CV_2_OA-CV_2_CoolCNode, !- Mixed Air Node Name + CV_2_OAInlet Node, !- Outdoor Air Stream Node Name + CV_2_OARelief Node, !- Relief Air Stream Node Name + CV_2 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + CV_3_OAMixing Box, !- Name + CV_3_OA-CV_3_CoolCNode, !- Mixed Air Node Name + CV_3_OAInlet Node, !- Outdoor Air Stream Node Name + CV_3_OARelief Node, !- Relief Air Stream Node Name + CV_3 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + OutdoorAir:Mixer, + VAV_5_OAMixing Box, !- Name + VAV_5_OA-VAV_5_CoolCNode,!- Mixed Air Node Name + VAV_5_OAInlet Node, !- Outdoor Air Stream Node Name + VAV_5_OARelief Node, !- Relief Air Stream Node Name + VAV_5 Supply Equipment Inlet Node; !- Return Air Stream Node Name + + SetpointManager:MixedAir, + CV_1_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + CV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_1_HeatC-CV_1_FanNode, !- Fan Inlet Node Name + CV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_1_CoolC-CV_1_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_1_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + CV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_1_HeatC-CV_1_FanNode, !- Fan Inlet Node Name + CV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_1_HeatC-CV_1_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_1_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + CV_1 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_1_HeatC-CV_1_FanNode, !- Fan Inlet Node Name + CV_1 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_1_OA-CV_1_CoolCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_2_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + CV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_2_HeatC-CV_2_FanNode, !- Fan Inlet Node Name + CV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_2_CoolC-CV_2_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_2_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + CV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_2_HeatC-CV_2_FanNode, !- Fan Inlet Node Name + CV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_2_HeatC-CV_2_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_2_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + CV_2 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_2_HeatC-CV_2_FanNode, !- Fan Inlet Node Name + CV_2 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_2_OA-CV_2_CoolCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_3_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + CV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_3_HeatC-CV_3_FanNode, !- Fan Inlet Node Name + CV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_3_CoolC-CV_3_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_3_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + CV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_3_HeatC-CV_3_FanNode, !- Fan Inlet Node Name + CV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_3_HeatC-CV_3_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + CV_3_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + CV_3 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + CV_3_HeatC-CV_3_FanNode, !- Fan Inlet Node Name + CV_3 Supply Equipment Outlet Node, !- Fan Outlet Node Name + CV_3_OA-CV_3_CoolCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_CoolC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_CoolC-VAV_5_HeatCNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_HeatC SAT Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_HeatC-VAV_5_FanNode; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV_5_OAMixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV_5 Supply Equipment Outlet Node, !- Reference Setpoint Node Name + VAV_5_HeatC-VAV_5_FanNode, !- Fan Inlet Node Name + VAV_5 Supply Equipment Outlet Node, !- Fan Outlet Node Name + VAV_5_OA-VAV_5_CoolCNode;!- Setpoint Node or NodeList Name + + AirLoopHVAC:SupplyPath, + CV_1, !- Name + CV_1 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + CV_1 Supply Air Splitter;!- Component 1 Name + + AirLoopHVAC:SupplyPath, + CV_2, !- Name + CV_2 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + CV_2 Supply Air Splitter;!- Component 1 Name + + AirLoopHVAC:SupplyPath, + CV_3, !- Name + CV_3 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + CV_3 Supply Air Splitter;!- Component 1 Name + + AirLoopHVAC:SupplyPath, + VAV_5, !- Name + VAV_5 Zone Equipment Inlet Node, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV_5 Supply Air Splitter; !- Component 1 Name + + AirLoopHVAC:ZoneSplitter, + CV_1 Supply Air Splitter,!- Name + CV_1 Zone Equipment Inlet Node, !- Inlet Node Name + Core_bottom 4pipe Beam Inlet Node Name, !- Outlet 1 Node Name + Perimeter_bot_ZN_3 4pipe Beam Inlet Node Name, !- Outlet 2 Node Name + Perimeter_bot_ZN_2 4pipe Beam Inlet Node Name, !- Outlet 3 Node Name + Perimeter_bot_ZN_1 4pipe Beam Inlet Node Name, !- Outlet 4 Node Name + Perimeter_bot_ZN_4 4pipe Beam Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + CV_2 Supply Air Splitter,!- Name + CV_2 Zone Equipment Inlet Node, !- Inlet Node Name + Core_mid 4pipe Beam Inlet Node Name, !- Outlet 1 Node Name + Perimeter_mid_ZN_3 4pipe Beam Inlet Node Name, !- Outlet 2 Node Name + Perimeter_mid_ZN_2 4pipe Beam Inlet Node Name, !- Outlet 3 Node Name + Perimeter_mid_ZN_1 4pipe Beam Inlet Node Name, !- Outlet 4 Node Name + Perimeter_mid_ZN_4 4pipe Beam Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + CV_3 Supply Air Splitter,!- Name + CV_3 Zone Equipment Inlet Node, !- Inlet Node Name + Core_top 4pipe Beam Inlet Node Name, !- Outlet 1 Node Name + Perimeter_top_ZN_3 4pipe Beam Inlet Node Name, !- Outlet 2 Node Name + Perimeter_top_ZN_2 4pipe Beam Inlet Node Name, !- Outlet 3 Node Name + Perimeter_top_ZN_1 4pipe Beam Inlet Node Name, !- Outlet 4 Node Name + Perimeter_top_ZN_4 4pipe Beam Inlet Node Name; !- Outlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + VAV_5 Supply Air Splitter, !- Name + VAV_5 Zone Equipment Inlet Node, !- Inlet Node Name + Basement VAV Box Inlet Node Name; !- Outlet 1 Node Name + + AirLoopHVAC:ReturnPath, + CV_1 Return Air Path, !- Name + CV_1 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + CV_1 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + CV_1 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + CV_2 Return Air Path, !- Name + CV_2 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + CV_2 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + CV_2 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + CV_3 Return Air Path, !- Name + CV_3 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + CV_3 Return Plenum, !- Component 1 Name + AirLoopHVAC:ZoneMixer, !- Component 2 Object Type + CV_3 Return Air Mixer; !- Component 2 Name + + AirLoopHVAC:ReturnPath, + VAV_5 Return Air Path, !- Name + VAV_5 Zone Equipment Outlet Node, !- Return Air Path Outlet Node Name + AirLoopHVAC:ZoneMixer, !- Component 1 Object Type + VAV_5 Return Air Mixer; !- Component 1 Name + + AirLoopHVAC:ReturnPlenum, + CV_2 Return Plenum, !- Name + MidFloor_Plenum, !- Zone Name + MIDFLOOR_PLENUMPlenumNode, !- Zone Node Name + MIDFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + Core_mid Return Air Node Name, !- Inlet 1 Node Name + Perimeter_mid_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_mid_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_mid_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_mid_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + AirLoopHVAC:ReturnPlenum, + CV_1 Return Plenum, !- Name + GroundFloor_Plenum, !- Zone Name + GROUNDFLOOR_PLENUMPlenumNode, !- Zone Node Name + GROUNDFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + Core_bottom Return Air Node Name, !- Inlet 1 Node Name + Perimeter_bot_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_bot_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_bot_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_bot_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + AirLoopHVAC:ReturnPlenum, + CV_3 Return Plenum, !- Name + TopFloor_Plenum, !- Zone Name + TOPFLOOR_PLENUMPlenumNode, !- Zone Node Name + TOPFLOOR_PLENUMPlenumOutletNode, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + Core_top Return Air Node Name, !- Inlet 1 Node Name + Perimeter_top_ZN_3 Return Air Node Name, !- Inlet 2 Node Name + Perimeter_top_ZN_2 Return Air Node Name, !- Inlet 3 Node Name + Perimeter_top_ZN_1 Return Air Node Name, !- Inlet 4 Node Name + Perimeter_top_ZN_4 Return Air Node Name; !- Inlet 5 Node Name + + AirLoopHVAC:ZoneMixer, + CV_1 Return Air Mixer, !- Name + CV_1 Zone Equipment Outlet Node, !- Outlet Node Name + GROUNDFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + CV_2 Return Air Mixer, !- Name + CV_2 Zone Equipment Outlet Node, !- Outlet Node Name + MIDFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + CV_3 Return Air Mixer, !- Name + CV_3 Zone Equipment Outlet Node, !- Outlet Node Name + TOPFLOOR_PLENUMPlenumOutletNode; !- Inlet 1 Node Name + + AirLoopHVAC:ZoneMixer, + VAV_5 Return Air Mixer, !- Name + VAV_5 Zone Equipment Outlet Node, !- Outlet Node Name + Basement Return Air Node Name; !- Inlet 1 Node Name + +! ***SCHEDULES*** + + Schedule:Compact, + CLGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,26.7, !- Field 3 + Until: 22:00,24.0, !- Field 5 + Until: 24:00,26.7, !- Field 7 + For: Saturday, !- Field 9 + Until: 06:00,26.7, !- Field 10 + Until: 18:00,24.0, !- Field 12 + Until: 24:00,26.7, !- Field 14 + For WinterDesignDay, !- Field 16 + Until: 24:00,26.7, !- Field 17 + For: AllOtherDays, !- Field 19 + Until: 24:00,26.7; !- Field 20 + + Schedule:Compact, + HTGSETP_SCH, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 06:00,15.6, !- Field 3 + Until: 22:00,21.0, !- Field 5 + Until: 24:00,15.6, !- Field 7 + For SummerDesignDay, !- Field 9 + Until: 24:00,15.6, !- Field 10 + For: Saturday, !- Field 12 + Until: 06:00,15.6, !- Field 13 + Until: 18:00,21.0, !- Field 15 + Until: 24:00,15.6, !- Field 17 + For: WinterDesignDay, !- Field 19 + Until: 24:00,21.0, !- Field 20 + For: AllOtherDays, !- Field 22 + Until: 24:00,15.6; !- Field 23 + + Schedule:Compact, + Seasonal-Reset-Supply-Air-Temp-Sch, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,12.8; !- Field 3 + + Schedule:Compact, + MinOA_MotorizedDamper_Sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 07:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 07:00,0.0, !- Field 10 + Until: 18:00,1.0, !- Field 12 + Until: 24:00,0.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0; !- Field 17 + + Schedule:Compact, + Dual Zone Control Type Sched, !- Name + Control Type, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,4; !- Field 3 + + Schedule:Compact, + HVACOperationSchd, !- Name + On/Off, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 06:00,0.0, !- Field 3 + Until: 22:00,1.0, !- Field 5 + Until: 24:00,0.0, !- Field 7 + For: Saturday WinterDesignDay, !- Field 9 + Until: 06:00,0.0, !- Field 10 + Until: 18:00,1.0, !- Field 12 + Until: 24:00,0.0, !- Field 14 + For: AllOtherDays, !- Field 16 + Until: 24:00,0.0; !- Field 17 + + +! ***EQUIPMENT*** + + Pump:VariableSpeed, + CoolSys1 Pump, !- Name + CoolSys1 Supply Inlet Node, !- Inlet Node Name + CoolSys1 Pump-CoolSys1 ChillerNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0.0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + + Pump:VariableSpeed, + HeatSys1 Pump, !- Name + HeatSys1 Supply Inlet Node, !- Inlet Node Name + HeatSys1 Pump-HeatSys1 BoilerNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.875, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0.0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + + +! ***SIZING & CONTROLS*** + + Sizing:Plant, + CoolSys1, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 6.67, !- Design Loop Exit Temperature {C} + 6.67, !- Loop Design Temperature Difference {deltaC} + Coincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + Sizing:Plant, + HeatSys1, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 82.2, !- Design Loop Exit Temperature {C} + 11.1, !- Loop Design Temperature Difference {deltaC} + Coincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + Controller:WaterCoil, + CV_1_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + CV_1_CoolC-CV_1_HeatCNode, !- Sensor Node Name + CV_1_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + CV_1_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + CV_1_HeatC-CV_1_FanNode, !- Sensor Node Name + CV_1_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + CV_2_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + CV_2_CoolC-CV_2_HeatCNode, !- Sensor Node Name + CV_2_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + CV_2_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + CV_2_HeatC-CV_2_FanNode, !- Sensor Node Name + CV_2_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + CV_3_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + CV_3_CoolC-CV_3_HeatCNode, !- Sensor Node Name + CV_3_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + CV_3_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + CV_3_HeatC-CV_3_FanNode, !- Sensor Node Name + CV_3_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_5_CoolC_Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + Flow, !- Actuator Variable + VAV_5_CoolC-VAV_5_HeatCNode, !- Sensor Node Name + VAV_5_CoolCDemand Inlet Node, !- Actuator Node Name + , !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:WaterCoil, + VAV_5_HeatC_Controller, !- Name + Temperature, !- Control Variable + Normal, !- Action + Flow, !- Actuator Variable + VAV_5_HeatC-VAV_5_FanNode, !- Sensor Node Name + VAV_5_HeatCDemand Inlet Node, !- Actuator Node Name + 0.0001, !- Controller Convergence Tolerance {deltaC} + AUTOSIZE, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + +! Curve adapted by R. Lord for ANSI/ASHRAE/IESNA 90.1-2004 performance +! for a water-cooled, screw/scroll chiller + + Curve:Biquadratic, + WC Screw Default 90.1-2004 Cap_fT, !- Name + 0.9061150, !- Coefficient1 Constant + 0.0292277, !- Coefficient2 x + -0.0003647, !- Coefficient3 x**2 + -0.0009709, !- Coefficient4 y + -0.0000905, !- Coefficient5 y**2 + 0.0002527, !- Coefficient6 x*y + 0.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 0.0, !- Minimum Value of y + 50.0; !- Maximum Value of y + +! Curve adapted by R. Lord for ANSI/ASHRAE/IESNA 90.1-2004 performance +! for a water-cooled, screw/scroll chiller + + Curve:Biquadratic, + WC Screw Default 90.1-2004 EIR_fT, !- Name + 0.3617105, !- Coefficient1 Constant + -0.0229833, !- Coefficient2 x + -0.0009519, !- Coefficient3 x**2 + 0.0131889, !- Coefficient4 y + 0.0003752, !- Coefficient5 y**2 + -0.0007059, !- Coefficient6 x*y + 0.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 0.0, !- Minimum Value of y + 50.0; !- Maximum Value of y + +!Curve from EnergyPlus Chiller dataset +! Energy Input to Cooling Output Ratio Function of Part Load Ratio Curve +! x = Leaving Condenser Water Temperature and y = Part Load Ratio (load/capacity) + + Curve:Bicubic, + ReformEIRChiller Carrier 19XR 1259kW/6.26COP/Vanes EIRFPLR, !- Name + 4.602131E-02, !- Coefficient1 Constant + 2.433945E-02, !- Coefficient2 x + 6.394526E-05, !- Coefficient3 x**2 + -3.648563E-01, !- Coefficient4 y + 1.854759E+00, !- Coefficient5 y**2 + -2.809346E-02, !- Coefficient6 x*y + 0.000000E+00, !- Coefficient7 x**3 + -4.821515E-01, !- Coefficient8 y**3 + 0.000000E+00, !- Coefficient9 x**2*y + 0.000000E+00, !- Coefficient10 x*y**2 + 14.56, !- Minimum Value of x + 34.97, !- Maximum Value of x + 0.18, !- Minimum Value of y + 1.03, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Dimensionless, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + SetpointManager:Scheduled, + CoolSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + CW-Loop-Temp-Schedule, !- Schedule Name + CoolSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + HeatSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + HW-Loop-Temp-Schedule, !- Schedule Name + HeatSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + PlantEquipmentOperationSchemes, + CoolSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALWAYS_ON; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperationSchemes, + HeatSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALWAYS_ON; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:ChillerHeaterChangeover, + Two AWHP Operation Scheme, !- Name + 6.6 , !- Primary Cooling Plant Setpoint Temperature + 13.7, !- Secondary Distribution Cooling Plant Setpoint Temperature + 59.8 , !- Primary Heating Plant Setpoint at Outdoor High Temperature + 10.0, !- Outdoor High Temperature + 37.6, !- Primary Heating Plant Setpoint at Outdoor Low Temperature + -18.0, !- Outdoor Low Temperature + 45.0, !- Secondary Distribution Heating Plant Setpoint Temperature + All Conditioned Zones, !- Zone Load Polling ZoneList Name + Two AWHP Cooling Operation Scheme, !- Cooling Only Load Plant Equipment Operation Cooling Load Name + Two AWHP Heating Operation Scheme, !- Heating Only Load Plant Equipment Operation Heating Load Name + One AWHP Cooling Operation Scheme, !- Simultaneous Cooling And Heating Plant Equipment Operation Cooling Load Name + One AWHP Heating Operation Scheme, !- Simultaneous Cooling And Heating Plant Equipment Operation Heating Load Name + , !- Dedicated Chilled Water Return Recovery HeatPump Name + , !- Dedicated Hot Water Return Recovery HeatPump Name + ; !- Dedicated Recovery Heat Pump Control Load Capacity Factor + + PlantEquipmentOperation:CoolingLoad, + Two AWHP Cooling Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 50000, !- Load Range 1 Upper Limit {W} + One AWHP Cooling Equipment List, !- Range 1 Equipment List Name + 50000, !- Load Range 2 Lower Limit {W} + 10000000000000, !- Load Range 2 Upper Limit {W} + Two AWHP Cooling Equipment List; !- Range 2 Equipment List Name + + + PlantEquipmentList, + Two AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side, !- Equipment 1 Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 2 Object Type + AWHP_2 Cooling Side; !- Equipment 2 Name + + PlantEquipmentOperation:HeatingLoad, + Two AWHP Heating Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 50000, !- Load Range 1 Upper Limit {W} + One AWHP Heating Equipment List, !- Range 1 Equipment List Name + 100000, !- Load Range 2 Lower Limit {W} + 10000000000000, !- Load Range 2 Upper Limit {W} + Two AWHP Heating Equipment List; !- Range 2 Equipment List Name + + PlantEquipmentList, + Two AWHP Heating Equipment List, !- Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 1 Object Type + AWHP_1 Heating Side, !- Equipment 1 Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 2 Object Type + AWHP_2 Heating Side; !- Equipment 2 Name + + + PlantEquipmentOperation:CoolingLoad, + One AWHP Cooling Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 10000000000000000, !- Load Range 1 Upper Limit {W} + One AWHP Cooling Equipment List; !- Range 1 Equipment List Name + + + PlantEquipmentList, + One AWHP Cooling Equipment List, !- Name + HeatPump:PlantLoop:EIR:Cooling, !- Equipment 1 Object Type + AWHP_1 Cooling Side; !- Equipment 1 Name + + PlantEquipmentOperation:HeatingLoad, + One AWHP Heating Operation Scheme, !- Name + 0.0, !- Load Range 1 Lower Limit {W} + 10000000000000000, !- Load Range 1 Upper Limit {W} + One AWHP Heating Equipment List; !- Range 1 Equipment List Name + + + PlantEquipmentList, + One AWHP Heating Equipment List, !- Name + HeatPump:PlantLoop:EIR:Heating, !- Equipment 1 Object Type + AWHP_2 Heating Side; !- Equipment 1 Name + + + ZoneList, + All Conditioned Zones, + Basement, + Core_bottom, + Core_mid, + Core_top, + Perimeter_bot_ZN_1, + Perimeter_bot_ZN_2, + Perimeter_bot_ZN_3, + Perimeter_bot_ZN_4, + Perimeter_mid_ZN_1, + Perimeter_mid_ZN_2, + Perimeter_mid_ZN_3, + Perimeter_mid_ZN_4, + Perimeter_top_ZN_1, + Perimeter_top_ZN_2, + Perimeter_top_ZN_3, + Perimeter_top_ZN_4; + + + +! ***LOOPS*** + + PlantLoop, + CoolSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + CoolSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + CoolSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98.0, !- Maximum Loop Temperature {C} + 1.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + CoolSys1 Supply Inlet Node, !- Plant Side Inlet Node Name + CoolSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + CoolSys1 Supply Branches,!- Plant Side Branch List Name + CoolSys1 Supply Connectors, !- Plant Side Connector List Name + CoolSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + CoolSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + CoolSys1 Demand Branches,!- Demand Side Branch List Name + CoolSys1 Demand Connectors, !- Demand Side Connector List Name + UniformLoad; !- Load Distribution Scheme + + PlantLoop, + HeatSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + HeatSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + HeatSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 100.0, !- Maximum Loop Temperature {C} + 10.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + HeatSys1 Supply Inlet Node, !- Plant Side Inlet Node Name + HeatSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + HeatSys1 Supply Branches,!- Plant Side Branch List Name + HeatSys1 Supply Connectors, !- Plant Side Connector List Name + HeatSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + HeatSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + HeatSys1 Demand Branches,!- Demand Side Branch List Name + HeatSys1 Demand Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + + + +! ***CONNECTIONS*** + + BranchList, + CoolSys1 Demand Branches,!- Name + CoolSys1 Demand Inlet Branch, !- Branch 1 Name + CoolSys1 Demand Load Branch 1, !- Branch 2 Name + CoolSys1 Demand Load Branch 2, !- Branch 3 Name + CoolSys1 Demand Load Branch 3, !- Branch 4 Name + CoolSys1 Demand Load Branch 4, !- Branch 5 Name + Primary to Secondary CW HX Branch, !- Branch 6 Name + CoolSys1 Demand Bypass Branch, !- Branch 7 Name + CoolSys1 Demand Outlet Branch; !- Branch 8 Name + + BranchList, + CoolSys1 Supply Branches,!- Name + CoolSys1 Supply Inlet Branch, !- Branch 1 Name + CoolSys1 Supply Equipment Branch 1, !- Branch 2 Name + CoolSys1 Supply Equipment Branch 2, !- Branch 3 Name + CoolSys1 Supply Outlet Branch; !- Branch 5 Name + + BranchList, + HeatSys1 Demand Branches,!- Name + HeatSys1 Demand Inlet Branch, !- Branch 1 Name + HeatSys1 Demand Load Branch 1, !- Branch 2 Name + HeatSys1 Demand Load Branch 2, !- Branch 3 Name + HeatSys1 Demand Load Branch 3, !- Branch 4 Name + HeatSys1 Demand Load Branch 4, !- Branch 5 Name + HeatSys1 Demand Load Branch 5, !- Branch 6 Name + Primary to Secondary HW HX Branch, !- Branch 7 Name + HeatSys1 Demand Bypass Branch, !- Branch 8 Name + HeatSys1 Demand Outlet Branch; !- Branch 9 Name + + BranchList, + HeatSys1 Supply Branches,!- Name + HeatSys1 Supply Inlet Branch, !- Branch 1 Name + HeatSys1 Supply Equipment Branch 1, !- Branch 2 Name + HeatSys1 Supply Equipment Branch 2, !- Branch 2 Name + HEATSYS1 SUPPLY EQUIPMENT BYPASS BRANCH, + HeatSys1 Supply Outlet Branch; !- Branch 4 Name + + Branch, + CoolSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Demand Bypass Pipe, !- Component 1 Name + CoolSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + CoolSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Demand Inlet Pipe, !- Component 1 Name + CoolSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + CoolSys1 Demand Inlet Pipe-CoolSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + VAV_5_CoolC, !- Component 1 Name + VAV_5_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_5_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + CV_1_CoolC, !- Component 1 Name + CV_1_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_1_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + CV_2_CoolC, !- Component 1 Name + CV_2_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_2_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water, !- Component 1 Object Type + CV_3_CoolC, !- Component 1 Name + CV_3_CoolCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_3_CoolCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Demand Outlet Pipe, !- Component 1 Name + CoolSys1 Demand Mixer-CoolSys1 Demand Outlet Pipe, !- Component 1 Inlet Node Name + CoolSys1 Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + CoolSys1 Pump, !- Component 1 Name + CoolSys1 Supply Inlet Node, !- Component 1 Inlet Node Name + CoolSys1 Pump-CoolSys1 ChillerNodeviaConnector; !- Component 1 Outlet Node Name + + Branch, + CoolSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CoolSys1 Supply Outlet Pipe, !- Component 1 Name + CoolSys1 Supply Mixer-CoolSys1 Supply Outlet Pipe, !- Component 1 Inlet Node Name + CoolSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Primary to Secondary CW HX Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary CW HX, !- Component 1 Name + Primary CW HX Inlet Node,!- Component 1 Inlet Node Name + Primary CW HX Outet Node;!- Component 1 Outlet Node Name + + HeatExchanger:FluidToFluid, + Primary to Secondary CW HX, !- Name + always_on, !- Availability Schedule Name + Primary CW HX Inlet Node,!- Loop Demand Side Inlet Node Name + Primary CW HX Outet Node,!- Loop Demand Side Outlet Node Name + autosize, !- Loop Demand Side Design Flow Rate {m3/s} + Secondary CW HX Inlet Node, !- Loop Supply Side Inlet Node Name + Secondary CW HX Outlet Node, !- Loop Supply Side Outlet Node Name + Autosize, !- Loop Supply Side Design Flow Rate {m3/s} + CrossFlowBothMixed, !- Heat Exchange Model Type + Autosize, !- Heat Exchanger U-Factor Times Area Value {W/K} + CoolingSetpointModulated,!- Control Type + Secondary CW Supply Outlet Node, !- Heat Exchanger Setpoint Node Name + 0.2, !- Minimum Temperature Difference to Activate Heat Exchanger {deltaC} + LoopToLoop; !- Heat Transfer Metering End Use Type + + Sizing:Plant, + Secondary Chilled Water Loop, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 14.0, !- Design Loop Exit Temperature {C} + 7.0, !- Loop Design Temperature Difference {deltaC} + Coincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + PlantLoop, + Secondary Chilled Water Loop, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Secondary CW Loop Operation, !- Plant Equipment Operation Scheme Name + Secondary CW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Secondary CW Supply Inlet Node, !- Plant Side Inlet Node Name + Secondary CW Supply Outlet Node, !- Plant Side Outlet Node Name + Secondary Cooling Supply Side Branches, !- Plant Side Branch List Name + Secondary Cooling Supply Side Connectors, !- Plant Side Connector List Name + Secondary CW Demand Inlet Node, !- Demand Side Inlet Node Name + Secondary CW Demand Outlet Node, !- Demand Side Outlet Node Name + Secondary Cooling Demand Side Branches, !- Demand Side Branch List Name + Secondary Cooling Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + SetpointManager:Scheduled, + Secondary Chilled Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + Secondary CW Loop Temp Schedule, !- Schedule Name + Secondary Chilled Water Loop Setpoint Node List; !- Setpoint Node or NodeList Name + + Schedule:Compact, + Secondary CW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Alldays, !- Field 2 + Until: 24:00,14.0; !- Field 3 + + NodeList, + Secondary Chilled Water Loop Setpoint Node List, !- Name + Secondary CW Supply Outlet Node; !- Node 1 Name + + BranchList, + Secondary Cooling Supply Side Branches, !- Name + Secondary CW Pump Branch,!- Branch 1 Name + Secondary CW HX supply Branch, !- Branch 2 Name + Secondary Cooling Supply Bypass Branch, !- Branch 3 Name + Secondary Cooling Supply Outlet; !- Branch 4 Name + + BranchList, + Secondary Cooling Demand Side Branches, !- Name + Secondary Cooling Demand Inlet, !- Branch 1 Name + Secondary CW Demand Load Branch 1, !- Branch 2 Name + Secondary CW Demand Load Branch 2, !- Branch 3 Name + Secondary CW Demand Load Branch 3, !- Branch 4 Name + Secondary CW Demand Load Branch 4, !- Branch 5 Name + Secondary CW Demand Load Branch 5, !- Branch 6 Name + Secondary CW Demand Load Branch 6, !- Branch 7 Name + Secondary CW Demand Load Branch 7, !- Branch 8 Name + Secondary CW Demand Load Branch 8, !- Branch 9 Name + Secondary CW Demand Load Branch 9, !- Branch 10 Name + Secondary CW Demand Load Branch 10, !- Branch 11 Name + Secondary CW Demand Load Branch 11, !- Branch 12 Name + Secondary CW Demand Load Branch 12, !- Branch 13 Name + Secondary CW Demand Load Branch 13, !- Branch 14 Name + Secondary CW Demand Load Branch 14, !- Branch 15 Name + Secondary CW Demand Load Branch 15, !- Branch 16 Name + Secondary Cooling Demand Bypass Branch, !- Branch 17 Name + Secondary Cooling Demand Outlet; !- Branch 18 Name + + ConnectorList, + Secondary Cooling Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary CW Loop Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary CW Loop Mixer; !- Connector 2 Name + + ConnectorList, + Secondary Cooling Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary CW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary CW Demand Mixer; !- Connector 2 Name + + Branch, + Secondary Cooling Demand Inlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Cooling Demand Side Inlet Pipe, !- Component 1 Name + Secondary CW Demand Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Cooling Demand Side Inlet Pipe, !- Name + Secondary CW Demand Inlet Node, !- Inlet Node Name + Secondary CW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_2 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_2 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_1 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_1 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_4 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_4 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_3 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_3 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 5, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_2 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_2 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 6, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_1 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_1 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 7, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_4 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_4 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 8, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_bottom 4pipe Beam, !- Component 1 Name + Core_bottom 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Core_bottom 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 9, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_mid 4pipe Beam, !- Component 1 Name + Core_mid 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Core_mid 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 10, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_top 4pipe Beam, !- Component 1 Name + Core_top 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Core_top 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 11, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_3 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_3 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 12, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_2 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_2 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 13, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_1 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_1 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 14, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_4 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_4 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW Demand Load Branch 15, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_3 4pipe Beam CW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_3 4pipe Beam CW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Cooling Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Cooling Demand Side Bypass, !- Component 1 Name + Secondary CW Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Cooling Demand Side Bypass, !- Name + Secondary CW Demand Bypass Inlet Node, !- Inlet Node Name + Secondary CW Demand Bypass Outlet Node; !- Outlet Node Name + + Branch, + Secondary Cooling Demand Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary CW Demand Side Outlet Pipe, !- Component 1 Name + Secondary CW Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Demand Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary CW Demand Side Outlet Pipe, !- Name + Secondary CW Demand Exit Pipe Inlet Node, !- Inlet Node Name + Secondary CW Demand Outlet Node; !- Outlet Node Name + + Branch, + Secondary Cooling Supply Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Supply Side Outlet Pipe, !- Component 1 Name + Secondary Supply Side Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Supply Side Outlet Pipe, !- Name + Secondary Supply Side Exit Pipe Inlet Node, !- Inlet Node Name + Secondary CW Supply Outlet Node; !- Outlet Node Name + + Branch, + Secondary CW Pump Branch,!- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Secondary CW Circ Pump, !- Component 1 Name + Secondary CW Supply Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary CW HX supply Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary CW HX, !- Component 1 Name + Secondary CW HX Inlet Node, !- Component 1 Inlet Node Name + Secondary CW HX Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Cooling Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Supply Side Bypass, !- Component 1 Name + Secondary CW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary CW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Supply Side Bypass, !- Name + Secondary CW Supply Bypass Inlet Node, !- Inlet Node Name + Secondary CW Supply Bypass Outlet Node; !- Outlet Node Name + + Connector:Splitter, + Secondary CW Loop Splitter, !- Name + Secondary CW Pump Branch,!- Inlet Branch Name + Secondary CW HX supply Branch, !- Outlet Branch 1 Name + Secondary Cooling Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Secondary CW Loop Mixer, !- Name + Secondary Cooling Supply Outlet, !- Outlet Branch Name + Secondary CW HX supply Branch, !- Inlet Branch 1 Name + Secondary Cooling Supply Bypass Branch; !- Inlet Branch 2 Name + + Connector:Splitter, + Secondary CW Demand Splitter, !- Name + Secondary Cooling Demand Inlet, !- Inlet Branch Name + Secondary CW Demand Load Branch 1, !- Outlet Branch 1 Name + Secondary CW Demand Load Branch 2, !- Outlet Branch 2 Name + Secondary CW Demand Load Branch 3, !- Outlet Branch 3 Name + Secondary CW Demand Load Branch 4, !- Outlet Branch 4 Name + Secondary CW Demand Load Branch 5, !- Outlet Branch 5 Name + Secondary CW Demand Load Branch 6, !- Outlet Branch 6 Name + Secondary CW Demand Load Branch 7, !- Outlet Branch 7 Name + Secondary CW Demand Load Branch 8, !- Outlet Branch 8 Name + Secondary CW Demand Load Branch 9, !- Outlet Branch 9 Name + Secondary CW Demand Load Branch 10, !- Outlet Branch 10 Name + Secondary CW Demand Load Branch 11, !- Outlet Branch 11 Name + Secondary CW Demand Load Branch 12, !- Outlet Branch 12 Name + Secondary CW Demand Load Branch 13, !- Outlet Branch 13 Name + Secondary CW Demand Load Branch 14, !- Outlet Branch 14 Name + Secondary CW Demand Load Branch 15, !- Outlet Branch 15 Name + Secondary Cooling Demand Bypass Branch; !- Outlet Branch 16 Name + + Connector:Mixer, + Secondary CW Demand Mixer, !- Name + Secondary Cooling Demand Outlet, !- Outlet Branch Name + Secondary CW Demand Load Branch 1, !- Inlet Branch 1 Name + Secondary CW Demand Load Branch 2, !- Inlet Branch 2 Name + Secondary CW Demand Load Branch 3, !- Inlet Branch 3 Name + Secondary CW Demand Load Branch 4, !- Inlet Branch 4 Name + Secondary CW Demand Load Branch 5, !- Inlet Branch 5 Name + Secondary CW Demand Load Branch 6, !- Inlet Branch 6 Name + Secondary CW Demand Load Branch 7, !- Inlet Branch 7 Name + Secondary CW Demand Load Branch 8, !- Inlet Branch 8 Name + Secondary CW Demand Load Branch 9, !- Inlet Branch 9 Name + Secondary CW Demand Load Branch 10, !- Inlet Branch 10 Name + Secondary CW Demand Load Branch 11, !- Inlet Branch 11 Name + Secondary CW Demand Load Branch 12, !- Inlet Branch 12 Name + Secondary CW Demand Load Branch 13, !- Inlet Branch 13 Name + Secondary CW Demand Load Branch 14, !- Inlet Branch 14 Name + Secondary CW Demand Load Branch 15, !- Inlet Branch 15 Name + Secondary Cooling Demand Bypass Branch; !- Inlet Branch 16 Name + + PlantEquipmentOperationSchemes, + Secondary CW Loop Operation, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + Pump:VariableSpeed, + Secondary CW Circ Pump, !- Name + Secondary CW Supply Inlet Node, !- Inlet Node Name + Secondary CW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + +!____________________________________________ + + Branch, + HeatSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Demand Bypass Pipe, !- Component 1 Name + HeatSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Demand Inlet Pipe, !- Component 1 Name + HeatSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Demand Inlet Pipe-HeatSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + Basement VAV Box Reheat Coil, !- Component 1 Name + Basement VAV Box Reheat CoilDemand Inlet Node, !- Component 1 Inlet Node Name + Basement VAV Box Reheat CoilDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + VAV_5_HeatC, !- Component 1 Name + VAV_5_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + VAV_5_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + CV_1_HeatC, !- Component 1 Name + CV_1_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_1_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + CV_2_HeatC, !- Component 1 Name + CV_2_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_2_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Load Branch 5, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Water, !- Component 1 Object Type + CV_3_HeatC, !- Component 1 Name + CV_3_HeatCDemand Inlet Node, !- Component 1 Inlet Node Name + CV_3_HeatCDemand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Demand Outlet Pipe, !- Component 1 Name + HeatSys1 Demand Mixer-HeatSys1 Demand Outlet Pipe, !- Component 1 Inlet Node Name + HeatSys1 Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Supply Equipment Branch 1, + , + HeatPump:PlantLoop:EIR:Heating, + AWHP_1 Heating Side, + AWHP_1 Heating Side Inlet, + AWHP_1 Heating Side Outlet; + + Branch, + HeatSys1 Supply Equipment Branch 2, + , + HeatPump:PlantLoop:EIR:Heating, + AWHP_2 Heating Side, + AWHP_2 Heating Side Inlet, + AWHP_2 Heating Side Outlet; + + Branch, + CoolSys1 Supply Equipment Branch 1, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + AWHP_1 Cooling Side, + AWHP_1 Cooling Side Inlet Node, + AWHP_1 Cooling Side Outlet Node; + + Branch, + CoolSys1 Supply Equipment Branch 2, !- Name + , !- Pressure Drop Curve Name + HeatPump:PlantLoop:EIR:Cooling, + AWHP_2 Cooling Side, + AWHP_2 Cooling Side Inlet Node, + AWHP_2 Cooling Side Outlet Node; + + HeatPump:PlantLoop:EIR:Cooling, + AWHP_1 Cooling Side, !- Name + AWHP_1 Cooling Side Inlet Node, !- Load Side Inlet Node Name + AWHP_1 Cooling Side Outlet Node, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_1 Cooling Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_1 Cooling Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_1 Heating Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + CoolCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + CoolEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2; !- Minimum Part Load Ratio + + OutdoorAir:Node, + AWHP_1 Cooling Side Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Cooling, + AWHP_2 Cooling Side, !- Name + AWHP_2 Cooling Side Inlet Node, !- Load Side Inlet Node Name + AWHP_2 Cooling Side Outlet Node, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_2 Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_2 Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_2 Heating Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + CoolCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + CoolEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2; !- Minimum Part Load Ratio + +!- ACX 140 Biquadratic cooling curves provided by Trane +Curve:Biquadratic, + CoolCapCurveFuncTemp, !- Name + 1.06722728893252, !- Coefficient1 Constant + 0.0460678063570057, !- Coefficient2 x + 0.00034604993757372, !- Coefficient3 x**2 + -0.0069704934525177, !- Coefficient4 y + -0.0000288618548923695, !- Coefficient5 y**2 + -0.000475762640861958, !- Coefficient6 x*y + 2.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37.0, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + CoolEIRCurveFuncTemp, !- Name + 0.440305821838175, !- Coefficient1 Constant + -0.0241323110030793, !- Coefficient2 x + 0.000537914626055751, !- Coefficient3 x**2 + 0.0118716162533228, !- Coefficient4 y + 0.000305785618883187, !- Coefficient5 y**2 + -0.000617329632749052, !- Coefficient6 x*y + 2.0, !- Minimum Value of x + 20.0, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37.0, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + OutdoorAir:Node, + AWHP_2 Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Heating, + AWHP_1 Heating Side, !- Name + AWHP_1 Heating Side Inlet, !- Load Side Inlet Node Name + AWHP_1 Heating Side Outlet, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_1 Heating Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_1 Heating Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_1 Cooling Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + HeatCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + HeatEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1.1, !- Heating To Cooling Capacity Sizing Ratio + GreaterOfHeatingOrCooling, !- Heat Pump Sizing Method + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + -25.0, !- Minimum Source Inlet Temperature + 35.0, !- Maximum Source Inlet Temperature + MinSWTvsOAT, !- Minimum Supply Water Temperature Curve Name + MaxSWTvsOAT, !- Maximum Supply Water Temperature Curve Name + HeatDryCoilFuncOAT, !- Dry Outdoor Correction Factor Curve Name + 10.60675883, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + TimedEmpirical, !- Heat Pump Defrost Control + 0.1166667, !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + TimedDefrostFrequency, !- Timed Demand Defrost Frequency Curve Name + TimedDefrostHeatLoad, !- Timed Demand Defrost Heat Load Penalty Curve Name + TimedDefrostHeatEnergy; !- Timed Demand Defrost Heat Input Energy Fraction Curve Name + + Curve:Quadratic, + MinSWTvsOAT, !- Name + 0.0, !- Coefficient1 Constant + 1.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -17.77778, !- Minimum Value of x !- 0 F + 35.0, !- Maximum Value of x !- 95 F + 20.0, !- Minimum Curve Output + 35.0, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + Curve:Quadratic, + MaxSWTvsOAT, !- Name + 53.1666666666667, !- Coefficient1 Constant + 0.85, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -17.777778, !- Minimum Value of x !- 0 F + 35.0, !- Maximum Value of x !- 95 F + 20.0, !- Minimum Curve Output + 60.0, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Output Unit Type + + OutdoorAir:Node, + AWHP_1 Heating Side Condenser Air Inlet Node, + -1; + + HeatPump:PlantLoop:EIR:Heating, + AWHP_2 Heating Side, !- Name + AWHP_2 Heating Side Inlet, !- Load Side Inlet Node Name + AWHP_2 Heating Side Outlet, !- Load Side Outlet Node Name + AirSource, !- Condenser Type + AWHP_2 Heating Side Condenser Air Inlet Node, !- Source Side Inlet Node Name + AWHP_2 Heating Side Condenser Air Outlet Node, !- Source Side Outlet Node Name + AWHP_2 Cooling Side, !- Companion Heat Pump Name + autosize, !- Load Side Reference Flow Rate {m3/s} + autosize, !- Source Side Reference Flow Rate {m3/s} + autosize, !- Reference Capacity {W} + 2.89, !- Reference Coefficient of Performance {W/W} + 1.0, !- Sizing Factor + HeatCapCurveFuncTemp, !- Capacity Modifier Function of Temperature Curve Name + HeatEIRCurveFuncTemp, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + EIRCurveFuncPLR, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1.1, !- Heating To Cooling Capacity Sizing Ratio + GreaterOfHeatingOrCooling, !- Heat Pump Sizing Method + Setpoint, !- Control Type + VariableSpeedPumping, !- Flow Mode + 0.2, !- Minimum Part Load Ratio + -25.0, !- Minimum Source Inlet Temperature + 35.0, !- Maximum Source Inlet Temperature + MinSWTvsOAT, !- Minimum Supply Water Temperature Curve Name + MaxSWTvsOAT, !- Maximum Supply Water Temperature Curve Name + HeatDryCoilFuncOAT, !- Dry Outdoor Correction Factor Curve Name + 10.60675883, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + TimedEmpirical, !- Heat Pump Defrost Control + 0.1166667, !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + TimedDefrostFrequency, !- Timed Demand Defrost Frequency Curve Name + TimedDefrostHeatLoad, !- Timed Demand Defrost Heat Load Penalty Curve Name + TimedDefrostHeatEnergy; !- Timed Demand Defrost Heat Input Energy Fraction Curve Name + +!-ACX Heating Capacity BiQuadratic created from Trane quadratic curves +Curve:Biquadratic, + HeatCapCurveFuncTemp, !- Name + 0.794900878202383, !- Coefficient1 Constant + 0.00388524034840032, !- Coefficient2 x + -0.0000575169230965453, !- Coefficient3 x**2 + 0.0278109488428528, !- Coefficient4 y + 0.000318168, !- Coefficient5 y**2 + -0.000130572089253355, !- Coefficient6 x*y + 15.0, !- Minimum Value of x + 70.0, !- Maximum Value of x + -17.0, !- Minimum Value of y + 37.22, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + Curve:Biquadratic, + HeatEIRCurveFuncTemp, !- Name + 0.530730392560108, !- Coefficient1 Constant + 0.00655164780603528, !- Coefficient2 x + 0.000263599226028026, !- Coefficient3 x**2 + -0.03620668194737, !- Coefficient4 y + 0.00126617163409192, !- Coefficient5 y**2 + -0.000791224057761721, !- Coefficient6 x*y + 15.0, !- Minimum Value of x + 70.0, !- Maximum Value of x + -17.0, !- Minimum Value of y + 37.22, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + + OutdoorAir:Node, + AWHP_2 Heating Side Condenser Air Inlet Node, + -1; + + Curve:Quadratic, + EIRCurveFuncPLR, !- Name + 1.0, !- Coefficient1 Constant + 0.0, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + Curve:Quadratic, + TimedDefrostHeatEnergy, !- Name + 0.03423, !- Coefficient1 Constant + -0.00072, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + TimedDefrostFrequency, !- Name + 0.71582, !- Coefficient1 Constant + -0.024822, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + TimedDefrostHeatLoad, !- Name + 0.08286, !- Coefficient1 Constant + -0.007812, !- Coefficient2 x + 0.0, !- Coefficient3 x**2 + -30.0, !- Minimum Value of x !- defrost minimum limit? same as min OAT operating limit? use -30 for now + 10.60675883; !- Maximum Value of x !- heat load curve evaluates to 0 here, no more defrost required + + Curve:Quadratic, + HeatDryCoilFuncOAT, !- Name + 0.9574744, !- Coefficient1 Constant + -0.00299322, !- Coefficient2 x + 0.000055728, !- Coefficient3 x**2 + -11.675, !- Minimum Value of x !- curve evaluates to ~1 here + 26.6666667; !- Maximum Value of x !- curve evaluates to min value here, ~ 0.91728 + + Curve:Quadratic, + HeatCapCurveFuncPLR, !- Name + 0.0473, !- Coefficient1 Constant + 0.8643, !- Coefficient2 x + 0.0884, !- Coefficient3 x**2 + 0.0, !- Minimum Value of x + 1.0; !- Maximum Value of x + + + + Branch, + HeatSys1 Supply Equipment Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + HeatSys1 Supply Equipment Bypass Pipe, !- Component 1 Name + HeatSys1 Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Supply Equipment Bypass Pipe, !- Name + HeatSys1 Supply Equip Bypass Inlet Node, !- Inlet Node Name + HeatSys1 Supply Equip Bypass Outlet Node; !- Outlet Node Name + + Branch, + HeatSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + HeatSys1 Pump, !- Component 1 Name + HeatSys1 Supply Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Pump-HeatSys1 BoilerNodeviaConnector; !- Component 1 Outlet Node Name + + Branch, + HeatSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Boiler:HotWater, !- Component 1 Object Type + Primary HW Aux Boiler, !- Component 1 Name + HW Aux Boiler Inlet Node, !- Component 1 Inlet Node Name + HeatSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + Boiler:HotWater, + Primary HW Aux Boiler, !- Name + Electricity, !- Fuel Type + AUTOSIZE, !- Nominal Capacity {W} + 1.0, !- Nominal Thermal Efficiency + LeavingBoiler, !- Efficiency Curve Temperature Evaluation Variable + , !- Normalized Boiler Efficiency Curve Name + AUTOSIZE, !- Design Water Flow Rate {m3/s} + 0.0, !- Minimum Part Load Ratio + 1.2, !- Maximum Part Load Ratio + 1.0, !- Optimum Part Load Ratio + HW Aux Boiler Inlet Node, !- Boiler Water Inlet Node Name + HeatSys1 Supply Outlet Node, !- Boiler Water Outlet Node Name + 95.0, !- Water Outlet Upper Temperature Limit {C} + LeavingSetpointModulated,!- Boiler Flow Mode + 0.0000, !- Parasitic Electric Load {W} + 1.0000; !- Sizing Factor + + ConnectorList, + CoolSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CoolSys1 Demand Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CoolSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + CoolSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CoolSys1 Supply Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CoolSys1 Supply Mixer; !- Connector 2 Name + + ConnectorList, + HeatSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + HeatSys1 Demand Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + HeatSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + HeatSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + HeatSys1 Supply Splitter,!- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + HeatSys1 Supply Mixer; !- Connector 2 Name + + Connector:Splitter, + CoolSys1 Demand Splitter,!- Name + CoolSys1 Demand Inlet Branch, !- Inlet Branch Name + CoolSys1 Demand Load Branch 1, !- Outlet Branch 1 Name + CoolSys1 Demand Load Branch 2, !- Outlet Branch 2 Name + CoolSys1 Demand Load Branch 3, !- Outlet Branch 3 Name + CoolSys1 Demand Load Branch 4, !- Outlet Branch 4 Name + Primary to Secondary CW HX Branch, !- Outlet Branch 5 Name + CoolSys1 Demand Bypass Branch; !- Outlet Branch 6 Name + + Connector:Splitter, + CoolSys1 Supply Splitter,!- Name + CoolSys1 Supply Inlet Branch, !- Inlet Branch Name + CoolSys1 Supply Equipment Branch 1, !- Outlet Branch 1 Name + CoolSys1 Supply Equipment Branch 2; + + Connector:Splitter, + HeatSys1 Demand Splitter,!- Name + HeatSys1 Demand Inlet Branch, !- Inlet Branch Name + HeatSys1 Demand Load Branch 1, !- Outlet Branch 1 Name + HeatSys1 Demand Load Branch 2, !- Outlet Branch 2 Name + HeatSys1 Demand Load Branch 3, !- Outlet Branch 3 Name + HeatSys1 Demand Load Branch 4, !- Outlet Branch 4 Name + HeatSys1 Demand Load Branch 5, !- Outlet Branch 5 Name + Primary to Secondary HW HX Branch, !- Outlet Branch 6 Name + HeatSys1 Demand Bypass Branch; !- Outlet Branch 7 Name + + Connector:Splitter, + HeatSys1 Supply Splitter,!- Name + HeatSys1 Supply Inlet Branch, !- Inlet Branch Name + HeatSys1 Supply Equipment Branch 1, !- Outlet Branch 1 Name + HeatSys1 Supply Equipment Branch 2, !- Outlet Branch 1 Name + HeatSys1 Supply Equipment Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + CoolSys1 Demand Mixer, !- Name + CoolSys1 Demand Outlet Branch, !- Outlet Branch Name + CoolSys1 Demand Load Branch 1, !- Inlet Branch 1 Name + CoolSys1 Demand Load Branch 2, !- Inlet Branch 2 Name + CoolSys1 Demand Load Branch 3, !- Inlet Branch 3 Name + CoolSys1 Demand Load Branch 4, !- Inlet Branch 4 Name + Primary to Secondary CW HX Branch, !- Inlet Branch 5 Name + CoolSys1 Demand Bypass Branch; !- Inlet Branch 6 Name + + Connector:Mixer, + CoolSys1 Supply Mixer, !- Name + CoolSys1 Supply Outlet Branch, !- Outlet Branch Name + CoolSys1 Supply Equipment Branch 1, !- Inlet Branch 1 Name + CoolSys1 Supply Equipment Branch 2; !- Inlet Branch 2 Name + + Connector:Mixer, + HeatSys1 Demand Mixer, !- Name + HeatSys1 Demand Outlet Branch, !- Outlet Branch Name + HeatSys1 Demand Load Branch 1, !- Inlet Branch 1 Name + HeatSys1 Demand Load Branch 2, !- Inlet Branch 2 Name + HeatSys1 Demand Load Branch 3, !- Inlet Branch 3 Name + HeatSys1 Demand Load Branch 4, !- Inlet Branch 4 Name + HeatSys1 Demand Load Branch 5, !- Inlet Branch 5 Name + Primary to Secondary HW HX Branch, !- Inlet Branch 6 Name + HeatSys1 Demand Bypass Branch; !- Inlet Branch 7 Name + + Connector:Mixer, + HeatSys1 Supply Mixer, !- Name + HeatSys1 Supply Outlet Branch, !- Outlet Branch Name + HeatSys1 Supply Equipment Branch 1, !- Inlet Branch 1 Name + HeatSys1 Supply Equipment Branch 2, !- Outlet Branch 1 Name + HeatSys1 Supply Equipment Bypass Branch; !- Inlet Branch 2 Name + + Pipe:Adiabatic, + CoolSys1 Demand Bypass Pipe, !- Name + CoolSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + CoolSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Demand Inlet Pipe, !- Name + CoolSys1 Demand Inlet Node, !- Inlet Node Name + CoolSys1 Demand Inlet Pipe-CoolSys1 Demand Mixer; !- Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Demand Outlet Pipe, !- Name + CoolSys1 Demand Mixer-CoolSys1 Demand Outlet Pipe, !- Inlet Node Name + CoolSys1 Demand Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CoolSys1 Supply Outlet Pipe, !- Name + CoolSys1 Supply Mixer-CoolSys1 Supply Outlet Pipe, !- Inlet Node Name + CoolSys1 Supply Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Demand Bypass Pipe, !- Name + HeatSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + HeatSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Demand Inlet Pipe, !- Name + HeatSys1 Demand Inlet Node, !- Inlet Node Name + HeatSys1 Demand Inlet Pipe-HeatSys1 Demand Mixer; !- Outlet Node Name + + Pipe:Adiabatic, + HeatSys1 Demand Outlet Pipe, !- Name + HeatSys1 Demand Mixer-HeatSys1 Demand Outlet Pipe, !- Inlet Node Name + HeatSys1 Demand Outlet Node; !- Outlet Node Name + + Branch, + Primary to Secondary HW HX Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary HW HX, !- Component 1 Name + Primary HW HX Inlet Node,!- Component 1 Inlet Node Name + Primary HW HX Outet Node;!- Component 1 Outlet Node Name + + HeatExchanger:FluidToFluid, + Primary to Secondary HW HX, !- Name + always_on, !- Availability Schedule Name + Primary HW HX Inlet Node,!- Loop Demand Side Inlet Node Name + Primary HW HX Outet Node,!- Loop Demand Side Outlet Node Name + autosize, !- Loop Demand Side Design Flow Rate {m3/s} + Secondary HW HX Inlet Node, !- Loop Supply Side Inlet Node Name + Secondary HW HX Outlet Node, !- Loop Supply Side Outlet Node Name + Autosize, !- Loop Supply Side Design Flow Rate {m3/s} + CrossFlowBothMixed, !- Heat Exchange Model Type + Autosize, !- Heat Exchanger U-Factor Times Area Value {W/K} + HeatingSetpointModulated,!- Control Type + Secondary HW Supply Outlet Node, !- Heat Exchanger Setpoint Node Name + 0.2, !- Minimum Temperature Difference to Activate Heat Exchanger {deltaC} + LoopToLoop; !- Heat Transfer Metering End Use Type + + Sizing:Plant, + Secondary Hot Water Loop,!- Plant or Condenser Loop Name + Heating, !- Loop Type + 46.0, !- Design Loop Exit Temperature {C} + 18.0, !- Loop Design Temperature Difference {deltaC} + Coincident, !- Sizing Option + 1, !- Zone Timesteps in Averaging Window + None; !- Coincident Sizing Factor Mode + + PlantLoop, + Secondary Hot Water Loop,!- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Secondary HW Loop Operation, !- Plant Equipment Operation Scheme Name + Secondary HW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Secondary HW Supply Inlet Node, !- Plant Side Inlet Node Name + Secondary HW Supply Outlet Node, !- Plant Side Outlet Node Name + Secondary Heating Supply Side Branches, !- Plant Side Branch List Name + Secondary Heating Supply Side Connectors, !- Plant Side Connector List Name + Secondary HW Demand Inlet Node, !- Demand Side Inlet Node Name + Secondary HW Demand Outlet Node, !- Demand Side Outlet Node Name + Secondary Heating Demand Side Branches, !- Demand Side Branch List Name + Secondary Heating Demand Side Connectors, !- Demand Side Connector List Name + SequentialLoad; !- Load Distribution Scheme + + SetpointManager:Scheduled, + Secondary Heating Water Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + Secondary HW Loop Temp Schedule, !- Schedule Name + Secondary Heating Water Loop Setpoint Node List; !- Setpoint Node or NodeList Name + + Schedule:Compact, + Secondary HW Loop Temp Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Alldays, !- Field 2 + Until: 24:00,45.0; !- Field 3 + + NodeList, + Secondary Heating Water Loop Setpoint Node List, !- Name + Secondary HW Supply Outlet Node; !- Node 1 Name + + BranchList, + Secondary Heating Supply Side Branches, !- Name + Secondary HW Pump Branch,!- Branch 1 Name + Secondary HW HX supply Branch, !- Branch 2 Name + Secondary Heating Supply Bypass Branch, !- Branch 3 Name + Secondary Heating Supply Outlet; !- Branch 4 Name + + BranchList, + Secondary Heating Demand Side Branches, !- Name + Secondary Heating Demand Inlet, !- Branch 1 Name + Secondary HW Demand Load Branch 1, !- Branch 2 Name + Secondary HW Demand Load Branch 2, !- Branch 3 Name + Secondary HW Demand Load Branch 3, !- Branch 4 Name + Secondary HW Demand Load Branch 4, !- Branch 5 Name + Secondary HW Demand Load Branch 5, !- Branch 6 Name + Secondary HW Demand Load Branch 6, !- Branch 7 Name + Secondary HW Demand Load Branch 7, !- Branch 8 Name + Secondary HW Demand Load Branch 8, !- Branch 9 Name + Secondary HW Demand Load Branch 9, !- Branch 10 Name + Secondary HW Demand Load Branch 10, !- Branch 11 Name + Secondary HW Demand Load Branch 11, !- Branch 12 Name + Secondary HW Demand Load Branch 12, !- Branch 13 Name + Secondary HW Demand Load Branch 13, !- Branch 14 Name + Secondary HW Demand Load Branch 14, !- Branch 15 Name + Secondary HW Demand Load Branch 15, !- Branch 16 Name + Secondary Heating Demand Bypass Branch, !- Branch 17 Name + Secondary Heating Demand Outlet; !- Branch 18 Name + + ConnectorList, + Secondary Heating Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary HW Loop Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary HW Loop Mixer; !- Connector 2 Name + + ConnectorList, + Secondary Heating Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Secondary HW Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Secondary HW Demand Mixer; !- Connector 2 Name + + Branch, + Secondary Heating Demand Inlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Heating Demand Side Inlet Pipe, !- Component 1 Name + Secondary HW Demand Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Heating Demand Side Inlet Pipe, !- Name + Secondary HW Demand Inlet Node, !- Inlet Node Name + Secondary HW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_2 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_2 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_1 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_1 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_4 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_4 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 4, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_3 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_3 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 5, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_2 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_2 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 6, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_1 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_1 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 7, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_top_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_top_ZN_4 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_top_ZN_4 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 8, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_bottom 4pipe Beam, !- Component 1 Name + Core_bottom 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Core_bottom 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 9, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_mid 4pipe Beam, !- Component 1 Name + Core_mid 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Core_mid 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 10, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Core_top 4pipe Beam, !- Component 1 Name + Core_top 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Core_top 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 11, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_3 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_3 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 12, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_2 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_2 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_2 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 13, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_1 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_1 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_1 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 14, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_bot_ZN_4 4pipe Beam, !- Component 1 Name + Perimeter_bot_ZN_4 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_bot_ZN_4 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW Demand Load Branch 15, !- Name + , !- Pressure Drop Curve Name + AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam, !- Component 1 Object Type + Perimeter_mid_ZN_3 4pipe Beam, !- Component 1 Name + Perimeter_mid_ZN_3 4pipe Beam HW Inlet Node, !- Component 1 Inlet Node Name + Perimeter_mid_ZN_3 4pipe Beam HW Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary Heating Demand Side Bypass, !- Component 1 Name + Secondary HW Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary Heating Demand Side Bypass, !- Name + Secondary HW Demand Bypass Inlet Node, !- Inlet Node Name + Secondary HW Demand Bypass Outlet Node; !- Outlet Node Name + + Branch, + Secondary Heating Demand Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary HW Demand Side Outlet Pipe, !- Component 1 Name + Secondary HW Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Demand Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary HW Demand Side Outlet Pipe, !- Name + Secondary HW Demand Exit Pipe Inlet Node, !- Inlet Node Name + Secondary HW Demand Outlet Node; !- Outlet Node Name + + Branch, + Secondary Heating Supply Outlet, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary HW Supply Side Outlet Pipe, !- Component 1 Name + Secondary HW Supply Side Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Supply Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary HW Supply Side Outlet Pipe, !- Name + Secondary HW Supply Side Exit Pipe Inlet Node, !- Inlet Node Name + Secondary HW Supply Outlet Node; !- Outlet Node Name + + Branch, + Secondary HW Pump Branch,!- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Secondary HW Circ Pump, !- Component 1 Name + Secondary HW Supply Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary HW HX supply Branch, !- Name + , !- Pressure Drop Curve Name + HeatExchanger:FluidToFluid, !- Component 1 Object Type + Primary to Secondary HW HX, !- Component 1 Name + Secondary HW HX Inlet Node, !- Component 1 Inlet Node Name + Secondary HW HX Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Secondary Heating Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Secondary HW Supply Side Bypass, !- Component 1 Name + Secondary HW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Secondary HW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + Secondary HW Supply Side Bypass, !- Name + Secondary HW Supply Bypass Inlet Node, !- Inlet Node Name + Secondary HW Supply Bypass Outlet Node; !- Outlet Node Name + + Connector:Splitter, + Secondary HW Loop Splitter, !- Name + Secondary HW Pump Branch,!- Inlet Branch Name + Secondary HW HX supply branch, !- Outlet Branch 1 Name + Secondary Heating Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + Secondary HW Loop Mixer, !- Name + Secondary Heating Supply Outlet, !- Outlet Branch Name + Secondary HW HX supply branch, !- Inlet Branch 1 Name + Secondary Heating Supply Bypass Branch; !- Inlet Branch 2 Name + + Connector:Splitter, + Secondary HW Demand Splitter, !- Name + Secondary Heating Demand Inlet, !- Inlet Branch Name + Secondary HW Demand Load Branch 1, !- Outlet Branch 1 Name + Secondary HW Demand Load Branch 2, !- Outlet Branch 2 Name + Secondary HW Demand Load Branch 3, !- Outlet Branch 3 Name + Secondary HW Demand Load Branch 4, !- Outlet Branch 4 Name + Secondary HW Demand Load Branch 5, !- Outlet Branch 5 Name + Secondary HW Demand Load Branch 6, !- Outlet Branch 6 Name + Secondary HW Demand Load Branch 7, !- Outlet Branch 7 Name + Secondary HW Demand Load Branch 8, !- Outlet Branch 8 Name + Secondary HW Demand Load Branch 9, !- Outlet Branch 9 Name + Secondary HW Demand Load Branch 10, !- Outlet Branch 10 Name + Secondary HW Demand Load Branch 11, !- Outlet Branch 11 Name + Secondary HW Demand Load Branch 12, !- Outlet Branch 12 Name + Secondary HW Demand Load Branch 13, !- Outlet Branch 13 Name + Secondary HW Demand Load Branch 14, !- Outlet Branch 14 Name + Secondary HW Demand Load Branch 15, !- Outlet Branch 15 Name + Secondary Heating Demand Bypass Branch; !- Outlet Branch 16 Name + + Connector:Mixer, + Secondary HW Demand Mixer, !- Name + Secondary Heating Demand Outlet, !- Outlet Branch Name + Secondary HW Demand Load Branch 1, !- Inlet Branch 1 Name + Secondary HW Demand Load Branch 2, !- Inlet Branch 2 Name + Secondary HW Demand Load Branch 3, !- Inlet Branch 3 Name + Secondary HW Demand Load Branch 4, !- Inlet Branch 4 Name + Secondary HW Demand Load Branch 5, !- Inlet Branch 5 Name + Secondary HW Demand Load Branch 6, !- Inlet Branch 6 Name + Secondary HW Demand Load Branch 7, !- Inlet Branch 7 Name + Secondary HW Demand Load Branch 8, !- Inlet Branch 8 Name + Secondary HW Demand Load Branch 9, !- Inlet Branch 9 Name + Secondary HW Demand Load Branch 10, !- Inlet Branch 10 Name + Secondary HW Demand Load Branch 11, !- Inlet Branch 11 Name + Secondary HW Demand Load Branch 12, !- Inlet Branch 12 Name + Secondary HW Demand Load Branch 13, !- Inlet Branch 13 Name + Secondary HW Demand Load Branch 14, !- Inlet Branch 14 Name + Secondary HW Demand Load Branch 15, !- Inlet Branch 15 Name + Secondary Heating Demand Bypass Branch; !- Inlet Branch 16 Name + + PlantEquipmentOperationSchemes, + Secondary HW Loop Operation, !- Name + PlantEquipmentOperation:ChillerHeaterChangeover, !- Control Scheme 1 Object Type + Two AWHP Operation Scheme, !- Control Scheme 1 Name + ALways_on; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:Uncontrolled, + Secondary HW HX, !- Name + Primary to Secondary HW HX equip; !- Equipment List Name + + PlantEquipmentList, + Primary to Secondary HW HX equip, !- Name + HeatExchanger:FluidToFluid, !- Equipment 1 Object Type + Primary to Secondary HW HX; !- Equipment 1 Name + + Pump:VariableSpeed, + Secondary HW Circ Pump, !- Name + Secondary HW Supply Inlet Node, !- Inlet Node Name + Secondary HW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + +!____________________________________________ +! ***SCHEDULES*** + + Schedule:Compact, + CW-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,6.7; !- Field 3 + + Schedule:Compact, + HW-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,59; !- Field 3 + +! ***SWH EQUIPMENT*** + + WaterHeater:Mixed, + SWHSys1 Water Heater, !- Name + 0.7571, !- Tank Volume {m3} + SWHSys1 Water Heater Setpoint Temperature Schedule Name, !- Setpoint Temperature Schedule Name + 2.0, !- Deadband Temperature Difference {deltaC} + 82.2222, !- Maximum Temperature Limit {C} + Cycle, !- Heater Control Type + 845000, !- Heater Maximum Capacity {W} + , !- Heater Minimum Capacity {W} + , !- Heater Ignition Minimum Flow Rate {m3/s} + , !- Heater Ignition Delay {s} + Electricity, !- Heater Fuel Type + 1.0, !- Heater Thermal Efficiency + , !- Part Load Factor Curve Name + 20, !- Off Cycle Parasitic Fuel Consumption Rate {W} + Electricity, !- Off Cycle Parasitic Fuel Type + 0.8, !- Off Cycle Parasitic Heat Fraction to Tank + , !- On Cycle Parasitic Fuel Consumption Rate {W} + Electricity, !- On Cycle Parasitic Fuel Type + , !- On Cycle Parasitic Heat Fraction to Tank + SCHEDULE, !- Ambient Temperature Indicator + SWHSys1 Water Heater Ambient Temperature Schedule Name, !- Ambient Temperature Schedule Name + , !- Ambient Temperature Zone Name + , !- Ambient Temperature Outdoor Air Node Name + 6.0, !- Off Cycle Loss Coefficient to Ambient Temperature {W/K} + , !- Off Cycle Loss Fraction to Zone + 6.0, !- On Cycle Loss Coefficient to Ambient Temperature {W/K} + , !- On Cycle Loss Fraction to Zone + , !- Peak Use Flow Rate {m3/s} + , !- Use Flow Rate Fraction Schedule Name + , !- Cold Water Supply Temperature Schedule Name + SWHSys1 Pump-SWHSys1 Water HeaterNode, !- Use Side Inlet Node Name + SWHSys1 Supply Equipment Outlet Node, !- Use Side Outlet Node Name + 1.0, !- Use Side Effectiveness + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + 1.0, !- Source Side Effectiveness + AUTOSIZE, !- Use Side Design Flow Rate {m3/s} + AUTOSIZE, !- Source Side Design Flow Rate {m3/s} + 1.5; !- Indirect Water Heating Recovery Time {hr} + + WaterUse:Equipment, + Core_bottom Water Equipment, !- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_bottom, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + WaterUse:Equipment, + Core_mid Water Equipment,!- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_mid, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + WaterUse:Equipment, + Core_top Water Equipment,!- Name + , !- End-Use Subcategory + 2.24e-005, !- Peak Flow Rate {m3/s} + BLDG_SWH_SCH, !- Flow Rate Fraction Schedule Name + Water Equipment Temp Sched, !- Target Temperature Schedule Name + Water Equipment Hot Supply Temp Sched, !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + Core_top, !- Zone Name + Water Equipment Sensible fract sched, !- Sensible Fraction Schedule Name + Water Equipment Latent fract sched; !- Latent Fraction Schedule Name + + PlantEquipmentList, + SWHSys1 Equipment List, !- Name + WaterHeater:Mixed, !- Equipment 1 Object Type + SWHSys1 Water Heater; !- Equipment 1 Name + + Pump:VariableSpeed, + SWHSys1 Pump, !- Name + SWHSys1 Supply Inlet Node, !- Inlet Node Name + SWHSys1 Pump-SWHSys1 Water HeaterNodeviaConnector, !- Outlet Node Name + AUTOSIZE, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + AUTOSIZE, !- Design Power Consumption {W} + 0.85, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0.0, !- Design Minimum Flow Rate {m3/s} + Intermittent; !- Pump Control Type + +! ***SWH SIZING & CONTROLS*** + + Sizing:Plant, + SWHSys1, !- Plant or Condenser Loop Name + Heating, !- Loop Type + 60, !- Design Loop Exit Temperature {C} + 5.0; !- Loop Design Temperature Difference {deltaC} + + SetpointManager:Scheduled, + SWHSys1 Loop Setpoint Manager, !- Name + Temperature, !- Control Variable + SWHSys1-Loop-Temp-Schedule, !- Schedule Name + SWHSys1 Supply Outlet Node; !- Setpoint Node or NodeList Name + + PlantEquipmentOperationSchemes, + SWHSys1 Loop Operation Scheme List, !- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + SWHSys1 Operation Scheme,!- Control Scheme 1 Name + ALWAYS_ON; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:HeatingLoad, + SWHSys1 Operation Scheme,!- Name + 0.0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + SWHSys1 Equipment List; !- Range 1 Equipment List Name + +! ***SWH LOOP*** + + PlantLoop, + SWHSys1, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + SWHSys1 Loop Operation Scheme List, !- Plant Equipment Operation Scheme Name + SWHSys1 Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 60.0, !- Maximum Loop Temperature {C} + 10.0, !- Minimum Loop Temperature {C} + AUTOSIZE, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + AUTOSIZE, !- Plant Loop Volume {m3} + SWHSys1 Supply Inlet Node, !- Plant Side Inlet Node Name + SWHSys1 Supply Outlet Node, !- Plant Side Outlet Node Name + SWHSys1 Supply Branches, !- Plant Side Branch List Name + SWHSys1 Supply Connectors, !- Plant Side Connector List Name + SWHSys1 Demand Inlet Node, !- Demand Side Inlet Node Name + SWHSys1 Demand Outlet Node, !- Demand Side Outlet Node Name + SWHSys1 Demand Branches, !- Demand Side Branch List Name + SWHSys1 Demand Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + +! ***SWH CONNECTIONS*** + + BranchList, + SWHSys1 Demand Branches, !- Name + SWHSys1 Demand Inlet Branch, !- Branch 1 Name + SWHSys1 Demand Load Branch 1, !- Branch 2 Name + SWHSys1 Demand Load Branch 2, !- Branch 3 Name + SWHSys1 Demand Load Branch 3, !- Branch 4 Name + SWHSys1 Demand Bypass Branch, !- Branch 5 Name + SWHSys1 Demand Outlet Branch; !- Branch 6 Name + + BranchList, + SWHSys1 Supply Branches, !- Name + SWHSys1 Supply Inlet Branch, !- Branch 1 Name + SWHSys1 Supply Equipment Branch, !- Branch 2 Name + SWHSys1 Supply Equipment Bypass Branch, !- Branch 3 Name + SWHSys1 Supply Outlet Branch; !- Branch 4 Name + + Branch, + SWHSys1 Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Bypass Pipe, !- Component 1 Name + SWHSys1 Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Inlet Pipe, !- Component 1 Name + SWHSys1 Demand Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Demand Inlet Pipe-SWHSys1 Demand Mixer; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 1, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_bottom Water Equipment, !- Component 1 Name + Core_bottom Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_bottom Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 2, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_mid Water Equipment,!- Component 1 Name + Core_mid Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_mid Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Load Branch 3, !- Name + , !- Pressure Drop Curve Name + WaterUse:Connections, !- Component 1 Object Type + Core_top Water Equipment,!- Component 1 Name + Core_top Water Equipment Water Inlet Node, !- Component 1 Inlet Node Name + Core_top Water Equipment Water Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Demand Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Demand Outlet Pipe, !- Component 1 Name + SWHSys1 Demand Mixer-SWHSys1 Demand Outlet Pipe, !- Component 1 Inlet Node Name + SWHSys1 Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Equipment Branch, !- Name + , !- Pressure Drop Curve Name + WaterHeater:Mixed, !- Component 1 Object Type + SWHSys1 Water Heater, !- Component 1 Name + SWHSys1 Pump-SWHSys1 Water HeaterNode, !- Component 1 Inlet Node Name + SWHSys1 Supply Equipment Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Equipment Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Supply Equipment Bypass Pipe, !- Component 1 Name + SWHSys1 Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + SWHSys1 Pump, !- Component 1 Name + SWHSys1 Supply Inlet Node, !- Component 1 Inlet Node Name + SWHSys1 Pump-SWHSys1 Water HeaterNodeviaConnector; !- Component 1 Outlet Node Name + + Branch, + SWHSys1 Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + SWHSys1 Supply Outlet Pipe, !- Component 1 Name + SWHSys1 Supply Mixer-SWHSys1 Supply Outlet Pipe, !- Component 1 Inlet Node Name + SWHSys1 Supply Outlet Node; !- Component 1 Outlet Node Name + + ConnectorList, + SWHSys1 Demand Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + SWHSys1 Demand Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + SWHSys1 Demand Mixer; !- Connector 2 Name + + ConnectorList, + SWHSys1 Supply Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + SWHSys1 Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + SWHSys1 Supply Mixer; !- Connector 2 Name + + WaterUse:Connections, + Core_bottom Water Equipment, !- Name + Core_bottom Water Equipment Water Inlet Node, !- Inlet Node Name + Core_bottom Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_bottom Water Equipment; !- Water Use Equipment 1 Name + + WaterUse:Connections, + Core_mid Water Equipment,!- Name + Core_mid Water Equipment Water Inlet Node, !- Inlet Node Name + Core_mid Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_mid Water Equipment;!- Water Use Equipment 1 Name + + WaterUse:Connections, + Core_top Water Equipment,!- Name + Core_top Water Equipment Water Inlet Node, !- Inlet Node Name + Core_top Water Equipment Water Outlet Node, !- Outlet Node Name + , !- Supply Water Storage Tank Name + , !- Reclamation Water Storage Tank Name + , !- Hot Water Supply Temperature Schedule Name + , !- Cold Water Supply Temperature Schedule Name + , !- Drain Water Heat Exchanger Type + , !- Drain Water Heat Exchanger Destination + , !- Drain Water Heat Exchanger U-Factor Times Area {W/K} + Core_top Water Equipment;!- Water Use Equipment 1 Name + + Connector:Splitter, + SWHSys1 Demand Splitter, !- Name + SWHSys1 Demand Inlet Branch, !- Inlet Branch Name + SWHSys1 Demand Load Branch 1, !- Outlet Branch 1 Name + SWHSys1 Demand Load Branch 2, !- Outlet Branch 2 Name + SWHSys1 Demand Load Branch 3, !- Outlet Branch 3 Name + SWHSys1 Demand Bypass Branch; !- Outlet Branch 4 Name + + Connector:Splitter, + SWHSys1 Supply Splitter, !- Name + SWHSys1 Supply Inlet Branch, !- Inlet Branch Name + SWHSys1 Supply Equipment Branch, !- Outlet Branch 1 Name + SWHSys1 Supply Equipment Bypass Branch; !- Outlet Branch 2 Name + + Connector:Mixer, + SWHSys1 Demand Mixer, !- Name + SWHSys1 Demand Outlet Branch, !- Outlet Branch Name + SWHSys1 Demand Load Branch 1, !- Inlet Branch 1 Name + SWHSys1 Demand Load Branch 2, !- Inlet Branch 2 Name + SWHSys1 Demand Load Branch 3, !- Inlet Branch 3 Name + SWHSys1 Demand Bypass Branch; !- Inlet Branch 4 Name + + Connector:Mixer, + SWHSys1 Supply Mixer, !- Name + SWHSys1 Supply Outlet Branch, !- Outlet Branch Name + SWHSys1 Supply Equipment Branch, !- Inlet Branch 1 Name + SWHSys1 Supply Equipment Bypass Branch; !- Inlet Branch 2 Name + + Pipe:Adiabatic, + SWHSys1 Demand Bypass Pipe, !- Name + SWHSys1 Demand Bypass Pipe Inlet Node, !- Inlet Node Name + SWHSys1 Demand Bypass Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Demand Inlet Pipe, !- Name + SWHSys1 Demand Inlet Node, !- Inlet Node Name + SWHSys1 Demand Inlet Pipe-SWHSys1 Demand Mixer; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Demand Outlet Pipe, !- Name + SWHSys1 Demand Mixer-SWHSys1 Demand Outlet Pipe, !- Inlet Node Name + SWHSys1 Demand Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Supply Equipment Bypass Pipe, !- Name + SWHSys1 Supply Equip Bypass Inlet Node, !- Inlet Node Name + SWHSys1 Supply Equip Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + SWHSys1 Supply Outlet Pipe, !- Name + SWHSys1 Supply Mixer-SWHSys1 Supply Outlet Pipe, !- Inlet Node Name + SWHSys1 Supply Outlet Node; !- Outlet Node Name + +! ***SWH SCHEDULES*** + + Schedule:Compact, + BLDG_SWH_SCH, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays SummerDesignDay, !- Field 2 + Until: 05:00,0.05, !- Field 3 + Until: 06:00,0.08, !- Field 5 + Until: 07:00,0.07, !- Field 7 + Until: 08:00,0.19, !- Field 9 + Until: 09:00,0.35, !- Field 11 + Until: 10:00,0.38, !- Field 13 + Until: 11:00,0.39, !- Field 15 + Until: 12:00,0.47, !- Field 17 + Until: 13:00,0.57, !- Field 19 + Until: 14:00,0.54, !- Field 21 + Until: 15:00,0.34, !- Field 23 + Until: 16:00,0.33, !- Field 25 + Until: 17:00,0.44, !- Field 27 + Until: 18:00,0.26, !- Field 29 + Until: 19:00,0.21, !- Field 31 + Until: 20:00,0.15, !- Field 33 + Until: 21:00,0.17, !- Field 35 + Until: 22:00,0.08, !- Field 37 + Until: 24:00,0.05, !- Field 39 + For: Saturday WinterDesignDay, !- Field 41 + Until: 05:00,0.05, !- Field 42 + Until: 06:00,0.08, !- Field 44 + Until: 07:00,0.07, !- Field 46 + Until: 08:00,0.11, !- Field 48 + Until: 09:00,0.15, !- Field 50 + Until: 10:00,0.21, !- Field 52 + Until: 11:00,0.19, !- Field 54 + Until: 12:00,0.23, !- Field 56 + Until: 13:00,0.20, !- Field 58 + Until: 14:00,0.19, !- Field 60 + Until: 15:00,0.15, !- Field 62 + Until: 16:00,0.13, !- Field 64 + Until: 17:00,0.14, !- Field 66 + Until: 21:00,0.07, !- Field 68 + Until: 22:00,0.09, !- Field 70 + Until: 24:00,0.05, !- Field 72 + For: AllOtherDays, !- Field 74 + Until: 05:00,0.04, !- Field 75 + Until: 06:00,0.07, !- Field 77 + Until: 11:00,0.04, !- Field 79 + Until: 13:00,0.06, !- Field 81 + Until: 14:00,0.09, !- Field 83 + Until: 15:00,0.06, !- Field 85 + Until: 21:00,0.04, !- Field 87 + Until: 22:00,0.07, !- Field 89 + Until: 24:00,0.04; !- Field 91 + + Schedule:Compact, + Water Equipment Latent fract sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.05; !- Field 3 + + Schedule:Compact, + Water Equipment Sensible fract sched, !- Name + Fraction, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.2; !- Field 3 + + Schedule:Compact, + SWHSys1 Water Heater Ambient Temperature Schedule Name, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,22.0; !- Field 3 + + Schedule:Compact, + Water Equipment Temp Sched, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,43.3; !- Field 3 + + Schedule:Compact, + Water Equipment Hot Supply Temp Sched, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,43.3; !- Field 3 + + Schedule:Compact, + SWHSys1 Water Heater Setpoint Temperature Schedule Name, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,60.0; !- Field 3 + + Schedule:Compact, + SWHSys1-Loop-Temp-Schedule, !- Name + Temperature, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,60.0; !- Field 3 + +! ***ECONOMICS*** +! IN_EIAMonthlyRateGas, Source EIA historical Nov2003 thru Oct2004 +! Indiana 1999 state average electricity emissions factors based on eGRID, 1065, AirData +! PSI_CS_CommercialElectricService, source http://www.cinergypsi.com/pdfs/RateCS.pdf, effective 2004-05-24 +! PSI_LLF_LowLoadFactorService,source http://www.cinergypsi.com/pdfs/RATELLF.pdf, effective 2004-05-24 + + UtilityCost:Tariff, + PSI_LLF_LowLoadFactorService, !- Name + Electricity:Facility, !- Output Meter Name + kWh, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + HalfHour, !- Demand Window Length + 15.00, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Elect; !- Group Name + + UtilityCost:Charge:Block, + AnnualEnergyCharge, !- Utility Cost Charge Block Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + , !- Remaining Into Variable + , !- Block Size Multiplier Value or Variable Name + 300, !- Block Size 1 Value or Variable Name + 0.108222, !- Block 1 Cost per Unit Value or Variable Name + 700, !- Block Size 2 Value or Variable Name + 0.087021, !- Block 2 Cost per Unit Value or Variable Name + 1500, !- Block Size 3 Value or Variable Name + 0.078420, !- Block 3 Cost per Unit Value or Variable Name + remaining, !- Block Size 4 Value or Variable Name + 0.058320; !- Block 4 Cost per Unit Value or Variable Name + + UtilityCost:Charge:Block, + AnnualDemandBaseCharge, !- Utility Cost Charge Block Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + , !- Remaining Into Variable + TotalDemand, !- Block Size Multiplier Value or Variable Name + 190, !- Block Size 1 Value or Variable Name + 0.0, !- Block 1 Cost per Unit Value or Variable Name + 110, !- Block Size 2 Value or Variable Name + 0.051773, !- Block 2 Cost per Unit Value or Variable Name + remaining, !- Block Size 3 Value or Variable Name + 0.046965; !- Block 3 Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + FuelCostAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.002028; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + QualPollutionControlAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000536; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + SoxNoxRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.001127; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + DSMRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000370; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + PurchPowerTrackerAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000031; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + MidwestISOAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000216; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + CleanCoalRiderEnergyCharge, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000833; !- Cost per Unit Value or Variable Name + + UtilityCost:Qualify, + MinDemand75kw, !- Utility Cost Qualify Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + TotalDemand, !- Variable Name + Minimum, !- Qualify Type + 75, !- Threshold Value or Variable Name + Annual, !- Season + Count, !- Threshold Test + 12; !- Number of Months + + UtilityCost:Charge:Simple, + TaxofeightPercent, !- Utility Cost Charge Simple Name + PSI_LLF_LowLoadFactorService, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.08; !- Cost per Unit Value or Variable Name + +!end PSI_LLF_LowLoadFactorService + + UtilityCost:Tariff, + PSI_CS_CommercialElectricService, !- Name + Electricity:Facility, !- Output Meter Name + kWh, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + , !- Demand Window Length + 9.40, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Elect; !- Group Name + + UtilityCost:Charge:Block, + AnnualEnergyCharge, !- Utility Cost Charge Block Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + , !- Remaining Into Variable + , !- Block Size Multiplier Value or Variable Name + 300, !- Block Size 1 Value or Variable Name + 0.082409, !- Block 1 Cost per Unit Value or Variable Name + 700, !- Block Size 2 Value or Variable Name + 0.072873, !- Block 2 Cost per Unit Value or Variable Name + 1500, !- Block Size 3 Value or Variable Name + 0.061696, !- Block 3 Cost per Unit Value or Variable Name + remaining, !- Block Size 4 Value or Variable Name + 0.041179; !- Block 4 Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + FuelCostAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.002028; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + QualPollutionControlAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000536; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + SoxNoxRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.001127; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + DSMRiderAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000021; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + PurchPowerTrackerAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000034; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + MidwestISOAdjustEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + -0.000203; !- Cost per Unit Value or Variable Name + + UtilityCost:Charge:Simple, + CleanCoalRiderEnergyCharge, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + 0.000807; !- Cost per Unit Value or Variable Name + + UtilityCost:Qualify, + MaxDemand75kw, !- Utility Cost Qualify Name + PSI_CS_CommercialElectricService, !- Tariff Name + TotalDemand, !- Variable Name + Maximum, !- Qualify Type + 75, !- Threshold Value or Variable Name + Annual, !- Season + Count, !- Threshold Test + 1; !- Number of Months + + UtilityCost:Charge:Simple, + TaxofeightPercent, !- Utility Cost Charge Simple Name + PSI_CS_CommercialElectricService, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.08; !- Cost per Unit Value or Variable Name + + UtilityCost:Tariff, + IN_EIAMonthlyRateGas, !- Name + NaturalGas:Facility, !- Output Meter Name + MCF, !- Conversion Factor Choice + , !- Energy Conversion Factor + , !- Demand Conversion Factor + , !- Time of Use Period Schedule Name + , !- Season Schedule Name + , !- Month Schedule Name + , !- Demand Window Length + 0.0, !- Monthly Charge or Variable Name + , !- Minimum Monthly Charge or Variable Name + , !- Real Time Pricing Charge Schedule Name + , !- Customer Baseline Load Schedule Name + Comm Gas; !- Group Name + + UtilityCost:Charge:Simple, + MonthlyRateGasCharge, !- Utility Cost Charge Simple Name + IN_EIAMonthlyRateGas, !- Tariff Name + totalEnergy, !- Source Variable + Annual, !- Season + EnergyCharges, !- Category Variable Name + IN_MonthlyGasRates; !- Cost per Unit Value or Variable Name + + UtilityCost:Variable, + IN_MonthlyGasRates, !- Name + IN_EIAMonthlyRateGas, !- Tariff Name + Currency, !- Variable Type + 8.22, !- January Value + 7.51, !- February Value + 8.97, !- March Value + 9.01, !- April Value + 9.16, !- May Value + 10.44, !- June Value + 10.32, !- July Value + 10.13, !- August Value + 9.20, !- September Value + 8.18, !- October Value + 7.83, !- November Value + 7.63; !- December Value + + UtilityCost:Charge:Simple, + TaxofEightPercent, !- Utility Cost Charge Simple Name + IN_EIAMonthlyRateGas, !- Tariff Name + SubTotal, !- Source Variable + Annual, !- Season + Taxes, !- Category Variable Name + 0.08; !- Cost per Unit Value or Variable Name + +! ***GENERAL REPORTING*** + + OutputControl:ReportingTolerances, + 0.556, !- Tolerance for Time Heating Setpoint Not Met {deltaC} + 0.556; !- Tolerance for Time Cooling Setpoint Not Met {deltaC} + + Output:SQLite, + Simple; !- Option Type + + Output:VariableDictionary,IDF,Unsorted; + + Output:Surfaces:List,Details; + + Output:Surfaces:Drawing,DXF; + + Output:Constructions,Constructions; + +! ***REPORT METERS/VARIABLES*** + + Output:Variable,*,Site Outdoor Air Relative Humidity,hourly; + + Output:Variable,*,Zone Air Terminal Beam Sensible Cooling Energy,hourly; + + Output:Variable,*,Zone Air Terminal Beam Sensible Cooling Rate,hourly; + + Output:Variable,*,Zone Air Terminal Beam Sensible Heating Energy,hourly; + + Output:Variable,*,Zone Air Terminal Beam Sensible Heating Rate,hourly; + + Output:Variable,*,Zone Air Terminal Primary Air Sensible Cooling Energy,hourly; + + Output:Variable,*,Zone Air Terminal Primary Air Sensible Cooling Rate,hourly; + + Output:Variable,*,Zone Air Terminal Primary Air Sensible Heating Energy,hourly; + + Output:Variable,*,Zone Air Terminal Primary Air Sensible Heating Rate,hourly; + + Output:Variable,*,Zone Air Terminal Primary Air Flow Rate,hourly; + + Output:Variable,*,Air System Outdoor Air Mass Flow Rate,hourly; + + Output:Variable,*,Zone Mean Air Temperature,hourly; + + Output:Variable,*,Boiler Mass Flow Rate,hourly; + + Output:Variable,*,Boiler NaturalGas Rate,hourly; + +! ***REPORT TABLES*** + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AnnualBuildingUtilityPerformanceSummary, !- Report 1 Name + InputVerificationandResultsSummary, !- Report 2 Name + ClimaticDataSummary, !- Report 3 Name + EnvelopeSummary, !- Report 4 Name + EquipmentSummary, !- Report 5 Name + ComponentSizingSummary, !- Report 6 Name + HVACSizingSummary, !- Report 7 Name + SystemSummary; !- Report 8 Name + + Output:Table:Monthly, + Emissions Data Summary, !- Name + 4, !- Digits After Decimal + CO2:Facility, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + NOx:Facility, !- Variable or Meter 2 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 2 + SO2:Facility, !- Variable or Meter 3 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 3 + PM:Facility, !- Variable or Meter 4 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 4 + Hg:Facility, !- Variable or Meter 5 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 5 + WaterEnvironmentalFactors:Facility, !- Variable or Meter 6 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 6 + Carbon Equivalent:Facility, !- Variable or Meter 7 Name + SumOrAverage; !- Aggregation Type for Variable or Meter 7 + + Output:Table:Monthly, + Components of Peak Electrical Demand, !- Name + 3, !- Digits After Decimal + Electricity:Facility, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Electricity:Facility, !- Variable or Meter 2 Name + Maximum, !- Aggregation Type for Variable or Meter 2 + InteriorLights:Electricity, !- Variable or Meter 3 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 3 + InteriorEquipment:Electricity, !- Variable or Meter 4 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 4 + Fans:Electricity, !- Variable or Meter 5 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 5 + Heating:Electricity, !- Variable or Meter 6 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 6 + Cooling:Electricity, !- Variable or Meter 7 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 7 + ExteriorLights:Electricity, !- Variable or Meter 8 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 8 + Pumps:Electricity, !- Variable or Meter 9 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 9 + HeatRejection:Electricity, !- Variable or Meter 10 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 10 + ExteriorEquipment:Electricity, !- Variable or Meter 11 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 11 + Humidification:Electricity, !- Variable or Meter 12 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 12 + HeatRecovery:Electricity,!- Variable or Meter 13 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 13 + WaterSystems:Electricity,!- Variable or Meter 14 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 14 + Refrigeration:Electricity, !- Variable or Meter 15 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 15 + Generators:Electricity, !- Variable or Meter 16 Name + ValueWhenMaximumOrMinimum, !- Aggregation Type for Variable or Meter 16 + ElectricityProduced:Facility, !- Variable or Meter 17 Name + ValueWhenMaximumOrMinimum; !- Aggregation Type for Variable or Meter 17 + + Output:Table:Monthly, + Boiler Part Load Performance, !- Name + 2, !- Digits After Decimal + Boiler Part Load Ratio, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Boiler Part Load Ratio, !- Variable or Meter 2 Name + Maximum; !- Aggregation Type for Variable or Meter 2 + + Output:Table:Monthly, + Chiller Part Load Performance, !- Name + 2, !- Digits After Decimal + Chiller Part Load Ratio, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Chiller Part Load Ratio, !- Variable or Meter 2 Name + Maximum; !- Aggregation Type for Variable or Meter 2 + + Output:Table:Monthly, + Fan Part Load Performance, !- Name + 0, !- Digits After Decimal + Fan Electricity Rate, !- Variable or Meter 1 Name + SumOrAverage, !- Aggregation Type for Variable or Meter 1 + Fan Electricity Rate, !- Variable or Meter 2 Name + Maximum; !- Aggregation Type for Variable or Meter 2 + + Output:Table:TimeBins, + *, !- Key Value + Zone Air Relative Humidity, !- Variable Name + 60, !- Interval Start + 10, !- Interval Size + 4; !- Interval Count + + Output:Table:TimeBins, + *, !- Key Value + Air System Outdoor Air Flow Fraction, !- Variable Name + 0.00, !- Interval Start + 0.20, !- Interval Size + 5; !- Interval Count + + Output:Table:TimeBins, + *, !- Key Value + Availability Manager Night Cycle Control Status, !- Variable Name + 0, !- Interval Start + 1, !- Interval Size + 4; !- Interval Count + +! ***ENVIRONMENTAL FACTORS REPORTING*** + + EnvironmentalImpactFactors, + 0.663, !- District Heating Efficiency + 4.18, !- District Cooling COP {W/W} + 0.585, !- Steam Conversion Efficiency + 80.7272, !- Total Carbon Equivalent Emission Factor From N2O {kg/kg} + 6.2727, !- Total Carbon Equivalent Emission Factor From CH4 {kg/kg} + 0.2727; !- Total Carbon Equivalent Emission Factor From CO2 {kg/kg} + +! Indiana electricity source and emission factors based on Deru and Torcellini 2007 + + FuelFactors, + Electricity, !- Existing Fuel Resource Name + 3.546, !- Source Energy Factor {J/J} + , !- Source Energy Schedule Name + 3.417E+02, !- CO2 Emission Factor {g/MJ} + , !- CO2 Emission Factor Schedule Name + 1.186E-01, !- CO Emission Factor {g/MJ} + , !- CO Emission Factor Schedule Name + 7.472E-01, !- CH4 Emission Factor {g/MJ} + , !- CH4 Emission Factor Schedule Name + 6.222E-01, !- NOx Emission Factor {g/MJ} + , !- NOx Emission Factor Schedule Name + 8.028E-03, !- N2O Emission Factor {g/MJ} + , !- N2O Emission Factor Schedule Name + 1.872E+00, !- SO2 Emission Factor {g/MJ} + , !- SO2 Emission Factor Schedule Name + 0.0, !- PM Emission Factor {g/MJ} + , !- PM Emission Factor Schedule Name + 1.739E-02, !- PM10 Emission Factor {g/MJ} + , !- PM10 Emission Factor Schedule Name + 0.0, !- PM2.5 Emission Factor {g/MJ} + , !- PM2.5 Emission Factor Schedule Name + 0.0, !- NH3 Emission Factor {g/MJ} + , !- NH3 Emission Factor Schedule Name + 1.019E-02, !- NMVOC Emission Factor {g/MJ} + , !- NMVOC Emission Factor Schedule Name + 5.639E-06, !- Hg Emission Factor {g/MJ} + , !- Hg Emission Factor Schedule Name + 2.778E-05, !- Pb Emission Factor {g/MJ} + , !- Pb Emission Factor Schedule Name + 0.4309556, !- Water Emission Factor {L/MJ} + , !- Water Emission Factor Schedule Name + 0, !- Nuclear High Level Emission Factor {g/MJ} + , !- Nuclear High Level Emission Factor Schedule Name + 0; !- Nuclear Low Level Emission Factor {m3/MJ} + +! Deru and Torcellini 2007 +! Source Energy and Emission Factors for Energy Use in Buildings +! NREL/TP-550-38617 +! source factor and Higher Heating Values from Table 5 +! post-combustion emission factors for boiler from Table 9 (with factor of 1000 correction for natural gas) + + FuelFactors, + NaturalGas, !- Existing Fuel Resource Name + 1.092, !- Source Energy Factor {J/J} + , !- Source Energy Schedule Name + 5.21E+01, !- CO2 Emission Factor {g/MJ} + , !- CO2 Emission Factor Schedule Name + 3.99E-02, !- CO Emission Factor {g/MJ} + , !- CO Emission Factor Schedule Name + 1.06E-03, !- CH4 Emission Factor {g/MJ} + , !- CH4 Emission Factor Schedule Name + 4.73E-02, !- NOx Emission Factor {g/MJ} + , !- NOx Emission Factor Schedule Name + 1.06E-03, !- N2O Emission Factor {g/MJ} + , !- N2O Emission Factor Schedule Name + 2.68E-04, !- SO2 Emission Factor {g/MJ} + , !- SO2 Emission Factor Schedule Name + 0.0, !- PM Emission Factor {g/MJ} + , !- PM Emission Factor Schedule Name + 3.59E-03, !- PM10 Emission Factor {g/MJ} + , !- PM10 Emission Factor Schedule Name + 0.0, !- PM2.5 Emission Factor {g/MJ} + , !- PM2.5 Emission Factor Schedule Name + 0, !- NH3 Emission Factor {g/MJ} + , !- NH3 Emission Factor Schedule Name + 2.61E-03, !- NMVOC Emission Factor {g/MJ} + , !- NMVOC Emission Factor Schedule Name + 1.11E-07, !- Hg Emission Factor {g/MJ} + , !- Hg Emission Factor Schedule Name + 2.13E-07, !- Pb Emission Factor {g/MJ} + , !- Pb Emission Factor Schedule Name + 0, !- Water Emission Factor {L/MJ} + , !- Water Emission Factor Schedule Name + 0, !- Nuclear High Level Emission Factor {g/MJ} + , !- Nuclear High Level Emission Factor Schedule Name + 0; !- Nuclear Low Level Emission Factor {m3/MJ} + + Output:Variable,*,Fluid Heat Exchanger Heat Transfer Rate,hourly; !- HVAC Average [W] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Supply Side Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Loop Demand Side Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Fluid Heat Exchanger Operation Status,hourly; !- HVAC Average [] + Output:Variable,*,Fluid Heat Exchanger Effectiveness,hourly; !- HVAC Average [] + + Output:Variable,*,Supervisory Plant Heat Pump Operation Mode,hourly; !- HVAC Average [unknown] + Output:Variable,*,Supervisory Plant Operation Polled Building Heating Load,hourly; !- HVAC Average [W] + Output:Variable,*,Supervisory Plant Operation Polled Building Cooling Load,hourly; !- HVAC Average [W] + Output:Variable,*,Supervisory Plant Operation Primary Plant Heating Load,hourly; !- HVAC Average [W] + Output:Variable,*,Supervisory Plant Operation Primary Plant Cooling Load,hourly; !- HVAC Average [W] + Output:Variable,*,Supervisory Plant Heat Recovery Operation Mode,hourly; !- HVAC Average [unknown] + Output:Variable,*,Supervisory Plant Auxiliary Boiler Mode,hourly; !- HVAC Average [unknown] + Output:Variable,*,Supervisory Plant Operation Secondary Plant Heating Load,timestep; !- HVAC Average [W] + Output:Variable,*,Supervisory Plant Operation Secondary Plant Cooling Load,timestep; !- HVAC Average [W] + + Output:Variable,*,Heat Pump Part Load Ratio,hourly; !- HVAC Average [] + Output:Variable,*,Heat Pump Cycling Ratio,hourly; !- HVAC Average [] + Output:Variable,*,Heat Pump Load Side Heat Transfer Rate,hourly; !- HVAC Average [W] + Output:Variable,*,Heat Pump Load Side Heat Transfer Energy,hourly; !- HVAC Sum [J] + Output:Variable,*,Heat Pump Source Side Heat Transfer Rate,hourly; !- HVAC Average [W] + Output:Variable,*,Heat Pump Source Side Heat Transfer Energy,hourly; !- HVAC Sum [J] + Output:Variable,*,Heat Pump Load Side Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Heat Pump Load Side Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Heat Pump Source Side Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Heat Pump Source Side Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Heat Pump Electricity Rate,hourly; !- HVAC Average [W] + Output:Variable,*,Heat Pump Load Side Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,*,Heat Pump Source Side Mass Flow Rate,hourly; !- HVAC Average [kg/s] + + Output:Variable,*,Boiler Heating Rate,hourly; !- HVAC Average [W] + Output:Variable,*,Boiler Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Boiler Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Boiler Mass Flow Rate,hourly; + + Output:Variable,AWHP_2 Heating Side Outlet,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,AWHP_1 Heating Side Outlet,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,AWHP_2 Cooling Side Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,AWHP_1 Cooling Side Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + + Output:Variable,Secondary HW Supply Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,HeatSys1 Supply Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,Secondary CW Supply Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + Output:Variable,CoolSys1 Supply Outlet Node,System Node Setpoint Temperature,hourly; !- HVAC Average [C] + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly; !- Zone Average [C] + + Output:Variable,*,Availability Manager Night Cycle Control Status,hourly; !- HVAC Average [] + + Output:Variable,*,Zone Heating Setpoint Not Met While Occupied Time,hourly; !- Zone Sum [hr] + Output:Variable,*,Zone Cooling Setpoint Not Met While Occupied Time,hourly; !- Zone Sum [hr] + + Output:Variable,*,Plant Supply Side Inlet Mass Flow Rate,hourly; !- HVAC Average [kg/s] + Output:Variable,*,Plant Supply Side Inlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,*,Plant Supply Side Outlet Temperature,hourly; !- HVAC Average [C] + Output:Variable,Heating Side WSHP Source Side Inlet,System Node Mass Flow Rate,hourly; + Output:Variable,Heating Side WSHP Source Side Inlet,System Node Temperature,hourly; + + Output:Variable,Heating Side WSHP Source Side Oulet,System Node Mass Flow Rate,hourly; + Output:Variable,Heating Side WSHP Source Side Oulet,System Node Temperature,hourly; + + Output:Variable,Cooling Side WSHP Source Side Inlet,System Node Mass Flow Rate,hourly; + Output:Variable,Cooling Side WSHP Source Side Inlet,System Node Temperature,hourly; + + Output:Variable,Cooling Side WSHP Source Side Outlet,System Node Mass Flow Rate,hourly; + Output:Variable,Cooling Side WSHP Source Side Outlet,System Node Temperature,hourly; + + Output:Variable,Cooling Side WSHP Load Side Inlet,System Node Mass Flow Rate,hourly; + Output:Variable,Cooling Side WSHP Load Side Inlet,System Node Temperature,hourly; + + Output:Variable,Heating Side WSHP Load Side Inlet,System Node Mass Flow Rate,hourly; + Output:Variable,Heating Side WSHP Load Side Inlet,System Node Temperature,hourly; diff --git a/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.idf b/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.idf new file mode 100644 index 00000000000..a591eae8cda --- /dev/null +++ b/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.idf @@ -0,0 +1,526 @@ +!-Generator IDFEditor 1.34 +!-Option OriginalOrderTop UseSpecialFormat +!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically. +!- Use '!' comments if they need to be retained when using the IDFEditor. +!1ZoneUncontrolled.idf +! Basic file description: Basic test for EnergyPlus. Resistive Walls. Regular (no ground contact) floor. +! Regular roof. No Windows. +! +! Highlights: Very basic test to see that EnergyPlus "works". +! +! +! Simulation Location/Run: Denver Centennial Golden CO USA WMO=724666, 2 design days, 1 run period, +! Run Control executes two design days (see RUN PERIOD object) +! +! Location: Denver, CO +! +! Design Days: Denver Centennial Golden CO USA Annual Heating 99%, MaxDB=-15.5°C +! Denver Centennial Golden CO USA Annual Cooling (DB=>MWB) 1%, MaxDB=32°C MWB=15.5°C +! +! Run Period (Weather File): Full Annual Simulation, DENVER_STAPLETON_CO_USA_WMO_724690 +! +! Run Control: No zone or system sizing, design day run control (no weather file simulation) +! +! Building: Fictional 1 zone building with resistive walls. +! +! The building is oriented due north. +! +! Floor Area: 232.25 m2 +! Number of Stories: 1 +! +! Zone Description Details: +! +! (0,15.24,0) (15.24,15.24,0) +! _____________________________ +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! | | +! |_____________________________| +! +! (0,0,0) (15.24,0,0) +! +! Internal gains description: NA +! +! Interzone Surfaces: None +! Internal Mass: None +! People: None +! Lights: None +! Equipment: None +! Windows: 0 +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Compact Schedules: NA (Example of non-Compact Schedules) +! Solar Distribution: MinimalShadowing +! +! HVAC: NA +! +! Zonal Equipment: NA +! Central Air Handling Equipment: No +! System Equipment Autosize: No +! Purchased Cooling: No +! Purchased Heating: No +! Purchased Chilled Water: No +! Purchased Hot Water: No +! Coils: None +! Pumps: None +! Boilers: None +! Chillers: None +! Towers: None +! +! Results: +! Standard Reports: Variable Dictionary, Surfaces (dxf-wireframe), Meter File +! Timestep or Hourly Variables: Hourly and Daily +! Time bins Report: None +! HTML Report: None +! Environmental Emissions: None +! Utility Tariffs: None + + Version,23.2; + + Timestep,60; + + Building, + Simple One Zone (Wireframe DXF), !- Name + 0, !- North Axis {deg} + Suburbs, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.004, !- Temperature Convergence Tolerance Value {deltaC} + MinimalShadowing, !- Solar Distribution + 30, !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + HeatBalanceAlgorithm,ConductionFiniteDifference; + + SurfaceConvectionAlgorithm:Inside,TARP; + + SurfaceConvectionAlgorithm:Outside,DOE-2; + + SimulationControl, + No, !- Do Zone Sizing Calculation + No, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + Yes, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + + RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 1, !- End Month + 31, !- End Day of Month + , !- End Year + Tuesday, !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + No, !- Apply Weekend Holiday Rule + Yes, !- Use Weather File Rain Indicators + Yes; !- Use Weather File Snow Indicators + + Site:Location, + Denver Centennial Golden N_CO_USA Design_Conditions, !- Name + 39.74, !- Latitude {deg} + -105.18, !- Longitude {deg} + -7.00, !- Time Zone {hr} + 1829.00; !- Elevation {m} + + ! WMO=724666 Time Zone=NAM: (GMT-07:00) Mountain Time (US & Canada) + ! Data Source=ASHRAE 2009 Annual Design Conditions + ! Denver Centennial Golden N_CO_USA Annual Heating Design Conditions Wind Speed=3m/s Wind Dir=340 + ! Coldest Month=DEC + ! Denver Centennial Golden N_CO_USA Annual Heating 99%, MaxDB=-15.5°C + + SizingPeriod:DesignDay, + Denver Centennial Golden N Ann Htg 99% Condns DB, !- Name + 12, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -15.5, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -15.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 81198., !- Barometric Pressure {Pa} + 3, !- Wind Speed {m/s} + 340, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.00; !- Sky Clearness + + ! Denver Centennial Golden N Annual Cooling Design Conditions Wind Speed=4.9m/s Wind Dir=0 + ! Hottest Month=JUL + ! Denver Centennial Golden N_CO_USA Annual Cooling (DB=>MWB) 1%, MaxDB=32°C MWB=15.5°C + + SizingPeriod:DesignDay, + Denver Centennial Golden N Ann Clg 1% Condns DB=>MWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 32, !- Maximum Dry-Bulb Temperature {C} + 15.2, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 15.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 81198., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 0, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.00; !- Sky Clearness + + Material:NoMass, + R31LAYER, !- Name + Rough, !- Roughness + 5.456, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + C5 - 4 IN HW CONCRETE, !- Name + MediumRough, !- Roughness + 0.1014984, !- Thickness {m} + 1.729577, !- Conductivity {W/m-K} + 2242.585, !- Density {kg/m3} + 836.8000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material, + Vinyl, Light, !- Name + Rough, !- Roughness + 0.009525, !- Thickness {m} + 0.089435, !- Conductivity {W/m-K} + 177.822, !- Density {kg/m3} + 1046.75, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.3, !- Solar Absorptance + 0.3; !- Visible Absorptance + + Material, + WallSheathing, !- Name + Rough, !- Roughness + 0.0127, !- Thickness {m} + 0.1154577, !- Conductivity {W/m-K} + 512.64, !- Density {kg/m3} + 1214.23, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + WallStudAndCavityk1, !- Name + Rough, !- Roughness + 0.0889, !- Thickness {m} + 2.4, !- Conductivity {W/m-K} + 162.40275, !- Density {kg/m3} + 1178.91670776819, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.7, !- Solar Absorptance + 0.7; !- Visible Absorptance + + Material, + Drywall 0.5 in., !- Name + Rough, !- Roughness + 0.0127, !- Thickness {m} + 0.1602906, !- Conductivity {W/m-K} + 801, !- Density {kg/m3} + 837.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.1; !- Visible Absorptance + + Material, + Drywall 0.25 in. lay-1, !- Name + Rough, !- Roughness + 0.00635, !- Thickness {m} + 0.1602906, !- Conductivity {W/m-K} + 801, !- Density {kg/m3} + 837.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.1; !- Visible Absorptance + + Material, + Drywall 0.25 in. lay-2, !- Name + Rough, !- Roughness + 0.00635, !- Thickness {m} + 0.1602906, !- Conductivity {W/m-K} + 801, !- Density {kg/m3} + 837.4, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.5, !- Solar Absorptance + 0.1; !- Visible Absorptance + + Construction, + WallExtInsFin1, !- Name + Vinyl, Light, !- Outside Layer + WallSheathing, !- Layer 2 + WallStudAndCavityk1, !- Layer 3 + Drywall 0.5 in.; !- Layer 4 + + Construction, + WallExtInsFin2, !- Name + Vinyl, Light, !- Outside Layer + WallSheathing, !- Layer 2 + WallStudAndCavityk1, !- Layer 3 + Drywall 0.25 in. lay-1, !- Layer 4 + Drywall 0.25 in. lay-2; !- Layer 5 + + Construction, + FLOOR, !- Name + C5 - 4 IN HW CONCRETE; !- Outside Layer + + Construction, + ROOF31, !- Name + R31LAYER; !- Outside Layer + + Zone, + ZONE ONE, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + autocalculate, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + World; !- Coordinate System + + BuildingSurface:Detailed, + Zn001:Wall001, !- Name + Wall, !- Surface Type + WallExtInsFin1, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0,0,4.572000, !- X,Y,Z ==> Vertex 1 {m} + 0,0,0, !- X,Y,Z ==> Vertex 2 {m} + 15.24000,0,0, !- X,Y,Z ==> Vertex 3 {m} + 15.24000,0,4.572000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall002, !- Name + Wall, !- Surface Type + WallExtInsFin1, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 15.24000,0,4.572000, !- X,Y,Z ==> Vertex 1 {m} + 15.24000,0,0, !- X,Y,Z ==> Vertex 2 {m} + 15.24000,15.24000,0, !- X,Y,Z ==> Vertex 3 {m} + 15.24000,15.24000,4.572000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall003, !- Name + Wall, !- Surface Type + WallExtInsFin1, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 15.24000,15.24000,4.572000, !- X,Y,Z ==> Vertex 1 {m} + 15.24000,15.24000,0, !- X,Y,Z ==> Vertex 2 {m} + 0,15.24000,0, !- X,Y,Z ==> Vertex 3 {m} + 0,15.24000,4.572000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Wall004, !- Name + Wall, !- Surface Type + WallExtInsFin2, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.5000000, !- View Factor to Ground + 4, !- Number of Vertices + 0,15.24000,4.572000, !- X,Y,Z ==> Vertex 1 {m} + 0,15.24000,0, !- X,Y,Z ==> Vertex 2 {m} + 0,0,0, !- X,Y,Z ==> Vertex 3 {m} + 0,0,4.572000; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Flr001, !- Name + Floor, !- Surface Type + FLOOR, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Adiabatic, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 1.000000, !- View Factor to Ground + 4, !- Number of Vertices + 15.24000,0.000000,0.0, !- X,Y,Z ==> Vertex 1 {m} + 0.000000,0.000000,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.000000,15.24000,0.0, !- X,Y,Z ==> Vertex 3 {m} + 15.24000,15.24000,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Zn001:Roof001, !- Name + Roof, !- Surface Type + ROOF31, !- Construction Name + ZONE ONE, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0, !- View Factor to Ground + 4, !- Number of Vertices + 0.000000,15.24000,4.572, !- X,Y,Z ==> Vertex 1 {m} + 0.000000,0.000000,4.572, !- X,Y,Z ==> Vertex 2 {m} + 15.24000,0.000000,4.572, !- X,Y,Z ==> Vertex 3 {m} + 15.24000,15.24000,4.572; !- X,Y,Z ==> Vertex 4 {m} + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,hourly; + + Output:Variable,*,Site Daylight Saving Time Status,hourly; + + Output:Variable,*,Site Day Type Index,hourly; + + Output:Variable,*,Zone Mean Air Temperature,hourly; + + Output:Variable,*,Zone Total Internal Latent Gain Energy,hourly; + + Output:Variable,*,Zone Mean Radiant Temperature,hourly; + + Output:Variable,*,Zone Air Heat Balance Surface Convection Rate,hourly; + + Output:Variable,*,Zone Air Heat Balance Air Energy Storage Rate,hourly; + + Output:Variable,*,Surface Inside Face Temperature,hourly; + + Output:Variable,*,Surface Outside Face Temperature,hourly; + + Output:Variable,*,Surface Inside Face Convection Heat Transfer Coefficient,hourly; + + Output:Variable,*,Surface Outside Face Convection Heat Transfer Coefficient,hourly; + + Output:VariableDictionary,IDF; + + Output:Surfaces:Drawing,dxf:wireframe; + + Output:Constructions,Constructions; + + OutputControl:Table:Style, + ALL; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + + Exterior:Lights, + ExtLights, !- Name + AlwaysOn, !- Schedule Name + 5250, !- Design Level {W} + AstronomicalClock, !- Control Option + Grounds Lights; !- End-Use Subcategory + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + OtherEquipment, + Test 352a, !- Name + None, !- Fuel Type + ZONE ONE, !- Zone or ZoneList or Space or SpaceList Name + AlwaysOn, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 352, !- Design Level {W} + , !- Power per Zone Floor Area {W/m2} + , !- Power per Person {W/person} + 0, !- Fraction Latent + 0, !- Fraction Radiant + 0; !- Fraction Lost + + OtherEquipment, + Test 352 minus, !- Name + None, !- Fuel Type + ZONE ONE, !- Zone or ZoneList or Space or SpaceList Name + AlwaysOn, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + -352, !- Design Level {W} + , !- Power per Zone Floor Area {W/m2} + , !- Power per Person {W/person} + 0, !- Fraction Latent + 0, !- Fraction Radiant + 0; !- Fraction Lost + + Schedule:Constant,AlwaysOn,On/Off,1.0; + + PythonPlugin:Instance, + History Tracker, !- Name + No, !- Run During Warmup Days + PythonPlugin1ZoneUncontrolledTrackHistory, !- Python Module Name + HistoryTracker; !- Plugin Class Name + + Output:EnergyManagementSystem, + Verbose, !- Actuator Availability Dictionary Reporting + Verbose, !- Internal Variable Availability Dictionary Reporting + Verbose; !- EMS Runtime Language Debug Output Level diff --git a/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.py b/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.py new file mode 100644 index 00000000000..c3a9e70f990 --- /dev/null +++ b/testfiles/PythonPlugin1ZoneUncontrolledTrackHistory.py @@ -0,0 +1,85 @@ +# EnergyPlus, Copyright (c) 1996-2023, The Board of Trustees of the University +# of Illinois, The Regents of the University of California, through Lawrence +# Berkeley National Laboratory (subject to receipt of any required approvals +# from the U.S. Dept. of Energy), Oak Ridge National Laboratory, managed by UT- +# Battelle, Alliance for Sustainable Energy, LLC, and other contributors. All +# rights reserved. +# +# NOTICE: This Software was developed under funding from the U.S. Department of +# Energy and the U.S. Government consequently retains certain rights. As such, +# the U.S. Government has been granted for itself and others acting on its +# behalf a paid-up, nonexclusive, irrevocable, worldwide license in the +# Software to reproduce, distribute copies to the public, prepare derivative +# works, and perform publicly and display publicly, and to permit others to do +# so. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# (1) Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# (2) Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# (3) Neither the name of the University of California, Lawrence Berkeley +# National Laboratory, the University of Illinois, U.S. Dept. of Energy nor +# the names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in +# stand-alone form without changes from the version obtained under this +# License, or (ii) Licensee makes a reference solely to the software +# portion of its product, Licensee must refer to the software as +# "EnergyPlus version X" software, where "X" is the version number Licensee +# obtained under this License and may not use a different name for the +# software. Except as specifically required in this Section (4), Licensee +# shall not use in a company name, a product name, in advertising, +# publicity, or other promotional activities any name, trade name, +# trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or +# confusingly similar designation, without the U.S. Department of Energy's +# prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + + +from pyenergyplus.plugin import EnergyPlusPlugin + + +class HistoryTracker(EnergyPlusPlugin): + + def __init__(self): + super().__init__() + self.handle = None + self.history = [] + + def on_begin_timestep_before_predictor(self, state) -> int: + # wait until API is ready and we are on the weather file run period + if not self.api.exchange.api_data_fully_ready(state) or self.api.exchange.kind_of_sim(state) != 3: + return 0 + + # do one-time things when we first need to get the variable handle + if self.handle is None: + # get air temperature handles + zone_name = self.api.exchange.get_object_names(state, "Zone")[0] + self.handle = self.api.exchange.get_variable_handle(state, "Zone Mean Air Temperature", zone_name) + print("Time [hr], Zone Temp [C], Num History Terms", flush=True) + + # get current values, then update history array + datetime = (self.api.exchange.day_of_year(state) - 1) * 24 + self.api.exchange.current_time(state) + temp = self.api.exchange.get_variable_value(state, self.handle) + self.history.append((datetime, temp)) + print(f'{datetime:0.2f}, {temp:0.2f}, {len(self.history)}', flush=True) + + return 0 diff --git a/testfiles/SteamSystemAutoSize_DistrictHeatingSteam.idf b/testfiles/SteamSystemAutoSize_DistrictHeatingSteam.idf new file mode 100644 index 00000000000..c3c4176ec7b --- /dev/null +++ b/testfiles/SteamSystemAutoSize_DistrictHeatingSteam.idf @@ -0,0 +1,3526 @@ +!-Generator IDFEditor 1.34 +!-Option OriginalOrderTop UseSpecialFormat +!-NOTE: All comments with '!-' are ignored by the IDFEditor and are generated automatically. +!- Use '!' comments if they need to be retained when using the IDFEditor. +! SteamSystemAutoSize_DistrictHeatingSteam.idf +! Basic file description: 1 story building divided into 4 exterior and one interior conditioned zones and return plenum. +! +! Highlights: Steam Loop for Heating with a Steam Coil, District Steam Heating, and Condensate Pump +! +! Simulation Location/Run: CHICAGO_IL_USA TMY2-94846, 2 design days, 2 run periods, +! Run Control executes the run periods using the weather file +! +! Location: Chicago, IL +! +! Design Days: CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C +! +! Run Period (Weather File): Winter 1/1 - 1/15, transition 4/15 - 5/10, CHICAGO_IL_USA TMY2-94846 +! +! Run Control: Zone and System sizing with weather file run control and 2 design day runs +! +! Building: Single floor rectangular building 100 ft x 50 ft. 5 zones - 4 exterior, 1 interior, zone height 8 feet. +! Exterior zone depth is 12 feet. There is a 2 foot high return plenum: the overall building height is +! 10 feet. There are windows on all 4 facades; the south and north facades have glass doors. +! The south facing glass is shaded by overhangs. The walls are woodshingle over plywood, R11 insulation, +! and gypboard. The roof is a gravel built up roof with R-3 mineral board insulation and plywood sheathing. +! The windows are of various single and double pane construction with 3mm and 6mm glass and either 6mm or +! 13mm argon or air gap. The window to wall ratio is approximately 0.29. +! The south wall and door have overhangs. +! +! The building is oriented 30 degrees east of north. +! +! Floor Area: 463.6 m2 (5000 ft2) +! Number of Stories: 1 +! +! Zone Description Details: +! +! (0,15.2,0) (30.5,15.2,0) +! ______ ________ ____ +! | *** **************** | +! | | +! | (26.8,11.6,0) | +! |_____________________________________| +! * |(3.7,11.6,0) | * +! * | | * +! * | | * +! * | (26.8,3.7,0)| * +! *____|___________________________|____* +! | (3.7,3.7,0) | +! | | +! | | +! |____******************___***_________| +! | Overhang | | +! |_______________________| | window/door = * +! |___| +! +! (0,0,0) (30.5,0,0) +! +! Internal gains description: lighting is 1.5 watts/ft2, office equip is 1.0 watts/ft2. There is 1 occupant +! per 100 ft2 of floor area. The infiltration is 0.25 air changes per hour. +! +! Interzone Surfaces: 6 interzone surfaces (see diagram) +! Internal Mass: None +! People: 50 +! Lights: 7500 W +! Windows: 4 ea.: 1) Double pane clear, 3mm glass, 13mm air gap +! 2) Double pane clear, 3mm glass, 13mm argon gap +! 3) Double pane clear, 6mm glass, 6mm air gap +! 4) Double pane lowE, 6mm lowE glass outside, 6mm air gap, 6mm clear glass +! +! Doors: 2 ea.: Single pane grey, 3mm glass +! +! Detached Shading: None +! Daylight: None +! Natural Ventilation: None +! Compact Schedules: Yes +! +! HVAC: Standard VAV system with outside air economizer, Steam reheat coils, +! central chilled water cooling coil. Central Plant is single Steam +! boiler, electric compression chiller with air cooled condenser. +! All equipment is autosized. +! +! Zonal Equipment: AirTerminal:SingleDuct:VAV:Reheat +! Central Air Handling Equipment: Yes +! System Equipment Autosize: Yes +! Purchased Cooling: None +! Purchased Heating: DistrictHeating:Steam +! Coils: Coil:Cooling:Water, COIL:Steam:AirHeating +! Pumps: Pump:VariableSpeed +! Boilers: None +! Chillers: Chiller:Electric +! +! Results: +! Standard Reports: None +! Timestep or Hourly Variables: Hourly +! Time bins Report: None +! HTML Report: None +! Environmental Emissions: None +! Utility Tariffs: None + + Version,23.2; + + Building, + Building, !- Name + 30., !- North Axis {deg} + City, !- Terrain + 0.04, !- Loads Convergence Tolerance Value {W} + 0.4, !- Temperature Convergence Tolerance Value {deltaC} + FullExterior, !- Solar Distribution + , !- Maximum Number of Warmup Days + 6; !- Minimum Number of Warmup Days + + Timestep,4; + + SurfaceConvectionAlgorithm:Inside,Simple; + + SurfaceConvectionAlgorithm:Outside,SimpleCombined; + + HeatBalanceAlgorithm,ConductionTransferFunction; + + SimulationControl, + Yes, !- Do Zone Sizing Calculation + Yes, !- Do System Sizing Calculation + No, !- Do Plant Sizing Calculation + Yes, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods + No, !- Do HVAC Sizing Simulation for Sizing Periods + 1; !- Maximum Number of HVAC Sizing Simulation Passes + + RunPeriod, + Run Period 1, !- Name + 1, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 1, !- End Month + 12, !- End Day of Month + , !- End Year + , !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + , !- Apply Weekend Holiday Rule + , !- Use Weather File Rain Indicators + ; !- Use Weather File Snow Indicators + + RunPeriod, + Run Period 2, !- Name + 4, !- Begin Month + 1, !- Begin Day of Month + , !- Begin Year + 5, !- End Month + 5, !- End Day of Month + , !- End Year + , !- Day of Week for Start Day + Yes, !- Use Weather File Holidays and Special Days + Yes, !- Use Weather File Daylight Saving Period + , !- Apply Weekend Holiday Rule + , !- Use Weather File Rain Indicators + ; !- Use Weather File Snow Indicators + + Site:Location, + CHICAGO_IL_USA TMY2-94846, !- Name + 41.78, !- Latitude {deg} + -87.75, !- Longitude {deg} + -6.00, !- Time Zone {hr} + 190.00; !- Elevation {m} + +! CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, MaxDB= -17.3°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name + 1, !- Month + 21, !- Day of Month + WinterDesignDay, !- Day Type + -17.3, !- Maximum Dry-Bulb Temperature {C} + 0.0, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 4.9, !- Wind Speed {m/s} + 270, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 0.0; !- Sky Clearness + +! CHICAGO_IL_USA Annual Cooling 1% Design Conditions, MaxDB= 31.5°C MCWB= 23.0°C + + SizingPeriod:DesignDay, + CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name + 7, !- Month + 21, !- Day of Month + SummerDesignDay, !- Day Type + 31.5, !- Maximum Dry-Bulb Temperature {C} + 10.7, !- Daily Dry-Bulb Temperature Range {deltaC} + , !- Dry-Bulb Temperature Range Modifier Type + , !- Dry-Bulb Temperature Range Modifier Day Schedule Name + Wetbulb, !- Humidity Condition Type + 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C} + , !- Humidity Condition Day Schedule Name + , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + , !- Enthalpy at Maximum Dry-Bulb {J/kg} + , !- Daily Wet-Bulb Temperature Range {deltaC} + 99063., !- Barometric Pressure {Pa} + 5.3, !- Wind Speed {m/s} + 230, !- Wind Direction {deg} + No, !- Rain Indicator + No, !- Snow Indicator + No, !- Daylight Saving Time Indicator + ASHRAEClearSky, !- Solar Model Indicator + , !- Beam Solar Day Schedule Name + , !- Diffuse Solar Day Schedule Name + , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless} + , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless} + 1.0; !- Sky Clearness + + Site:GroundTemperature:BuildingSurface,20.03,20.03,20.13,20.30,20.43,20.52,20.62,20.77,20.78,20.55,20.44,20.20; + + Material, + WD10, !- Name + MediumSmooth, !- Roughness + 0.667, !- Thickness {m} + 0.115, !- Conductivity {W/m-K} + 513, !- Density {kg/m3} + 1381, !- Specific Heat {J/kg-K} + 0.9, !- Thermal Absorptance + 0.78, !- Solar Absorptance + 0.78; !- Visible Absorptance + + Material, + RG01, !- Name + Rough, !- Roughness + 1.2700000E-02, !- Thickness {m} + 1.442000, !- Conductivity {W/m-K} + 881.0000, !- Density {kg/m3} + 1674.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material, + BR01, !- Name + VeryRough, !- Roughness + 9.4999997E-03, !- Thickness {m} + 0.1620000, !- Conductivity {W/m-K} + 1121.000, !- Density {kg/m3} + 1464.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7000000, !- Solar Absorptance + 0.7000000; !- Visible Absorptance + + Material, + IN46, !- Name + VeryRough, !- Roughness + 7.6200001E-02, !- Thickness {m} + 2.3000000E-02, !- Conductivity {W/m-K} + 24.00000, !- Density {kg/m3} + 1590.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.5000000, !- Solar Absorptance + 0.5000000; !- Visible Absorptance + + Material, + WD01, !- Name + MediumSmooth, !- Roughness + 1.9099999E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 513.0000, !- Density {kg/m3} + 1381.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + PW03, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1150000, !- Conductivity {W/m-K} + 545.0000, !- Density {kg/m3} + 1213.000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7800000, !- Solar Absorptance + 0.7800000; !- Visible Absorptance + + Material, + IN02, !- Name + Rough, !- Roughness + 9.0099998E-02, !- Thickness {m} + 4.3000001E-02, !- Conductivity {W/m-K} + 10.00000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP01, !- Name + MediumSmooth, !- Roughness + 1.2700000E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + GP02, !- Name + MediumSmooth, !- Roughness + 1.5900001E-02, !- Thickness {m} + 0.1600000, !- Conductivity {W/m-K} + 801.0000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material, + CC03, !- Name + MediumRough, !- Roughness + 0.1016000, !- Thickness {m} + 1.310000, !- Conductivity {W/m-K} + 2243.000, !- Density {kg/m3} + 837.0000, !- Specific Heat {J/kg-K} + 0.9000000, !- Thermal Absorptance + 0.6500000, !- Solar Absorptance + 0.6500000; !- Visible Absorptance + + Material:NoMass, + CP01, !- Name + Rough, !- Roughness + 0.3670000, !- Thermal Resistance {m2-K/W} + 0.9000000, !- Thermal Absorptance + 0.7500000, !- Solar Absorptance + 0.7500000; !- Visible Absorptance + + Material:NoMass, + MAT-SB-U, !- Name + Rough, !- Roughness + 0.117406666, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:NoMass, + MAT-CLNG-1, !- Name + Rough, !- Roughness + 0.652259290, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:NoMass, + MAT-FLOOR-1, !- Name + Rough, !- Roughness + 3.522199631, !- Thermal Resistance {m2-K/W} + 0.65, !- Thermal Absorptance + 0.65, !- Solar Absorptance + 0.65; !- Visible Absorptance + + Material:AirGap, + AL21, !- Name + 0.1570000; !- Thermal Resistance {m2-K/W} + + Material:AirGap, + AL23, !- Name + 0.1530000; !- Thermal Resistance {m2-K/W} + + WindowMaterial:Glazing, + CLEAR 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.837, !- Solar Transmittance at Normal Incidence + 0.075, !- Front Side Solar Reflectance at Normal Incidence + 0.075, !- Back Side Solar Reflectance at Normal Incidence + 0.898, !- Visible Transmittance at Normal Incidence + 0.081, !- Front Side Visible Reflectance at Normal Incidence + 0.081, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Glazing, + GREY 3MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.003, !- Thickness {m} + 0.626, !- Solar Transmittance at Normal Incidence + 0.061, !- Front Side Solar Reflectance at Normal Incidence + 0.061, !- Back Side Solar Reflectance at Normal Incidence + 0.611, !- Visible Transmittance at Normal Incidence + 0.061, !- Front Side Visible Reflectance at Normal Incidence + 0.061, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Glazing, + CLEAR 6MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.006, !- Thickness {m} + 0.775, !- Solar Transmittance at Normal Incidence + 0.071, !- Front Side Solar Reflectance at Normal Incidence + 0.071, !- Back Side Solar Reflectance at Normal Incidence + 0.881, !- Visible Transmittance at Normal Incidence + 0.080, !- Front Side Visible Reflectance at Normal Incidence + 0.080, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.84, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Glazing, + LoE CLEAR 6MM, !- Name + SpectralAverage, !- Optical Data Type + , !- Window Glass Spectral Data Set Name + 0.006, !- Thickness {m} + 0.600, !- Solar Transmittance at Normal Incidence + 0.170, !- Front Side Solar Reflectance at Normal Incidence + 0.220, !- Back Side Solar Reflectance at Normal Incidence + 0.840, !- Visible Transmittance at Normal Incidence + 0.055, !- Front Side Visible Reflectance at Normal Incidence + 0.078, !- Back Side Visible Reflectance at Normal Incidence + 0.0, !- Infrared Transmittance at Normal Incidence + 0.84, !- Front Side Infrared Hemispherical Emissivity + 0.10, !- Back Side Infrared Hemispherical Emissivity + 0.9; !- Conductivity {W/m-K} + + WindowMaterial:Gas, + AIR 6MM, !- Name + Air, !- Gas Type + 0.0063; !- Thickness {m} + + WindowMaterial:Gas, + AIR 13MM, !- Name + Air, !- Gas Type + 0.0127; !- Thickness {m} + + WindowMaterial:Gas, + ARGON 13MM, !- Name + Argon, !- Gas Type + 0.0127; !- Thickness {m} + + Construction, + ROOF-1, !- Name + RG01, !- Outside Layer + BR01, !- Layer 2 + IN46, !- Layer 3 + WD01; !- Layer 4 + + Construction, + WALL-1, !- Name + WD01, !- Outside Layer + PW03, !- Layer 2 + IN02, !- Layer 3 + GP01; !- Layer 4 + + Construction, + CLNG-1, !- Name + MAT-CLNG-1; !- Outside Layer + + Construction, + FLOOR-SLAB-1, !- Name + CC03; !- Outside Layer + + Construction, + INT-WALL-1, !- Name + GP02, !- Outside Layer + AL21, !- Layer 2 + GP02; !- Layer 3 + + Construction, + Dbl Clr 3mm/13mm Air, !- Name + CLEAR 3MM, !- Outside Layer + AIR 13MM, !- Layer 2 + CLEAR 3MM; !- Layer 3 + + Construction, + Sgl Grey 3mm, !- Name + GREY 3MM; !- Outside Layer + + Zone, + PLENUM-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 0.609600067, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + SPACE1-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + SPACE2-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + SPACE3-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + SPACE4-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + Zone, + SPACE5-1, !- Name + 0, !- Direction of Relative North {deg} + 0, !- X Origin {m} + 0, !- Y Origin {m} + 0, !- Z Origin {m} + 1, !- Type + 1, !- Multiplier + 2.438400269, !- Ceiling Height {m} + autocalculate; !- Volume {m3} + + GlobalGeometryRules, + UpperLeftCorner, !- Starting Vertex Position + CounterClockWise, !- Vertex Entry Direction + Relative; !- Coordinate System + + BuildingSurface:Detailed, + WALL-1PF, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PR, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PB, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + WALL-1PL, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + TOP-1, !- Name + ROOF, !- Surface Type + ROOF-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.00000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,3.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,3.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,3.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,3.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C5-1P, !- Name + FLOOR, !- Surface Type + CLNG-1, !- Construction Name + PLENUM-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + FRONT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C1-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C1-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F1-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB12, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB21, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB14, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB41, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB15, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB51, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Sp01-RIGHT, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,0.0,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Sp01-LEFT, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE1-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,0.0,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + RIGHT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C2-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C2-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F2-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB21, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB12, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB23, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB32, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB25, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE2-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB52, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + BACK-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C3-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C3-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F3-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB32, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB23, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB34, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB43, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB35, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB53, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Sp03-RIGHT, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 30.5,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 30.5,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 30.5,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 30.5,15.2,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + Sp03-LEFT, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE3-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,15.2,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + LEFT-1, !- Name + WALL, !- Surface Type + WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Outdoors, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + SunExposed, !- Sun Exposure + WindExposed, !- Wind Exposure + 0.50000, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C4-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C4-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.6,2.4, !- X,Y,Z ==> Vertex 2 {m} + 0.0,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F4-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 1 {m} + 0.0,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB41, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB14, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 0.0,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 0.0,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB43, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB34, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 0.0,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 0.0,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB45, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE4-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB54, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + C5-1, !- Name + CEILING, !- Surface Type + CLNG-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + C5-1P, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + F5-1, !- Name + FLOOR, !- Surface Type + FLOOR-SLAB-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Ground, !- Outside Boundary Condition + , !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,0.0; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB51, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB15, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB52, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB25, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,3.7,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,3.7,0.0, !- X,Y,Z ==> Vertex 2 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 26.8,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB53, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB35, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 26.8,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 26.8,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,11.6,2.4; !- X,Y,Z ==> Vertex 4 {m} + + BuildingSurface:Detailed, + SB54, !- Name + WALL, !- Surface Type + INT-WALL-1, !- Construction Name + SPACE5-1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + SB45, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + 0.0, !- View Factor to Ground + 4, !- Number of Vertices + 3.7,11.6,2.4, !- X,Y,Z ==> Vertex 1 {m} + 3.7,11.6,0.0, !- X,Y,Z ==> Vertex 2 {m} + 3.7,3.7,0.0, !- X,Y,Z ==> Vertex 3 {m} + 3.7,3.7,2.4; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WF-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 3.0,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 3.0,0.0,0.9, !- X,Y,Z ==> Vertex 2 {m} + 16.8,0.0,0.9, !- X,Y,Z ==> Vertex 3 {m} + 16.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DF-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + FRONT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 21.3,0.0,2.1, !- X,Y,Z ==> Vertex 1 {m} + 21.3,0.0,0.0, !- X,Y,Z ==> Vertex 2 {m} + 23.8,0.0,0.0, !- X,Y,Z ==> Vertex 3 {m} + 23.8,0.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WR-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + RIGHT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 30.5,3.85,2.1, !- X,Y,Z ==> Vertex 1 {m} + 30.5,3.85,0.9, !- X,Y,Z ==> Vertex 2 {m} + 30.5,11.4,0.9, !- X,Y,Z ==> Vertex 3 {m} + 30.5,11.4,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WB-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + BACK-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 26.5,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 26.5,15.2,0.9, !- X,Y,Z ==> Vertex 2 {m} + 13.0,15.2,0.9, !- X,Y,Z ==> Vertex 3 {m} + 13.0,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + DB-1, !- Name + GLASSDOOR, !- Surface Type + Sgl Grey 3mm, !- Construction Name + BACK-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 9.1,15.2,2.1, !- X,Y,Z ==> Vertex 1 {m} + 9.1,15.2,0.0, !- X,Y,Z ==> Vertex 2 {m} + 7.0,15.2,0.0, !- X,Y,Z ==> Vertex 3 {m} + 7.0,15.2,2.1; !- X,Y,Z ==> Vertex 4 {m} + + FenestrationSurface:Detailed, + WL-1, !- Name + WINDOW, !- Surface Type + Dbl Clr 3mm/13mm Air, !- Construction Name + LEFT-1, !- Building Surface Name + , !- Outside Boundary Condition Object + 0.50000, !- View Factor to Ground + , !- Frame and Divider Name + 1, !- Multiplier + 4, !- Number of Vertices + 0.0,11.4,2.1, !- X,Y,Z ==> Vertex 1 {m} + 0.0,11.4,0.9, !- X,Y,Z ==> Vertex 2 {m} + 0.0,4.0,0.9, !- X,Y,Z ==> Vertex 3 {m} + 0.0,4.0,2.1; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + Main South Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 0.0,-1.3,2.2, !- X,Y,Z ==> Vertex 1 {m} + 0.0,0.0,2.2, !- X,Y,Z ==> Vertex 2 {m} + 19.8,0.0,2.2, !- X,Y,Z ==> Vertex 3 {m} + 19.8,-1.3,2.2; !- X,Y,Z ==> Vertex 4 {m} + + Shading:Zone:Detailed, + South Door Overhang, !- Name + FRONT-1, !- Base Surface Name + ShadeTransSch, !- Transmittance Schedule Name + 4, !- Number of Vertices + 21.0,-2.0,2.6, !- X,Y,Z ==> Vertex 1 {m} + 21.0,0.0,2.6, !- X,Y,Z ==> Vertex 2 {m} + 24.1,0.0,2.6, !- X,Y,Z ==> Vertex 3 {m} + 24.1,-2.0,2.6; !- X,Y,Z ==> Vertex 4 {m} + + ScheduleTypeLimits, + Any Number; !- Name + + ScheduleTypeLimits, + Fraction, !- Name + 0.0, !- Lower Limit Value + 1.0, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + ScheduleTypeLimits, + Temperature, !- Name + -60, !- Lower Limit Value + 200, !- Upper Limit Value + CONTINUOUS, !- Numeric Type + Temperature; !- Unit Type + + ScheduleTypeLimits, + Control Type, !- Name + 0, !- Lower Limit Value + 4, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + On/Off, !- Name + 0, !- Lower Limit Value + 1, !- Upper Limit Value + DISCRETE; !- Numeric Type + + ScheduleTypeLimits, + FlowRate, !- Name + 0.0, !- Lower Limit Value + 10, !- Upper Limit Value + CONTINUOUS; !- Numeric Type + + Schedule:Compact, + OCCUPY-1, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 8:00,0.00, !- Field 3 + Until: 11:00,1.00, !- Field 5 + Until: 12:00,0.80, !- Field 7 + Until: 13:00,0.40, !- Field 9 + Until: 14:00,0.80, !- Field 11 + Until: 18:00,1.00, !- Field 13 + Until: 19:00,0.50, !- Field 15 + Until: 21:00,0.10, !- Field 17 + Until: 24:00,0.00, !- Field 19 + For: Weekends Holiday, !- Field 21 + Until: 24:00,0.00, !- Field 22 + For: SummerDesignDay, !- Field 24 + Until: 8:00,0.00, !- Field 25 + Until: 11:00,1.00, !- Field 27 + Until: 12:00,0.80, !- Field 29 + Until: 13:00,0.40, !- Field 31 + Until: 14:00,0.80, !- Field 33 + Until: 18:00,1.00, !- Field 35 + Until: 19:00,0.50, !- Field 37 + Until: 21:00,0.10, !- Field 39 + Until: 24:00,0.00, !- Field 41 + For: WinterDesignDay, !- Field 43 + Until: 24:00,0.00, !- Field 44 + For: CustomDay1 CustomDay2, !- Field 46 + Until: 8:00,0.00, !- Field 47 + Until: 11:00,1.00, !- Field 49 + Until: 12:00,0.80, !- Field 51 + Until: 13:00,0.40, !- Field 53 + Until: 14:00,0.80, !- Field 55 + Until: 18:00,1.00, !- Field 57 + Until: 19:00,0.50, !- Field 59 + Until: 21:00,0.10, !- Field 61 + Until: 24:00,0.00; !- Field 63 + + Schedule:Compact, + LIGHTS-1, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 8:00,5.00E-002, !- Field 3 + Until: 9:00,0.90, !- Field 5 + Until: 10:00,0.95, !- Field 7 + Until: 11:00,1.00, !- Field 9 + Until: 12:00,0.95, !- Field 11 + Until: 13:00,0.80, !- Field 13 + Until: 14:00,0.90, !- Field 15 + Until: 18:00,1.00, !- Field 17 + Until: 19:00,0.60, !- Field 19 + Until: 21:00,0.20, !- Field 21 + Until: 24:00,5.00E-002, !- Field 23 + For: Weekends Holiday, !- Field 25 + Until: 24:00,5.00E-002, !- Field 26 + For: SummerDesignDay, !- Field 28 + Until: 8:00,5.00E-002, !- Field 29 + Until: 9:00,0.90, !- Field 31 + Until: 10:00,0.95, !- Field 33 + Until: 11:00,1.00, !- Field 35 + Until: 12:00,0.95, !- Field 37 + Until: 13:00,0.80, !- Field 39 + Until: 14:00,0.90, !- Field 41 + Until: 18:00,1.00, !- Field 43 + Until: 19:00,0.60, !- Field 45 + Until: 21:00,0.20, !- Field 47 + Until: 24:00,5.00E-002, !- Field 49 + For: WinterDesignDay, !- Field 51 + Until: 24:00,5.00E-002, !- Field 52 + For: CustomDay1 CustomDay2, !- Field 54 + Until: 8:00,5.00E-002, !- Field 55 + Until: 9:00,0.90, !- Field 57 + Until: 10:00,0.95, !- Field 59 + Until: 11:00,1.00, !- Field 61 + Until: 12:00,0.95, !- Field 63 + Until: 13:00,0.80, !- Field 65 + Until: 14:00,0.90, !- Field 67 + Until: 18:00,1.00, !- Field 69 + Until: 19:00,0.60, !- Field 71 + Until: 21:00,0.20, !- Field 73 + Until: 24:00,5.00E-002; !- Field 75 + + Schedule:Compact, + EQUIP-1, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 8:00,2.00E-002, !- Field 3 + Until: 9:00,0.40, !- Field 5 + Until: 14:00,0.90, !- Field 7 + Until: 15:00,0.80, !- Field 9 + Until: 16:00,0.70, !- Field 11 + Until: 18:00,0.50, !- Field 13 + Until: 20:00,0.30, !- Field 15 + Until: 24:00,2.00E-002, !- Field 17 + For: Weekends Holiday, !- Field 19 + Until: 24:00,0.20, !- Field 20 + For: SummerDesignDay, !- Field 22 + Until: 8:00,2.00E-002, !- Field 23 + Until: 9:00,0.40, !- Field 25 + Until: 14:00,0.90, !- Field 27 + Until: 15:00,0.80, !- Field 29 + Until: 16:00,0.70, !- Field 31 + Until: 18:00,0.50, !- Field 33 + Until: 20:00,0.30, !- Field 35 + Until: 24:00,2.00E-002, !- Field 37 + For: WinterDesignDay, !- Field 39 + Until: 24:00,0.20, !- Field 40 + For: CustomDay1 CustomDay2, !- Field 42 + Until: 8:00,2.00E-002, !- Field 43 + Until: 9:00,0.40, !- Field 45 + Until: 14:00,0.90, !- Field 47 + Until: 15:00,0.80, !- Field 49 + Until: 16:00,0.70, !- Field 51 + Until: 18:00,0.50, !- Field 53 + Until: 20:00,0.30, !- Field 55 + Until: 24:00,2.00E-002; !- Field 57 + + Schedule:Compact, + INFIL-SCH, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.00, !- Field 3 + Through: 10/31, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.00, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.00; !- Field 11 + + Schedule:Compact, + ACTSCHD, !- Name + ANY NUMBER, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,117.239997864; !- Field 3 + + !- Field 4 + + Schedule:Compact, + SHADETRANSSCH, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.00; !- Field 3 + + Schedule:Compact, + HTG-SETP-SCH, !- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 7:00,12.80, !- Field 3 + Until: 18:00,21.10, !- Field 5 + Until: 24:00,12.80, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 7:00,12.80, !- Field 10 + Until: 13:00,21.10, !- Field 12 + Until: 24:00,12.80, !- Field 14 + For: SummerDesignDay, !- Field 16 + Until: 24:00,12.80, !- Field 17 + For: WinterDesignDay, !- Field 19 + Until: 24:00,21.10, !- Field 20 + For: CustomDay1 CustomDay2, !- Field 22 + Until: 7:00,12.80, !- Field 23 + Until: 18:00,21.10, !- Field 25 + Until: 24:00,12.80; !- Field 27 + + Schedule:Compact, + CLG-SETP-SCH, !- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 7:00,40.00, !- Field 3 + Until: 18:00,23.90, !- Field 5 + Until: 24:00,40.00, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 7:00,40.00, !- Field 10 + Until: 13:00,23.90, !- Field 12 + Until: 24:00,32.20, !- Field 14 + For: SummerDesignDay, !- Field 16 + Until: 24:00,23.90, !- Field 17 + For: WinterDesignDay, !- Field 19 + Until: 24:00,40.00, !- Field 20 + For: CustomDay1 CustomDay2, !- Field 22 + Until: 7:00,40.00, !- Field 23 + Until: 18:00,23.90, !- Field 25 + Until: 24:00,40.00; !- Field 27 + + Schedule:Compact, + ZONE CONTROL TYPE SCHED, !- Name + CONTROL TYPE, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays weekends holiday, !- Field 2 + Until: 24:00,4.00, !- Field 3 + For: SummerDesignDay, !- Field 5 + Until: 24:00,2.00, !- Field 6 + For: WinterDesignDay, !- Field 8 + Until: 24:00,1.00, !- Field 9 + For: CustomDay1 CustomDay2, !- Field 11 + Until: 24:00,4.00; !- Field 12 + + Schedule:Compact, + MIN OA SCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: Weekdays, !- Field 2 + Until: 6:00,2.00E-002, !- Field 3 + Until: 18:00,1.00, !- Field 5 + Until: 24:00,2.00E-002, !- Field 7 + For: Weekends Holiday, !- Field 9 + Until: 24:00,2.00E-002, !- Field 10 + For: SummerDesignDay WinterDesignDay, !- Field 12 + Until: 6:00,2.00E-002, !- Field 13 + Until: 18:00,1.00, !- Field 15 + Until: 24:00,2.00E-002, !- Field 17 + For: CustomDay1 CustomDay2, !- Field 19 + Until: 24:00,2.00E-002; !- Field 20 + + Schedule:Compact, + FANAVAILSCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.00, !- Field 3 + Through: 9/30, !- Field 5 + For: Weekdays, !- Field 6 + Until: 7:00,0.00, !- Field 7 + Until: 17:00,1.00, !- Field 9 + Until: 24:00,0.00, !- Field 11 + For: Weekends Holiday, !- Field 13 + Until: 24:00,0.00, !- Field 14 + For: SummerDesignDay WinterDesignDay, !- Field 16 + Until: 24:00,1.00, !- Field 17 + For: CustomDay1 CustomDay2, !- Field 19 + Until: 24:00,0.00, !- Field 20 + Through: 12/31, !- Field 22 + For: AllDays, !- Field 23 + Until: 24:00,1.00; !- Field 24 + + Schedule:Compact, + COOLINGCOILAVAILSCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,0.00, !- Field 3 + Through: 9/30, !- Field 5 + For: Weekdays, !- Field 6 + Until: 7:00,0.00, !- Field 7 + Until: 17:00,1.00, !- Field 9 + Until: 24:00,0.00, !- Field 11 + For: Weekends Holiday, !- Field 13 + Until: 24:00,0.00, !- Field 14 + For: SummerDesignDay, !- Field 16 + Until: 24:00,1.00, !- Field 17 + For: WinterDesignDay, !- Field 19 + Until: 24:00,0.00, !- Field 20 + For: CustomDay1 CustomDay2, !- Field 22 + Until: 24:00,0.00, !- Field 23 + Through: 12/31, !- Field 25 + For: AllDays, !- Field 26 + Until: 24:00,0.00; !- Field 27 + + Schedule:Compact, + REHEATCOILAVAILSCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.00, !- Field 3 + Through: 9/30, !- Field 5 + For: Weekdays, !- Field 6 + Until: 7:00,0.00, !- Field 7 + Until: 17:00,1.00, !- Field 9 + Until: 24:00,0.00, !- Field 11 + For: Weekends Holiday, !- Field 13 + Until: 24:00,0.00, !- Field 14 + For: SummerDesignDay WinterDesignDay, !- Field 16 + Until: 24:00,1.00, !- Field 17 + For: CustomDay1 CustomDay2, !- Field 19 + Until: 24:00,0.00, !- Field 20 + Through: 12/31, !- Field 22 + For: AllDays, !- Field 23 + Until: 24:00,1.00; !- Field 24 + + Schedule:Compact, + HEATINGCOILAVAILSCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.00, !- Field 3 + Through: 9/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,0.00, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,1.00; !- Field 11 + + Schedule:Compact, + CW-LOOP-TEMP-SCHEDULE, !- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,7.22; !- Field 3 + + Schedule:Compact, + STEAM-LOOP-TEMP-SCHEDULE,!- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,108.00; !- Field 3 + + Schedule:Compact, + PLANTONSCHED, !- Name + FRACTION, !- Schedule Type Limits Name + Through: 12/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,1.00; !- Field 3 + + Schedule:Compact, + SEASONAL RESET SUPPLY AIR TEMP SCH, !- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,16.00, !- Field 3 + Through: 9/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,13.00, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,16.00; !- Field 11 + + Schedule:Compact, + HEATING SUPPLY AIR TEMP SCH, !- Name + TEMPERATURE, !- Schedule Type Limits Name + Through: 3/31, !- Field 1 + For: AllDays, !- Field 2 + Until: 24:00,15.00, !- Field 3 + Through: 9/30, !- Field 5 + For: AllDays, !- Field 6 + Until: 24:00,12.00, !- Field 7 + Through: 12/31, !- Field 9 + For: AllDays, !- Field 10 + Until: 24:00,15.00; !- Field 11 + + People, + SPACE1-1 People 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + People, + SPACE2-1 People 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + People, + SPACE3-1 People 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 11, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + People, + SPACE4-1 People 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 5, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + People, + SPACE5-1 People 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + OCCUPY-1, !- Number of People Schedule Name + people, !- Number of People Calculation Method + 20, !- Number of People + , !- People per Floor Area {person/m2} + , !- Floor Area per Person {m2/person} + 0.3, !- Fraction Radiant + , !- Sensible Heat Fraction + ActSchd; !- Activity Level Schedule Name + + Lights, + SPACE1-1 Lights 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1584, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + SPACE2-1 Lights 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + SPACE3-1 Lights 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 1584, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + SPACE4-1 Lights 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 684, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + Lights, + SPACE5-1 Lights 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + LIGHTS-1, !- Schedule Name + LightingLevel, !- Design Level Calculation Method + 2964, !- Lighting Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0.0, !- Return Air Fraction + 0.59, !- Fraction Radiant + 0.2, !- Fraction Visible + 0, !- Fraction Replaceable + GeneralLights; !- End-Use Subcategory + + ElectricEquipment, + SPACE1-1 ElecEq 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1056, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ElectricEquipment, + SPACE2-1 ElecEq 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 456, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ElectricEquipment, + SPACE3-1 ElecEq 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1056, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ElectricEquipment, + SPACE4-1 ElecEq 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 456, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ElectricEquipment, + SPACE5-1 ElecEq 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + EQUIP-1, !- Schedule Name + EquipmentLevel, !- Design Level Calculation Method + 1976, !- Design Level {W} + , !- Watts per Zone Floor Area {W/m2} + , !- Watts per Person {W/person} + 0, !- Fraction Latent + 0.3, !- Fraction Radiant + 0; !- Fraction Lost + + ZoneInfiltration:DesignFlowRate, + SPACE1-1 Infil 1, !- Name + SPACE1-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.0167, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SPACE2-1 Infil 1, !- Name + SPACE2-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.00717, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SPACE3-1 Infil 1, !- Name + SPACE3-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.0167, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SPACE4-1 Infil 1, !- Name + SPACE4-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.00717, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + ZoneInfiltration:DesignFlowRate, + SPACE5-1 Infil 1, !- Name + SPACE5-1, !- Zone or ZoneList or Space or SpaceList Name + INFIL-SCH, !- Schedule Name + flow/zone, !- Design Flow Rate Calculation Method + 0.031089, !- Design Flow Rate {m3/s} + , !- Flow per Zone Floor Area {m3/s-m2} + , !- Flow per Exterior Surface Area {m3/s-m2} + , !- Air Changes per Hour {1/hr} + 0, !- Constant Term Coefficient + 0, !- Temperature Term Coefficient + 0.2237, !- Velocity Term Coefficient + 0; !- Velocity Squared Term Coefficient + + Sizing:Parameters, + 1.3, !- Heating Sizing Factor + 1.3; !- Cooling Sizing Factor + + Sizing:Zone, + SPACE1-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE1-1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE1-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SPACE2-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE2-1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE2-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SPACE3-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE3-1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE3-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SPACE4-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE4-1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE4-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:Zone, + SPACE5-1, !- Zone or ZoneList Name + SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method + 14., !- Zone Cooling Design Supply Air Temperature {C} + , !- Zone Cooling Design Supply Air Temperature Difference {deltaC} + SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method + 50., !- Zone Heating Design Supply Air Temperature {C} + , !- Zone Heating Design Supply Air Temperature Difference {deltaC} + 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + SZ DSOA SPACE5-1, !- Design Specification Outdoor Air Object Name + 0.0, !- Zone Heating Sizing Factor + 0.0, !- Zone Cooling Sizing Factor + DesignDay, !- Cooling Design Air Flow Method + 0, !- Cooling Design Air Flow Rate {m3/s} + , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2} + , !- Cooling Minimum Air Flow {m3/s} + , !- Cooling Minimum Air Flow Fraction + DesignDay, !- Heating Design Air Flow Method + 0, !- Heating Design Air Flow Rate {m3/s} + , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2} + , !- Heating Maximum Air Flow {m3/s} + , !- Heating Maximum Air Flow Fraction + , !- Design Specification Zone Air Distribution Object Name + No, !- Account for Dedicated Outdoor Air System + NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy + autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C} + autosize; !- Dedicated Outdoor Air High Setpoint Temperature for Design {C} + + DesignSpecification:OutdoorAir, + SZ DSOA SPACE5-1, !- Name + flow/person, !- Outdoor Air Method + 0.00944, !- Outdoor Air Flow per Person {m3/s-person} + 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2} + 0.0; !- Outdoor Air Flow per Zone {m3/s} + + Sizing:System, + VAV SYS 1, !- AirLoop Name + sensible, !- Type of Load to Size On + autosize, !- Design Outdoor Air Flow Rate {m3/s} + 0.3, !- Central Heating Maximum System Air Flow Ratio + 7.0, !- Preheat Design Temperature {C} + 0.008, !- Preheat Design Humidity Ratio {kgWater/kgDryAir} + 11.0, !- Precool Design Temperature {C} + 0.008, !- Precool Design Humidity Ratio {kgWater/kgDryAir} + 12.8, !- Central Cooling Design Supply Air Temperature {C} + 16.0, !- Central Heating Design Supply Air Temperature {C} + noncoincident, !- Type of Zone Sum to Use + no, !- 100% Outdoor Air in Cooling + no, !- 100% Outdoor Air in Heating + 0.008, !- Central Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir} + 0.008, !- Central Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir} + DesignDay, !- Cooling Supply Air Flow Rate Method + 0, !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit Cooling Capacity {m3/s-W} + DesignDay, !- Heating Supply Air Flow Rate Method + 0, !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Fraction of Autosized Cooling Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit Heating Capacity {m3/s-W} + , !- System Outdoor Air Method + 1.0, !- Zone Maximum Outdoor Air Fraction {dimensionless} + CoolingDesignCapacity, !- Cooling Design Capacity Method + autosize, !- Cooling Design Capacity {W} + , !- Cooling Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Cooling Design Capacity + HeatingDesignCapacity, !- Heating Design Capacity Method + autosize, !- Heating Design Capacity {W} + , !- Heating Design Capacity Per Floor Area {W/m2} + , !- Fraction of Autosized Heating Design Capacity + VAV; !- Central Cooling Capacity Control Method + +! Single Chiller Supply +! Chiller Parameters for DistrictCooling + + Sizing:Plant, + Purchased CHW Plant, !- Plant or Condenser Loop Name + Cooling, !- Loop Type + 7.22, !- Design Loop Exit Temperature {C} + 6.67; !- Loop Design Temperature Difference {deltaC} + +! Single Boiler Supply + + Sizing:Plant, + DistrictHeating Steam Plant, !- Plant or Condenser Loop Name + Steam, !- Loop Type + 110, !- Design Loop Exit Temperature {C} + 25; !- Loop Design Temperature Difference {deltaC} + + NodeList, + SPACE1-1 Inlets, !- Name + SPACE1-1 Supply Inlet; !- Node 1 Name + + NodeList, + SPACE2-1 Inlets, !- Name + SPACE2-1 Supply Inlet; !- Node 1 Name + + NodeList, + SPACE3-1 Inlets, !- Name + SPACE3-1 Supply Inlet; !- Node 1 Name + + NodeList, + SPACE4-1 Inlets, !- Name + SPACE4-1 Supply Inlet; !- Node 1 Name + + NodeList, + SPACE5-1 Inlets, !- Name + SPACE5-1 Supply Inlet; !- Node 1 Name + + NodeList, + VAV SYS 1 Supply Air Temp Nodes, !- Name + VAV SYS 1 Air Loop Outlet; !- Node 1 Name + + NodeList, + VAV SYS 1 Heating Supply Air Temp Nodes, !- Name + VAV SYS 1 Heating Coil Outlet; !- Node 1 Name + + BranchList, + VAV SYS 1 Branches, !- Name + VAV SYS 1 Main Branch; !- Branch 1 Name + +! Chilled Water Demand Side + + BranchList, + CHW Demand 1 ChW Demand Side Branches, !- Name + CHW Demand 1 ChW Inlet Branch, !- Branch 1 Name + VAV SYS 1 ChW-Branch, !- Branch 2 Name + CHW Demand 1 ChW Bypass Branch, !- Branch 3 Name + CHW Demand 1 ChW Outlet Branch; !- Branch 4 Name + +! Hot Water Demand Side + + BranchList, + Steam Demand 1 Steam Demand Side Branches, !- Name + Steam Demand 1 Steam Inlet Branch, !- Branch 1 Name + SPACE1-1 Steam-Branch, !- Branch 2 Name + SPACE2-1 Steam-Branch, !- Branch 3 Name + SPACE3-1 Steam-Branch, !- Branch 4 Name + SPACE4-1 Steam-Branch, !- Branch 5 Name + SPACE5-1 Steam-Branch, !- Branch 6 Name + Heating Demand Bypass Branch, !- Branch 7 Name + VAV SYS 1 Steam-Branch, !- Branch 8 Name + Steam Demand 1 Steam Outlet Branch; !- Branch 9 Name + + BranchList, + Purchased CHW Plant ChW Supply Side Branches, !- Name + Purchased CHW Plant ChW Supply Inlet Branch, !- Branch 1 Name + Purchased CHW Plant Chiller Branch, !- Branch 2 Name + Purchased CHW Plant ChW Supply Bypass Branch, !- Branch 3 Name + Purchased CHW Plant ChW Supply Outlet Branch; !- Branch 4 Name + + BranchList, + DistrictHeating Steam Supply Side Branches, !- Name + DistrictHeating Steam Supply Inlet Branch, !- Branch 1 Name + DistrictHeating Steam Branch, !- Branch 2 Name + DistrictHeating Steam Supply Outlet Branch; !- Branch 3 Name + + ConnectorList, + CHW Demand 1 ChW Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + CHW Demand 1 ChW Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + CHW Demand 1 ChW Mixer; !- Connector 2 Name + + ConnectorList, + Steam Demand 1 Steam Demand Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Steam Demand 1 Steam Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Steam Demand 1 Steam Mixer; !- Connector 2 Name + + ConnectorList, + Purchased CHW Plant ChW Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + Purchased CHW Plant ChW Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + Purchased CHW Plant ChW Supply Mixer; !- Connector 2 Name + + ConnectorList, + DistrictHeating Steam Supply Side Connectors, !- Name + Connector:Splitter, !- Connector 1 Object Type + DistrictHeating Steam Supply Splitter, !- Connector 1 Name + Connector:Mixer, !- Connector 2 Object Type + DistrictHeating Steam Supply Mixer; !- Connector 2 Name + + Branch, + SPACE1-1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + SPACE1-1 Reheat Coil, !- Component 1 Name + SPACE1-1 Reheat Coil Steam Inlet, !- Component 1 Inlet Node Name + SPACE1-1 Reheat Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + SPACE2-1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + SPACE2-1 Reheat Coil, !- Component 1 Name + SPACE2-1 Reheat Coil Steam Inlet, !- Component 1 Inlet Node Name + SPACE2-1 Reheat Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + SPACE3-1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + SPACE3-1 Reheat Coil, !- Component 1 Name + SPACE3-1 Reheat Coil Steam Inlet, !- Component 1 Inlet Node Name + SPACE3-1 Reheat Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + SPACE4-1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + SPACE4-1 Reheat Coil, !- Component 1 Name + SPACE4-1 Reheat Coil Steam Inlet, !- Component 1 Inlet Node Name + SPACE4-1 Reheat Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + SPACE5-1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + SPACE5-1 Reheat Coil, !- Component 1 Name + SPACE5-1 Reheat Coil Steam Inlet, !- Component 1 Inlet Node Name + SPACE5-1 Reheat Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + Heating Demand Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Heating Demand Bypass, !- Component 1 Name + Heating Demand Bypass Inlet Node, !- Component 1 Inlet Node Name + Heating Demand Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + VAV SYS 1 Main Branch, !- Name + , !- Pressure Drop Curve Name + AirLoopHVAC:OutdoorAirSystem, !- Component 1 Object Type + VAV SYS 1 OA System, !- Component 1 Name + VAV SYS 1 Air Loop Inlet,!- Component 1 Inlet Node Name + VAV SYS 1 Mixed Air Outlet, !- Component 1 Outlet Node Name + Coil:Cooling:Water:DetailedGeometry, !- Component 2 Object Type + VAV SYS 1 Cooling Coil, !- Component 2 Name + VAV SYS 1 Mixed Air Outlet, !- Component 2 Inlet Node Name + VAV SYS 1 Cooling Coil Outlet, !- Component 2 Outlet Node Name + Coil:Heating:Steam, !- Component 3 Object Type + VAV SYS 1 Heating Coil, !- Component 3 Name + VAV SYS 1 Cooling Coil Outlet, !- Component 3 Inlet Node Name + VAV SYS 1 Heating Coil Outlet, !- Component 3 Outlet Node Name + Fan:VariableVolume, !- Component 4 Object Type + VAV SYS 1 Supply Fan, !- Component 4 Name + VAV SYS 1 Heating Coil Outlet, !- Component 4 Inlet Node Name + VAV SYS 1 Air Loop Outlet; !- Component 4 Outlet Node Name + + Branch, + VAV SYS 1 ChW-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Cooling:Water:DetailedGeometry, !- Component 1 Object Type + VAV SYS 1 Cooling Coil, !- Component 1 Name + VAV SYS 1 Cooling Coil ChW Inlet, !- Component 1 Inlet Node Name + VAV SYS 1 Cooling Coil ChW Outlet; !- Component 1 Outlet Node Name + + Branch, + VAV SYS 1 Steam-Branch, !- Name + , !- Pressure Drop Curve Name + Coil:Heating:Steam, !- Component 1 Object Type + VAV SYS 1 Heating Coil, !- Component 1 Name + VAV SYS 1 Heating Coil Steam Inlet, !- Component 1 Inlet Node Name + VAV SYS 1 Heating Coil Steam Outlet; !- Component 1 Outlet Node Name + + Branch, + CHW Demand 1 ChW Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CHW Demand 1 ChW Inlet Pipe, !- Component 1 Name + CHW Demand 1 ChW Demand Inlet Node, !- Component 1 Inlet Node Name + CHW Demand 1 ChW Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CHW Demand 1 ChW Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CHW Demand 1 ChW Outlet Pipe, !- Component 1 Name + CHW Demand 1 ChW Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + CHW Demand 1 ChW Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + CHW Demand 1 ChW Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + CHW Demand 1 ChW Bypass Pipe, !- Component 1 Name + CHW Demand 1 ChW Bypass Inlet Node, !- Component 1 Inlet Node Name + CHW Demand 1 ChW Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Steam Demand 1 Steam Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Steam Demand 1 Steam Inlet Pipe, !- Component 1 Name + Steam Demand 1 Steam Demand Inlet Node, !- Component 1 Inlet Node Name + Steam Demand 1 Steam Demand Entrance Pipe Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Steam Demand 1 Steam Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + Steam Demand 1 Steam Outlet Pipe, !- Component 1 Name + Steam Demand 1 Steam Demand Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Steam Demand 1 Steam Demand Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Purchased CHW Plant Chiller Branch, !- Name + , !- Pressure Drop Curve Name + DistrictCooling, !- Component 1 Object Type + Purchased CHW Plant Chiller, !- Component 1 Name + Purchased CHW Plant Chiller Inlet Node, !- Component 1 Inlet Node Name + Purchased CHW Plant Chiller Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Purchased CHW Plant ChW Supply Bypass Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Purchased CHW Plant ChW Supply Side Bypass, !- Component 1 Name + Purchased CHW Plant ChW Supply Bypass Inlet Node, !- Component 1 Inlet Node Name + Purchased CHW Plant ChW Supply Bypass Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Purchased CHW Plant ChW Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic, !- Component 1 Object Type + Purchased CHW Plant ChW Supply Outlet, !- Component 1 Name + Purchased CHW Plant ChW Supply Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + Purchased CHW Plant ChW Supply Outlet Node; !- Component 1 Outlet Node Name + + Branch, + Purchased CHW Plant ChW Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed, !- Component 1 Object Type + Purchased CHW Plant ChW Circ Pump, !- Component 1 Name + Purchased CHW Plant ChW Supply Inlet Node, !- Component 1 Inlet Node Name + Purchased CHW Plant ChW Pump Outlet Node; !- Component 1 Outlet Node Name + + Branch, + DistrictHeating Steam Branch, !- Name + , !- Pressure Drop Curve Name + DistrictHeating:Steam, !- Component 1 Object Type + DistrictHeating Steam, !- Component 1 Name + DistrictHeating Steam Inlet Node, !- Component 1 Inlet Node Name + DistrictHeating Steam Outlet Node; !- Component 1 Outlet Node Name + + Branch, + DistrictHeating Steam Supply Outlet Branch, !- Name + , !- Pressure Drop Curve Name + Pipe:Adiabatic:Steam, !- Component 1 Object Type + DistrictHeating Steam Supply Outlet, !- Component 1 Name + DistrictHeating Steam Supply Exit Pipe Inlet Node, !- Component 1 Inlet Node Name + DistrictHeating Steam Supply Outlet Node; !- Component 1 Outlet Node Name + + Branch, + DistrictHeating Steam Supply Inlet Branch, !- Name + , !- Pressure Drop Curve Name + Pump:VariableSpeed:Condensate, !- Component 1 Object Type + DistrictHeating Steam Circ Pump, !- Component 1 Name + DistrictHeating Steam Supply Inlet Node, !- Component 1 Inlet Node Name + DistrictHeating Steam Pump Outlet Node; !- Component 1 Outlet Node Name + + Pipe:Adiabatic, + CHW Demand 1 ChW Inlet Pipe, !- Name + CHW Demand 1 ChW Demand Inlet Node, !- Inlet Node Name + CHW Demand 1 ChW Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CHW Demand 1 ChW Outlet Pipe, !- Name + CHW Demand 1 ChW Demand Exit Pipe Inlet Node, !- Inlet Node Name + CHW Demand 1 ChW Demand Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + CHW Demand 1 ChW Bypass Pipe, !- Name + CHW Demand 1 ChW Bypass Inlet Node, !- Inlet Node Name + CHW Demand 1 ChW Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + Purchased CHW Plant ChW Supply Side Bypass, !- Name + Purchased CHW Plant ChW Supply Bypass Inlet Node, !- Inlet Node Name + Purchased CHW Plant ChW Supply Bypass Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic, + Purchased CHW Plant ChW Supply Outlet, !- Name + Purchased CHW Plant ChW Supply Exit Pipe Inlet Node, !- Inlet Node Name + Purchased CHW Plant ChW Supply Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic:Steam, + Steam Demand 1 Steam Inlet Pipe, !- Name + Steam Demand 1 Steam Demand Inlet Node, !- Inlet Node Name + Steam Demand 1 Steam Demand Entrance Pipe Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic:Steam, + Steam Demand 1 Steam Outlet Pipe, !- Name + Steam Demand 1 Steam Demand Exit Pipe Inlet Node, !- Inlet Node Name + Steam Demand 1 Steam Demand Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic:Steam, + DistrictHeating Steam Supply Outlet, !- Name + DistrictHeating Steam Supply Exit Pipe Inlet Node, !- Inlet Node Name + DistrictHeating Steam Supply Outlet Node; !- Outlet Node Name + + Pipe:Adiabatic:Steam, + Heating Demand Bypass, !- Name + Heating Demand Bypass Inlet Node, !- Inlet Node Name + Heating Demand Bypass Outlet Node; !- Outlet Node Name + + PlantLoop, + Purchased CHW Plant, !- Name + Water, !- Fluid Type + , !- User Defined Fluid Type + Purchased CHW Plant Operation, !- Plant Equipment Operation Scheme Name + Purchased CHW Plant ChW Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 98, !- Maximum Loop Temperature {C} + 1, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + Purchased CHW Plant ChW Supply Inlet Node, !- Plant Side Inlet Node Name + Purchased CHW Plant ChW Supply Outlet Node, !- Plant Side Outlet Node Name + Purchased CHW Plant ChW Supply Side Branches, !- Plant Side Branch List Name + Purchased CHW Plant ChW Supply Side Connectors, !- Plant Side Connector List Name + CHW Demand 1 ChW Demand Inlet Node, !- Demand Side Inlet Node Name + CHW Demand 1 ChW Demand Outlet Node, !- Demand Side Outlet Node Name + CHW Demand 1 ChW Demand Side Branches, !- Demand Side Branch List Name + CHW Demand 1 ChW Demand Side Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + + PlantLoop, + DistrictHeating Steam Plant, !- Name + Steam, !- Fluid Type + , !- User Defined Fluid Type + DistrictHeating Steam Operation, !- Plant Equipment Operation Scheme Name + DistrictHeating Steam Supply Outlet Node, !- Loop Temperature Setpoint Node Name + 110, !- Maximum Loop Temperature {C} + 10, !- Minimum Loop Temperature {C} + autosize, !- Maximum Loop Flow Rate {m3/s} + 0.0, !- Minimum Loop Flow Rate {m3/s} + autocalculate, !- Plant Loop Volume {m3} + DistrictHeating Steam Supply Inlet Node, !- Plant Side Inlet Node Name + DistrictHeating Steam Supply Outlet Node, !- Plant Side Outlet Node Name + DistrictHeating Steam Supply Side Branches, !- Plant Side Branch List Name + DistrictHeating Steam Supply Side Connectors, !- Plant Side Connector List Name + Steam Demand 1 Steam Demand Inlet Node, !- Demand Side Inlet Node Name + Steam Demand 1 Steam Demand Outlet Node, !- Demand Side Outlet Node Name + Steam Demand 1 Steam Demand Side Branches, !- Demand Side Branch List Name + Steam Demand 1 Steam Demand Side Connectors, !- Demand Side Connector List Name + Optimal; !- Load Distribution Scheme + + PlantEquipmentOperationSchemes, + Purchased CHW Plant Operation, !- Name + PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type + Purchased CHW Plant ChW Supply, !- Control Scheme 1 Name + PlantOnSched; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperationSchemes, + DistrictHeating Steam Operation, !- Name + PlantEquipmentOperation:HeatingLoad, !- Control Scheme 1 Object Type + DistrictHeating Steam Heat Supply, !- Control Scheme 1 Name + PlantOnSched; !- Control Scheme 1 Schedule Name + + PlantEquipmentOperation:CoolingLoad, + Purchased CHW Plant ChW Supply, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + Purchased CHW Plant ChW Plant; !- Range 1 Equipment List Name + + PlantEquipmentOperation:HeatingLoad, + DistrictHeating Steam Heat Supply, !- Name + 0, !- Load Range 1 Lower Limit {W} + 1000000000000000, !- Load Range 1 Upper Limit {W} + DistrictHeating Steam heating plant; !- Range 1 Equipment List Name + + PlantEquipmentList, + Purchased CHW Plant ChW Plant, !- Name + DistrictCooling, !- Equipment 1 Object Type + Purchased CHW Plant Chiller; !- Equipment 1 Name + + PlantEquipmentList, + DistrictHeating Steam heating plant, !- Name + DistrictHeating:Steam, !- Equipment 1 Object Type + DistrictHeating Steam; !- Equipment 1 Name + + Connector:Splitter, + CHW Demand 1 ChW Splitter, !- Name + CHW Demand 1 ChW Inlet Branch, !- Inlet Branch Name + VAV SYS 1 ChW-Branch, !- Outlet Branch 1 Name + CHW Demand 1 ChW Bypass Branch; !- Outlet Branch 2 Name + + Connector:Splitter, + Steam Demand 1 Steam Splitter, !- Name + Steam Demand 1 Steam Inlet Branch, !- Inlet Branch Name + SPACE1-1 Steam-Branch, !- Outlet Branch 1 Name + SPACE2-1 Steam-Branch, !- Outlet Branch 2 Name + SPACE3-1 Steam-Branch, !- Outlet Branch 3 Name + SPACE4-1 Steam-Branch, !- Outlet Branch 4 Name + SPACE5-1 Steam-Branch, !- Outlet Branch 5 Name + VAV SYS 1 Steam-Branch, !- Outlet Branch 6 Name + Heating Demand Bypass Branch; !- Outlet Branch 7 Name + + Connector:Splitter, + Purchased CHW Plant ChW Supply Splitter, !- Name + Purchased CHW Plant ChW Supply Inlet Branch, !- Inlet Branch Name + Purchased CHW Plant Chiller Branch, !- Outlet Branch 1 Name + Purchased CHW Plant ChW Supply Bypass Branch; !- Outlet Branch 2 Name + + Connector:Splitter, + DistrictHeating Steam Supply Splitter, !- Name + DistrictHeating Steam Supply Inlet Branch, !- Inlet Branch Name + DistrictHeating Steam Branch; !- Outlet Branch 1 Name + + Connector:Mixer, + CHW Demand 1 ChW Mixer, !- Name + CHW Demand 1 ChW Outlet Branch, !- Outlet Branch Name + VAV SYS 1 ChW-Branch, !- Inlet Branch 1 Name + CHW Demand 1 ChW Bypass Branch; !- Inlet Branch 2 Name + + Connector:Mixer, + Steam Demand 1 Steam Mixer, !- Name + Steam Demand 1 Steam Outlet Branch, !- Outlet Branch Name + SPACE1-1 Steam-Branch, !- Inlet Branch 1 Name + SPACE2-1 Steam-Branch, !- Inlet Branch 2 Name + SPACE3-1 Steam-Branch, !- Inlet Branch 3 Name + SPACE4-1 Steam-Branch, !- Inlet Branch 4 Name + SPACE5-1 Steam-Branch, !- Inlet Branch 5 Name + VAV SYS 1 Steam-Branch, !- Inlet Branch 6 Name + Heating Demand Bypass Branch; !- Inlet Branch 7 Name + + Connector:Mixer, + Purchased CHW Plant ChW Supply Mixer, !- Name + Purchased CHW Plant ChW Supply Outlet Branch, !- Outlet Branch Name + Purchased CHW Plant Chiller Branch, !- Inlet Branch 1 Name + Purchased CHW Plant ChW Supply Bypass Branch; !- Inlet Branch 2 Name + + Connector:Mixer, + DistrictHeating Steam Supply Mixer, !- Name + DistrictHeating Steam Supply Outlet Branch, !- Outlet Branch Name + DistrictHeating Steam Branch; !- Inlet Branch 1 Name + + AirLoopHVAC, + VAV SYS 1, !- Name + VAV SYS 1 Controllers, !- Controller List Name + VAV SYS 1 Availability Managers, !- Availability Manager List Name + autosize, !- Design Supply Air Flow Rate {m3/s} + VAV SYS 1 Branches, !- Branch List Name + , !- Connector List Name + VAV SYS 1 Air Loop Inlet,!- Supply Side Inlet Node Name + VAV SYS 1 Return Air Outlet, !- Demand Side Outlet Node Name + VAV SYS 1 Zone Equip Inlet, !- Demand Side Inlet Node Names + VAV SYS 1 Air Loop Outlet; !- Supply Side Outlet Node Names + + AirLoopHVAC:ControllerList, + VAV SYS 1 Controllers, !- Name + Controller:WaterCoil, !- Controller 1 Object Type + VAV SYS 1 Cooling Coil Controller; !- Controller 1 Name + + AirLoopHVAC:ControllerList, + VAV SYS 1 OA System Controllers, !- Name + Controller:OutdoorAir, !- Controller 1 Object Type + VAV SYS 1 OA Controller; !- Controller 1 Name + + AirLoopHVAC:OutdoorAirSystem:EquipmentList, + VAV SYS 1 OA System Equipment, !- Name + OutdoorAir:Mixer, !- Component 1 Object Type + VAV SYS 1 OA Mixing Box; !- Component 1 Name + + AirLoopHVAC:OutdoorAirSystem, + VAV SYS 1 OA System, !- Name + VAV SYS 1 OA System Controllers, !- Controller List Name + VAV SYS 1 OA System Equipment; !- Outdoor Air Equipment List Name + + + OutdoorAir:NodeList, + VAV SYS 1 Outside Air Inlet; !- Node or NodeList Name 1 + + OutdoorAir:Mixer, + VAV SYS 1 OA Mixing Box, !- Name + VAV SYS 1 Mixed Air Outlet, !- Mixed Air Node Name + VAV SYS 1 Outside Air Inlet, !- Outdoor Air Stream Node Name + VAV SYS 1 Relief Air Outlet, !- Relief Air Stream Node Name + VAV SYS 1 Air Loop Inlet;!- Return Air Stream Node Name + + AvailabilityManagerAssignmentList, + VAV SYS 1 Availability Managers, !- Name + AvailabilityManager:Scheduled, !- Availability Manager 1 Object Type + VAV SYS 1 Availability 1;!- Availability Manager 1 Name + + AvailabilityManager:Scheduled, + VAV SYS 1 Availability 1,!- Name + FanAvailSched; !- Schedule Name + + SetpointManager:Scheduled, + VAV SYS 1 Supply Air Temp Manager, !- Name + Temperature, !- Control Variable + Seasonal Reset Supply Air Temp Sch, !- Schedule Name + VAV SYS 1 Supply Air Temp Nodes; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + VAV SYS 1 Heating Coil Air Temp Manager, !- Name + Temperature, !- Control Variable + Heating Supply Air Temp Sch, !- Schedule Name + VAV SYS 1 Heating Supply Air Temp Nodes; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + Purchased CHW Plant ChW Temp Manager, !- Name + Temperature, !- Control Variable + CW-Loop-Temp-Schedule, !- Schedule Name + Purchased CHW Plant ChW Supply Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:Scheduled, + DistrictHeating Steam Temp Manager, !- Name + Temperature, !- Control Variable + Steam-Loop-Temp-Schedule,!- Schedule Name + DistrictHeating Steam Supply Outlet Node; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV SYS 1 Cooling Coil Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV SYS 1 Air Loop Outlet, !- Reference Setpoint Node Name + VAV SYS 1 Heating Coil Outlet, !- Fan Inlet Node Name + VAV SYS 1 Air Loop Outlet, !- Fan Outlet Node Name + VAV SYS 1 Cooling Coil Outlet; !- Setpoint Node or NodeList Name + + SetpointManager:MixedAir, + VAV SYS 1 Mixed Air Temp Manager, !- Name + Temperature, !- Control Variable + VAV SYS 1 Air Loop Outlet, !- Reference Setpoint Node Name + VAV SYS 1 Heating Coil Outlet, !- Fan Inlet Node Name + VAV SYS 1 Air Loop Outlet, !- Fan Outlet Node Name + VAV SYS 1 Mixed Air Outlet; !- Setpoint Node or NodeList Name + + Controller:WaterCoil, + VAV SYS 1 Cooling Coil Controller, !- Name + Temperature, !- Control Variable + Reverse, !- Action + FLOW, !- Actuator Variable + VAV SYS 1 Cooling Coil Outlet, !- Sensor Node Name + VAV SYS 1 Cooling Coil ChW Inlet, !- Actuator Node Name + 0.002, !- Controller Convergence Tolerance {deltaC} + autosize, !- Maximum Actuated Flow {m3/s} + 0.0; !- Minimum Actuated Flow {m3/s} + + Controller:OutdoorAir, + VAV SYS 1 OA Controller, !- Name + VAV SYS 1 Relief Air Outlet, !- Relief Air Outlet Node Name + VAV SYS 1 Air Loop Inlet,!- Return Air Node Name + VAV SYS 1 Mixed Air Outlet, !- Mixed Air Node Name + VAV SYS 1 Outside Air Inlet, !- Actuator Node Name + autosize, !- Minimum Outdoor Air Flow Rate {m3/s} + autosize, !- Maximum Outdoor Air Flow Rate {m3/s} + FixedDryBulb, !- Economizer Control Type + ModulateFlow, !- Economizer Control Action Type + 16., !- Economizer Maximum Limit Dry-Bulb Temperature {C} + , !- Economizer Maximum Limit Enthalpy {J/kg} + , !- Economizer Maximum Limit Dewpoint Temperature {C} + , !- Electronic Enthalpy Limit Curve Name + 1., !- Economizer Minimum Limit Dry-Bulb Temperature {C} + NoLockout, !- Lockout Type + FixedMinimum, !- Minimum Limit Type + Min OA Sched; !- Minimum Outdoor Air Schedule Name + + ZoneHVAC:EquipmentConnections, + SPACE1-1, !- Zone Name + SPACE1-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE1-1 Inlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE1-1 Zone Air Node, !- Zone Air Node Name + SPACE1-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SPACE2-1, !- Zone Name + SPACE2-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE2-1 Inlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE2-1 Zone Air Node, !- Zone Air Node Name + SPACE2-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SPACE3-1, !- Zone Name + SPACE3-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE3-1 Inlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE3-1 Zone Air Node, !- Zone Air Node Name + SPACE3-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SPACE4-1, !- Zone Name + SPACE4-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE4-1 Inlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE4-1 Zone Air Node, !- Zone Air Node Name + SPACE4-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentConnections, + SPACE5-1, !- Zone Name + SPACE5-1 Equipment, !- Zone Conditioning Equipment List Name + SPACE5-1 Inlets, !- Zone Air Inlet Node or NodeList Name + , !- Zone Air Exhaust Node or NodeList Name + SPACE5-1 Zone Air Node, !- Zone Air Node Name + SPACE5-1 Return Outlet; !- Zone Return Air Node or NodeList Name + + ZoneHVAC:EquipmentList, + SPACE1-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE1-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SPACE2-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE2-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SPACE3-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE3-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SPACE4-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE4-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:EquipmentList, + SPACE5-1 Equipment, !- Name + SequentialLoad, !- Load Distribution Scheme + ZoneHVAC:AirDistributionUnit, !- Zone Equipment 1 Object Type + SPACE5-1 ATU, !- Zone Equipment 1 Name + 1, !- Zone Equipment 1 Cooling Sequence + 1, !- Zone Equipment 1 Heating or No-Load Sequence + , !- Zone Equipment 1 Sequential Cooling Fraction Schedule Name + ; !- Zone Equipment 1 Sequential Heating Fraction Schedule Name + + ZoneHVAC:AirDistributionUnit, + SPACE1-1 ATU, !- Name + SPACE1-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE1-1 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + SPACE2-1 ATU, !- Name + SPACE2-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE2-1 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + SPACE3-1 ATU, !- Name + SPACE3-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE3-1 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + SPACE4-1 ATU, !- Name + SPACE4-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE4-1 VAV Reheat; !- Air Terminal Name + + ZoneHVAC:AirDistributionUnit, + SPACE5-1 ATU, !- Name + SPACE5-1 Supply Inlet, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + SPACE5-1 VAV Reheat; !- Air Terminal Name + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE1-1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + SPACE1-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE1-1 Damper Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Steam, !- Reheat Coil Object Type + SPACE1-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE1-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + Normal, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE2-1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + SPACE2-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE2-1 Damper Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Steam, !- Reheat Coil Object Type + SPACE2-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE2-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + Normal, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE3-1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + SPACE3-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE3-1 Damper Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Steam, !- Reheat Coil Object Type + SPACE3-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE3-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + Normal, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE4-1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + SPACE4-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE4-1 Damper Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Steam, !- Reheat Coil Object Type + SPACE4-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE4-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + Normal, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + + AirTerminal:SingleDuct:VAV:Reheat, + SPACE5-1 VAV Reheat, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + SPACE5-1 Damper Outlet, !- Damper Air Outlet Node Name + SPACE5-1 Damper Inlet, !- Air Inlet Node Name + autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Steam, !- Reheat Coil Object Type + SPACE5-1 Reheat Coil, !- Reheat Coil Name + autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0.0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + SPACE5-1 Supply Inlet, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + NORMAL, !- Damper Heating Action + AUTOCALCULATE, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + AUTOCALCULATE; !- Maximum Flow Fraction During Reheat + +! Zone Thermostats (need one in each zone for autosizing calculations) + + ZoneControl:Thermostat, + SPACE1-1 Thermostat, !- Name + SPACE1-1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleHeating, !- Control 1 Object Type + SPACE1-1 SingleHeatSPSched, !- Control 1 Name + ThermostatSetpoint:SingleCooling, !- Control 2 Object Type + SPACE1-1 SingleCoolSPSched, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + SPACE1-1 DualSPSched; !- Control 3 Name + +! Zone Thermostats (need one in each zone for autosizing calculations) + + ZoneControl:Thermostat, + SPACE2-1 Thermostat, !- Name + SPACE2-1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleHeating, !- Control 1 Object Type + SPACE2-1 SingleHeatSPSched, !- Control 1 Name + ThermostatSetpoint:SingleCooling, !- Control 2 Object Type + SPACE2-1 SingleCoolSPSched, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + SPACE2-1 DualSPSched; !- Control 3 Name + +! Zone Thermostats (need one in each zone for autosizing calculations) + + ZoneControl:Thermostat, + SPACE3-1 Thermostat, !- Name + SPACE3-1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleHeating, !- Control 1 Object Type + SPACE3-1 SingleHeatSPSched, !- Control 1 Name + ThermostatSetpoint:SingleCooling, !- Control 2 Object Type + SPACE3-1 SingleCoolSPSched, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + SPACE3-1 DualSPSched; !- Control 3 Name + +! Zone Thermostats (need one in each zone for autosizing calculations) + + ZoneControl:Thermostat, + SPACE4-1 Thermostat, !- Name + SPACE4-1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleHeating, !- Control 1 Object Type + SPACE4-1 SingleHeatSPSched, !- Control 1 Name + ThermostatSetpoint:SingleCooling, !- Control 2 Object Type + SPACE4-1 SingleCoolSPSched, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + SPACE4-1 DualSPSched; !- Control 3 Name + +! Zone Thermostats (need one in each zone for autosizing calculations) + + ZoneControl:Thermostat, + SPACE5-1 Thermostat, !- Name + SPACE5-1, !- Zone or ZoneList Name + Zone Control Type Sched, !- Control Type Schedule Name + ThermostatSetpoint:SingleHeating, !- Control 1 Object Type + SPACE5-1 SingleHeatSPSched, !- Control 1 Name + ThermostatSetpoint:SingleCooling, !- Control 2 Object Type + SPACE5-1 SingleCoolSPSched, !- Control 2 Name + ThermostatSetpoint:DualSetpoint, !- Control 3 Object Type + SPACE5-1 DualSPSched; !- Control 3 Name + + ThermostatSetpoint:SingleHeating, + SPACE1-1 SingleHeatSPSched, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleHeating, + SPACE2-1 SingleHeatSPSched, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleHeating, + SPACE3-1 SingleHeatSPSched, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleHeating, + SPACE4-1 SingleHeatSPSched, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleHeating, + SPACE5-1 SingleHeatSPSched, !- Name + Htg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + SPACE1-1 SingleCoolSPSched, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + SPACE2-1 SingleCoolSPSched, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + SPACE3-1 SingleCoolSPSched, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + SPACE4-1 SingleCoolSPSched, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:SingleCooling, + SPACE5-1 SingleCoolSPSched, !- Name + Clg-SetP-Sch; !- Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SPACE1-1 DualSPSched, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SPACE2-1 DualSPSched, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SPACE3-1 DualSPSched, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SPACE4-1 DualSPSched, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + ThermostatSetpoint:DualSetpoint, + SPACE5-1 DualSPSched, !- Name + Htg-SetP-Sch, !- Heating Setpoint Temperature Schedule Name + Clg-SetP-Sch; !- Cooling Setpoint Temperature Schedule Name + + AirLoopHVAC:SupplyPath, + VAV SYS 1 Supply Path, !- Name + VAV SYS 1 Zone Equip Inlet, !- Supply Air Path Inlet Node Name + AirLoopHVAC:ZoneSplitter,!- Component 1 Object Type + VAV SYS 1 Zone Splitter; !- Component 1 Name + + AirLoopHVAC:ReturnPath, + VAV SYS 1 Return Path, !- Name + VAV SYS 1 Return Air Outlet, !- Return Air Path Outlet Node Name + AirLoopHVAC:ReturnPlenum,!- Component 1 Object Type + Return-Plenum-1; !- Component 1 Name + + AirLoopHVAC:ReturnPlenum, + Return-Plenum-1, !- Name + PLENUM-1, !- Zone Name + PLENUM-1 Zone Air Node, !- Zone Node Name + VAV SYS 1 Return Air Outlet, !- Outlet Node Name + , !- Induced Air Outlet Node or NodeList Name + SPACE1-1 Return Outlet, !- Inlet 1 Node Name + SPACE2-1 Return Outlet, !- Inlet 2 Node Name + SPACE3-1 Return Outlet, !- Inlet 3 Node Name + SPACE4-1 Return Outlet, !- Inlet 4 Node Name + SPACE5-1 Return Outlet; !- Inlet 5 Node Name + + AirLoopHVAC:ZoneSplitter, + VAV SYS 1 Zone Splitter, !- Name + VAV SYS 1 Zone Equip Inlet, !- Inlet Node Name + SPACE1-1 Damper Inlet, !- Outlet 1 Node Name + SPACE2-1 Damper Inlet, !- Outlet 2 Node Name + SPACE3-1 Damper Inlet, !- Outlet 3 Node Name + SPACE4-1 Damper Inlet, !- Outlet 4 Node Name + SPACE5-1 Damper Inlet; !- Outlet 5 Node Name + + DistrictHeating:Steam, + DistrictHeating Steam, !- Name + DistrictHeating Steam Inlet Node, !- Steam Inlet Node Name + DistrictHeating Steam Outlet Node, !- Steam Outlet Node Name + 100000000; !- Nominal Capacity {W} + + SetpointManager:Scheduled, + DistrictHeating Steam Setpoint Manager, !- Name + Temperature, !- Control Variable + Steam-Loop-Temp-Schedule,!- Schedule Name + DistrictHeating Steam Outlet Node; !- Setpoint Node or NodeList Name + + DistrictCooling, + Purchased CHW Plant Chiller, !- Name + Purchased CHW Plant Chiller Inlet Node, !- Chilled Water Inlet Node Name + Purchased CHW Plant Chiller Outlet Node, !- Chilled Water Outlet Node Name + 1000000000000000; !- Nominal Capacity {W} + + Pump:VariableSpeed, + Purchased CHW Plant ChW Circ Pump, !- Name + Purchased CHW Plant ChW Supply Inlet Node, !- Inlet Node Name + Purchased CHW Plant ChW Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Maximum Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + 0, !- Design Minimum Flow Rate {m3/s} + INTERMITTENT; !- Pump Control Type + + Pump:VariableSpeed:Condensate, + DistrictHeating Steam Circ Pump, !- Name + DistrictHeating Steam Supply Inlet Node, !- Inlet Node Name + DistrictHeating Steam Pump Outlet Node, !- Outlet Node Name + autosize, !- Design Steam Volume Flow Rate {m3/s} + 179352, !- Design Pump Head {Pa} + autosize, !- Design Power Consumption {W} + 0.9, !- Motor Efficiency + 0.0, !- Fraction of Motor Inefficiencies to Fluid Stream + 0, !- Coefficient 1 of the Part Load Performance Curve + 1, !- Coefficient 2 of the Part Load Performance Curve + 0, !- Coefficient 3 of the Part Load Performance Curve + 0, !- Coefficient 4 of the Part Load Performance Curve + ; !- Pump Flow Rate Schedule Name + + Coil:Heating:Steam, + SPACE1-1 Reheat Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + SPACE1-1 Reheat Coil Steam Inlet, !- Water Inlet Node Name + SPACE1-1 Reheat Coil Steam Outlet, !- Water Outlet Node Name + SPACE1-1 Damper Outlet, !- Air Inlet Node Name + SPACE1-1 Supply Inlet, !- Air Outlet Node Name + ZoneLoadControl; !- Coil Control Type + + Coil:Heating:Steam, + SPACE2-1 Reheat Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + SPACE2-1 Reheat Coil Steam Inlet, !- Water Inlet Node Name + SPACE2-1 Reheat Coil Steam Outlet, !- Water Outlet Node Name + SPACE2-1 Damper Outlet, !- Air Inlet Node Name + SPACE2-1 Supply Inlet, !- Air Outlet Node Name + ZoneLoadControl; !- Coil Control Type + + Coil:Heating:Steam, + SPACE3-1 Reheat Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + SPACE3-1 Reheat Coil Steam Inlet, !- Water Inlet Node Name + SPACE3-1 Reheat Coil Steam Outlet, !- Water Outlet Node Name + SPACE3-1 Damper Outlet, !- Air Inlet Node Name + SPACE3-1 Supply Inlet, !- Air Outlet Node Name + ZoneLoadControl; !- Coil Control Type + + Coil:Heating:Steam, + SPACE4-1 Reheat Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + SPACE4-1 Reheat Coil Steam Inlet, !- Water Inlet Node Name + SPACE4-1 Reheat Coil Steam Outlet, !- Water Outlet Node Name + SPACE4-1 Damper Outlet, !- Air Inlet Node Name + SPACE4-1 Supply Inlet, !- Air Outlet Node Name + ZoneLoadControl; !- Coil Control Type + + Coil:Heating:Steam, + SPACE5-1 Reheat Coil, !- Name + ReheatCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + SPACE5-1 Reheat Coil Steam Inlet, !- Water Inlet Node Name + SPACE5-1 Reheat Coil Steam Outlet, !- Water Outlet Node Name + SPACE5-1 Damper Outlet, !- Air Inlet Node Name + SPACE5-1 Supply Inlet, !- Air Outlet Node Name + ZoneLoadControl; !- Coil Control Type + + Coil:Heating:Steam, + VAV SYS 1 Heating Coil, !- Name + HEATINGCOILAVAILSCHED, !- Availability Schedule Name + autosize, !- Maximum Steam Flow Rate {m3/s} + 5.0, !- Degree of SubCooling {C} + 15.0, !- Degree of Loop SubCooling {C} + VAV SYS 1 Heating Coil Steam Inlet, !- Water Inlet Node Name + VAV SYS 1 Heating Coil Steam Outlet, !- Water Outlet Node Name + VAV SYS 1 Cooling Coil Outlet, !- Air Inlet Node Name + VAV SYS 1 Heating Coil Outlet, !- Air Outlet Node Name + TemperatureSetPointControl, !- Coil Control Type + VAV SYS 1 Heating Coil Outlet; !- Temperature Setpoint Node Name + + Coil:Cooling:Water:DetailedGeometry, + VAV SYS 1 Cooling Coil, !- Name + CoolingCoilAvailSched, !- Availability Schedule Name + autosize, !- Maximum Water Flow Rate {m3/s} + autosize, !- Tube Outside Surface Area {m2} + autosize, !- Total Tube Inside Area {m2} + autosize, !- Fin Surface Area {m2} + autosize, !- Minimum Airflow Area {m2} + autosize, !- Coil Depth {m} + autosize, !- Fin Diameter {m} + 0.0015, !- Fin Thickness {m} + 0.01445, !- Tube Inside Diameter {m} + 0.0159, !- Tube Outside Diameter {m} + 386.0, !- Tube Thermal Conductivity {W/m-K} + 204.0, !- Fin Thermal Conductivity {W/m-K} + 0.0018, !- Fin Spacing {m} + 0.026, !- Tube Depth Spacing {m} + 4, !- Number of Tube Rows + autosize, !- Number of Tubes per Row + VAV SYS 1 Cooling Coil ChW Inlet, !- Water Inlet Node Name + VAV SYS 1 Cooling Coil ChW Outlet, !- Water Outlet Node Name + VAV SYS 1 Mixed Air Outlet, !- Air Inlet Node Name + VAV SYS 1 Cooling Coil Outlet; !- Air Outlet Node Name + + Fan:VariableVolume, + VAV SYS 1 Supply Fan, !- Name + FanAvailSched, !- Availability Schedule Name + 0.7, !- Fan Total Efficiency + 600.0, !- Pressure Rise {Pa} + autosize, !- Maximum Flow Rate {m3/s} + Fraction, !- Fan Power Minimum Flow Rate Input Method + 0.25, !- Fan Power Minimum Flow Fraction + , !- Fan Power Minimum Air Flow Rate {m3/s} + 0.9, !- Motor Efficiency + 1.0, !- Motor In Airstream Fraction + 0.35071223, !- Fan Power Coefficient 1 + 0.30850535, !- Fan Power Coefficient 2 + -0.54137364, !- Fan Power Coefficient 3 + 0.87198823, !- Fan Power Coefficient 4 + 0.000, !- Fan Power Coefficient 5 + VAV SYS 1 Heating Coil Outlet, !- Air Inlet Node Name + VAV SYS 1 Air Loop Outlet; !- Air Outlet Node Name + + Output:Variable,*,Site Outdoor Air Drybulb Temperature,Hourly; + + Output:Variable,*,Zone Air Temperature,Hourly; + + Output:Variable,*,Zone Air System Sensible Cooling Rate,Hourly; + + Output:Variable,*,Zone Air System Sensible Heating Rate,Hourly; + + Output:Variable,*,Zone Predicted Sensible Load to Heating Setpoint Heat Transfer Rate,Hourly; + + Output:Variable,*,Zone Predicted Sensible Load to Cooling Setpoint Heat Transfer Rate,Hourly; + + Output:Variable,*,Heating Coil Heating Rate,Hourly; + + Output:Variable,*,Heating Coil Steam Mass Flow Rate,Hourly; + + Output:Variable,*,Cooling Coil Total Cooling Rate,Hourly; + + Output:Variable,*,District Heating Steam Rate,Hourly; + + Output:Variable,*,District Heating Steam Mass Flow Rate,Hourly; + +! Reporting NODES Values + + Output:Variable,VAV SYS 1 Air Loop Outlet,System Node Temperature,hourly; + + Output:Variable,VAV SYS 1 Air Loop Outlet,System Node Setpoint Temperature,hourly; + + Output:Variable,VAV SYS 1 Air Loop Outlet,System Node Mass Flow Rate,hourly; + + Output:Variable,VAV SYS 1 Heating Coil Outlet,System Node Temperature,hourly; + + Output:Variable,VAV SYS 1 Heating Coil Outlet,System Node Setpoint Temperature,hourly; + + Output:Variable,VAV SYS 1 Cooling Coil Outlet,System Node Temperature,hourly; + + Output:Variable,VAV SYS 1 Cooling Coil Outlet,System Node Setpoint Temperature,hourly; + + Output:Variable,VAV SYS 1 Mixed Air Outlet,System Node Temperature,hourly; + + Output:Variable,SPACE1-1 Supply Inlet,System Node Temperature,hourly; + + Output:Variable,SPACE2-1 Supply Inlet,System Node Temperature,hourly; + + Output:Variable,SPACE3-1 Supply Inlet,System Node Temperature,hourly; + + Output:Variable,SPACE4-1 Supply Inlet,System Node Temperature,hourly; + + Output:Variable,SPACE5-1 Supply Inlet,System Node Temperature,hourly; + + Output:Variable,VAV SYS 1 Heating Coil Outlet, System Node Temperature,hourly; + + Output:Variable,SPACE1-1 Reheat Coil Steam Inlet, System Node Temperature,hourly; + + Output:Variable,SPACE1-1 Reheat Coil Steam Outlet, System Node Temperature,hourly; + + Output:Variable,SPACE2-1 Reheat Coil Steam Inlet, System Node Temperature,hourly; + + Output:Variable,SPACE2-1 Reheat Coil Steam Outlet, System Node Temperature,hourly; + + Output:Variable,SPACE3-1 Reheat Coil Steam Inlet, System Node Temperature,hourly; + + Output:Variable,SPACE3-1 Reheat Coil Steam Outlet, System Node Temperature,hourly; + + Output:Variable,SPACE4-1 Reheat Coil Steam Inlet, System Node Temperature,hourly; + + Output:Variable,SPACE4-1 Reheat Coil Steam Outlet, System Node Temperature,hourly; + + Output:Variable,SPACE5-1 Reheat Coil Steam Inlet, System Node Temperature,hourly; + + Output:Variable,SPACE5-1 Reheat Coil Steam Outlet, System Node Temperature,hourly; + + Output:Variable,DistrictHeating Steam Plant,Plant Supply Side Inlet Mass Flow Rate,hourly; + + Output:Variable,DistrictHeating Steam Plant,Plant Supply Side Inlet Temperature,hourly; + + Output:Variable,DistrictHeating Steam Plant,Plant Supply Side Outlet Temperature,hourly; + + Output:Meter,Fans:Electricity,Hourly; + + Output:Meter,Electricity:HVAC,Hourly; + + Output:Meter,Electricity:Plant,Hourly; + + Output:Meter,Electricity:Facility,Hourly; + + Output:VariableDictionary,Regular; + + Output:Surfaces:Drawing,dxf; + + OutputControl:Table:Style, + HTML; !- Column Separator + + Output:Table:SummaryReports, + AllSummary; !- Report 1 Name + + Output:SQLite, + Simple; !- Option Type + diff --git a/third_party/CLI/CLI11.hpp b/third_party/CLI/CLI11.hpp new file mode 100644 index 00000000000..e2437d5e8f0 --- /dev/null +++ b/third_party/CLI/CLI11.hpp @@ -0,0 +1,10278 @@ +// CLI11: Version 2.3.2 +// Originally designed by Henry Schreiner +// https://github.com/CLIUtils/CLI11 +// +// This is a standalone header file generated by MakeSingleHeader.py in CLI11/scripts +// from: v2.3.2-34-g985a19f +// +// CLI11 2.3.2 Copyright (c) 2017-2023 University of Cincinnati, developed by Henry +// Schreiner under NSF AWARD 1414736. All rights reserved. +// +// Redistribution and use in source and binary forms of CLI11, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// 3. Neither the name of the copyright holder nor the names of its contributors +// may be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#pragma once + +// Standard combined includes: +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define CLI11_VERSION_MAJOR 2 +#define CLI11_VERSION_MINOR 3 +#define CLI11_VERSION_PATCH 2 +#define CLI11_VERSION "2.3.2" + + + + +// The following version macro is very similar to the one in pybind11 +#if !(defined(_MSC_VER) && __cplusplus == 199711L) && !defined(__INTEL_COMPILER) +#if __cplusplus >= 201402L +#define CLI11_CPP14 +#if __cplusplus >= 201703L +#define CLI11_CPP17 +#if __cplusplus > 201703L +#define CLI11_CPP20 +#endif +#endif +#endif +#elif defined(_MSC_VER) && __cplusplus == 199711L +// MSVC sets _MSVC_LANG rather than __cplusplus (supposedly until the standard is fully implemented) +// Unless you use the /Zc:__cplusplus flag on Visual Studio 2017 15.7 Preview 3 or newer +#if _MSVC_LANG >= 201402L +#define CLI11_CPP14 +#if _MSVC_LANG > 201402L && _MSC_VER >= 1910 +#define CLI11_CPP17 +#if _MSVC_LANG > 201703L && _MSC_VER >= 1910 +#define CLI11_CPP20 +#endif +#endif +#endif +#endif + +#if defined(CLI11_CPP14) +#define CLI11_DEPRECATED(reason) [[deprecated(reason)]] +#elif defined(_MSC_VER) +#define CLI11_DEPRECATED(reason) __declspec(deprecated(reason)) +#else +#define CLI11_DEPRECATED(reason) __attribute__((deprecated(reason))) +#endif + +// GCC < 10 doesn't ignore this in unevaluated contexts +#if !defined(CLI11_CPP17) || \ + (defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER) && __GNUC__ < 10 && __GNUC__ > 4) +#define CLI11_NODISCARD +#else +#define CLI11_NODISCARD [[nodiscard]] +#endif + +/** detection of rtti */ +#ifndef CLI11_USE_STATIC_RTTI +#if(defined(_HAS_STATIC_RTTI) && _HAS_STATIC_RTTI) +#define CLI11_USE_STATIC_RTTI 1 +#elif defined(__cpp_rtti) +#if(defined(_CPPRTTI) && _CPPRTTI == 0) +#define CLI11_USE_STATIC_RTTI 1 +#else +#define CLI11_USE_STATIC_RTTI 0 +#endif +#elif(defined(__GCC_RTTI) && __GXX_RTTI) +#define CLI11_USE_STATIC_RTTI 0 +#else +#define CLI11_USE_STATIC_RTTI 1 +#endif +#endif + +/** availability */ +#if defined CLI11_CPP17 && defined __has_include && !defined CLI11_HAS_FILESYSTEM +#if __has_include() +// Filesystem cannot be used if targeting macOS < 10.15 +#if defined __MAC_OS_X_VERSION_MIN_REQUIRED && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 +#define CLI11_HAS_FILESYSTEM 0 +#elif defined(__wasi__) +// As of wasi-sdk-14, filesystem is not implemented +#define CLI11_HAS_FILESYSTEM 0 +#else +#include +#if defined __cpp_lib_filesystem && __cpp_lib_filesystem >= 201703 +#if defined _GLIBCXX_RELEASE && _GLIBCXX_RELEASE >= 9 +#define CLI11_HAS_FILESYSTEM 1 +#elif defined(__GLIBCXX__) +// if we are using gcc and Version <9 default to no filesystem +#define CLI11_HAS_FILESYSTEM 0 +#else +#define CLI11_HAS_FILESYSTEM 1 +#endif +#else +#define CLI11_HAS_FILESYSTEM 0 +#endif +#endif +#endif +#endif + +/** availability */ +#if defined(__GNUC__) && !defined(__llvm__) && !defined(__INTEL_COMPILER) && __GNUC__ < 5 +#define CLI11_HAS_CODECVT 0 +#else +#define CLI11_HAS_CODECVT 1 +#include +#endif + +/** disable deprecations */ +#if defined(__GNUC__) // GCC or clang +#define CLI11_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") +#define CLI11_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") + +#define CLI11_DIAGNOSTIC_IGNORE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") + +#elif defined(_MSC_VER) +#define CLI11_DIAGNOSTIC_PUSH __pragma(warning(push)) +#define CLI11_DIAGNOSTIC_POP __pragma(warning(pop)) + +#define CLI11_DIAGNOSTIC_IGNORE_DEPRECATED __pragma(warning(disable : 4996)) + +#else +#define CLI11_DIAGNOSTIC_PUSH +#define CLI11_DIAGNOSTIC_POP + +#define CLI11_DIAGNOSTIC_IGNORE_DEPRECATED + +#endif + +/** Inline macro **/ +#ifdef CLI11_COMPILE +#define CLI11_INLINE +#else +#define CLI11_INLINE inline +#endif + + + +#if defined CLI11_HAS_FILESYSTEM && CLI11_HAS_FILESYSTEM > 0 +#include // NOLINT(build/include) +#else +#include +#include +#endif + + + + +#ifdef CLI11_CPP17 +#include +#endif // CLI11_CPP17 + +#if defined CLI11_HAS_FILESYSTEM && CLI11_HAS_FILESYSTEM > 0 +#include +#include // NOLINT(build/include) +#endif // CLI11_HAS_FILESYSTEM + + + +#if defined(_WIN32) +#if !(defined(_AMD64_) || defined(_X86_) || defined(_ARM_)) +#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || \ + defined(_M_AMD64) +#define _AMD64_ +#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__i386__) || defined(_M_IX86) +#define _X86_ +#elif defined(__arm__) || defined(_M_ARM) || defined(_M_ARMT) +#define _ARM_ +#endif +#endif + +// first +#ifndef NOMINMAX +// if NOMINMAX is already defined we don't want to mess with that either way +#define NOMINMAX +#include +#undef NOMINMAX +#else +#include +#endif + +// second +#include +// third +#include +#include + +#elif defined(__APPLE__) +#include +#endif + + +namespace CLI { + + +/// Convert a wide string to a narrow string. +CLI11_INLINE std::string narrow(const std::wstring &str); +CLI11_INLINE std::string narrow(const wchar_t *str); +CLI11_INLINE std::string narrow(const wchar_t *str, std::size_t size); + +/// Convert a narrow string to a wide string. +CLI11_INLINE std::wstring widen(const std::string &str); +CLI11_INLINE std::wstring widen(const char *str); +CLI11_INLINE std::wstring widen(const char *str, std::size_t size); + +#ifdef CLI11_CPP17 +CLI11_INLINE std::string narrow(std::wstring_view str); +CLI11_INLINE std::wstring widen(std::string_view str); +#endif // CLI11_CPP17 + +#if defined CLI11_HAS_FILESYSTEM && CLI11_HAS_FILESYSTEM > 0 +/// Convert a char-string to a native path correctly. +CLI11_INLINE std::filesystem::path to_path(std::string_view str); +#endif // CLI11_HAS_FILESYSTEM + + + + +namespace detail { + +#if !CLI11_HAS_CODECVT +/// Attempt to set one of the acceptable unicode locales for conversion +CLI11_INLINE void set_unicode_locale() { + static const std::array unicode_locales{{"C.UTF-8", "en_US.UTF-8", ".UTF-8"}}; + + for(const auto &locale_name : unicode_locales) { + if(std::setlocale(LC_ALL, locale_name) != nullptr) { + return; + } + } + throw std::runtime_error("CLI::narrow: could not set locale to C.UTF-8"); +} + +template struct scope_guard_t { + F closure; + + explicit scope_guard_t(F closure_) : closure(closure_) {} + ~scope_guard_t() { closure(); } +}; + +template CLI11_NODISCARD CLI11_INLINE scope_guard_t scope_guard(F &&closure) { + return scope_guard_t{std::forward(closure)}; +} + +#endif // !CLI11_HAS_CODECVT + +CLI11_DIAGNOSTIC_PUSH +CLI11_DIAGNOSTIC_IGNORE_DEPRECATED + +CLI11_INLINE std::string narrow_impl(const wchar_t *str, std::size_t str_size) { +#if CLI11_HAS_CODECVT +#ifdef _WIN32 + return std::wstring_convert>().to_bytes(str, str + str_size); + +#else + return std::wstring_convert>().to_bytes(str, str + str_size); + +#endif // _WIN32 +#else // CLI11_HAS_CODECVT + (void)str_size; + std::mbstate_t state = std::mbstate_t(); + const wchar_t *it = str; + + std::string old_locale = std::setlocale(LC_ALL, nullptr); + auto sg = scope_guard([&] { std::setlocale(LC_ALL, old_locale.c_str()); }); + set_unicode_locale(); + + std::size_t new_size = std::wcsrtombs(nullptr, &it, 0, &state); + if(new_size == static_cast(-1)) { + throw std::runtime_error("CLI::narrow: conversion error in std::wcsrtombs at offset " + + std::to_string(it - str)); + } + std::string result(new_size, '\0'); + std::wcsrtombs(const_cast(result.data()), &str, new_size, &state); + + return result; + +#endif // CLI11_HAS_CODECVT +} + +CLI11_INLINE std::wstring widen_impl(const char *str, std::size_t str_size) { +#if CLI11_HAS_CODECVT +#ifdef _WIN32 + return std::wstring_convert>().from_bytes(str, str + str_size); + +#else + return std::wstring_convert>().from_bytes(str, str + str_size); + +#endif // _WIN32 +#else // CLI11_HAS_CODECVT + (void)str_size; + std::mbstate_t state = std::mbstate_t(); + const char *it = str; + + std::string old_locale = std::setlocale(LC_ALL, nullptr); + auto sg = scope_guard([&] { std::setlocale(LC_ALL, old_locale.c_str()); }); + set_unicode_locale(); + + std::size_t new_size = std::mbsrtowcs(nullptr, &it, 0, &state); + if(new_size == static_cast(-1)) { + throw std::runtime_error("CLI::widen: conversion error in std::mbsrtowcs at offset " + + std::to_string(it - str)); + } + std::wstring result(new_size, L'\0'); + std::mbsrtowcs(const_cast(result.data()), &str, new_size, &state); + + return result; + +#endif // CLI11_HAS_CODECVT +} + +CLI11_DIAGNOSTIC_POP + +} // namespace detail + +CLI11_INLINE std::string narrow(const wchar_t *str, std::size_t str_size) { return detail::narrow_impl(str, str_size); } +CLI11_INLINE std::string narrow(const std::wstring &str) { return detail::narrow_impl(str.data(), str.size()); } +// Flawfinder: ignore +CLI11_INLINE std::string narrow(const wchar_t *str) { return detail::narrow_impl(str, std::wcslen(str)); } + +CLI11_INLINE std::wstring widen(const char *str, std::size_t str_size) { return detail::widen_impl(str, str_size); } +CLI11_INLINE std::wstring widen(const std::string &str) { return detail::widen_impl(str.data(), str.size()); } +// Flawfinder: ignore +CLI11_INLINE std::wstring widen(const char *str) { return detail::widen_impl(str, std::strlen(str)); } + +#ifdef CLI11_CPP17 +CLI11_INLINE std::string narrow(std::wstring_view str) { return detail::narrow_impl(str.data(), str.size()); } +CLI11_INLINE std::wstring widen(std::string_view str) { return detail::widen_impl(str.data(), str.size()); } +#endif // CLI11_CPP17 + +#if defined CLI11_HAS_FILESYSTEM && CLI11_HAS_FILESYSTEM > 0 +CLI11_INLINE std::filesystem::path to_path(std::string_view str) { + return std::filesystem::path{ +#ifdef _WIN32 + widen(str) +#else + str +#endif // _WIN32 + }; +} +#endif // CLI11_HAS_FILESYSTEM + + + + +/// argc as passed in to this executable. +CLI11_INLINE int argc(); + +/// argv as passed in to this executable, converted to utf-8 on Windows. +CLI11_INLINE const char *const *argv(); + + + + +namespace detail { + +#ifdef __APPLE__ +// Copy argc and argv as early as possible to avoid modification +static const std::vector static_args = [] { + static const std::vector static_args_as_strings = [] { + std::vector args_as_strings; + int argc = *_NSGetArgc(); + char **argv = *_NSGetArgv(); + + args_as_strings.reserve(static_cast(argc)); + for(size_t i = 0; i < static_cast(argc); i++) { + args_as_strings.push_back(argv[i]); + } + + return args_as_strings; + }(); + + std::vector static_args_result; + static_args_result.reserve(static_args_as_strings.size()); + + for(const auto &arg : static_args_as_strings) { + static_args_result.push_back(arg.data()); + } + + return static_args_result; +}(); +#endif + +/// Command-line arguments, as passed in to this executable, converted to utf-8 on Windows. +CLI11_INLINE const std::vector &args() { + // This function uses initialization via lambdas extensively to take advantage of the thread safety of static + // variable initialization [stmt.dcl.3] + +#ifdef _WIN32 + static const std::vector static_args = [] { + static const std::vector static_args_as_strings = [] { + // On Windows, take arguments from GetCommandLineW and convert them to utf-8. + std::vector args_as_strings; + int argc = 0; + + auto deleter = [](wchar_t **ptr) { LocalFree(ptr); }; + // NOLINTBEGIN(*-avoid-c-arrays) + auto wargv = + std::unique_ptr(CommandLineToArgvW(GetCommandLineW(), &argc), deleter); + // NOLINTEND(*-avoid-c-arrays) + + if(wargv == nullptr) { + throw std::runtime_error("CommandLineToArgvW failed with code " + std::to_string(GetLastError())); + } + + args_as_strings.reserve(static_cast(argc)); + for(size_t i = 0; i < static_cast(argc); ++i) { + args_as_strings.push_back(narrow(wargv[i])); + } + + return args_as_strings; + }(); + + std::vector static_args_result; + static_args_result.reserve(static_args_as_strings.size()); + + for(const auto &arg : static_args_as_strings) { + static_args_result.push_back(arg.data()); + } + + return static_args_result; + }(); + + return static_args; + +#elif defined(__APPLE__) + + return static_args; + +#else + static const std::vector static_args = [] { + static const std::vector static_cmdline = [] { + // On posix, retrieve arguments from /proc/self/cmdline, separated by null terminators. + std::vector cmdline; + + auto deleter = [](FILE *f) { std::fclose(f); }; + std::unique_ptr fp_unique(std::fopen("/proc/self/cmdline", "r"), deleter); + FILE *fp = fp_unique.get(); + if(!fp) { + throw std::runtime_error("could not open /proc/self/cmdline for reading"); // LCOV_EXCL_LINE + } + + size_t size = 0; + while(std::feof(fp) == 0) { + cmdline.resize(size + 128); + size += std::fread(cmdline.data() + size, 1, 128, fp); + + if(std::ferror(fp) != 0) { + throw std::runtime_error("error during reading /proc/self/cmdline"); // LCOV_EXCL_LINE + } + } + cmdline.resize(size); + + return cmdline; + }(); + + std::size_t argc = static_cast(std::count(static_cmdline.begin(), static_cmdline.end(), '\0')); + std::vector static_args_result; + static_args_result.reserve(argc); + + for(auto it = static_cmdline.begin(); it != static_cmdline.end(); + it = std::find(it, static_cmdline.end(), '\0') + 1) { + static_args_result.push_back(static_cmdline.data() + (it - static_cmdline.begin())); + } + + return static_args_result; + }(); + + return static_args; +#endif +} + +} // namespace detail + +CLI11_INLINE const char *const *argv() { return detail::args().data(); } +CLI11_INLINE int argc() { return static_cast(detail::args().size()); } + + + + +/// Include the items in this namespace to get free conversion of enums to/from streams. +/// (This is available inside CLI as well, so CLI11 will use this without a using statement). +namespace enums { + +/// output streaming for enumerations +template ::value>::type> +std::ostream &operator<<(std::ostream &in, const T &item) { + // make sure this is out of the detail namespace otherwise it won't be found when needed + return in << static_cast::type>(item); +} + +} // namespace enums + +/// Export to CLI namespace +using enums::operator<<; + +namespace detail { +/// a constant defining an expected max vector size defined to be a big number that could be multiplied by 4 and not +/// produce overflow for some expected uses +constexpr int expected_max_vector_size{1 << 29}; +// Based on http://stackoverflow.com/questions/236129/split-a-string-in-c +/// Split a string by a delim +CLI11_INLINE std::vector split(const std::string &s, char delim); + +/// Simple function to join a string +template std::string join(const T &v, std::string delim = ",") { + std::ostringstream s; + auto beg = std::begin(v); + auto end = std::end(v); + if(beg != end) + s << *beg++; + while(beg != end) { + s << delim << *beg++; + } + return s.str(); +} + +/// Simple function to join a string from processed elements +template ::value>::type> +std::string join(const T &v, Callable func, std::string delim = ",") { + std::ostringstream s; + auto beg = std::begin(v); + auto end = std::end(v); + auto loc = s.tellp(); + while(beg != end) { + auto nloc = s.tellp(); + if(nloc > loc) { + s << delim; + loc = nloc; + } + s << func(*beg++); + } + return s.str(); +} + +/// Join a string in reverse order +template std::string rjoin(const T &v, std::string delim = ",") { + std::ostringstream s; + for(std::size_t start = 0; start < v.size(); start++) { + if(start > 0) + s << delim; + s << v[v.size() - start - 1]; + } + return s.str(); +} + +// Based roughly on http://stackoverflow.com/questions/25829143/c-trim-whitespace-from-a-string + +/// Trim whitespace from left of string +CLI11_INLINE std::string <rim(std::string &str); + +/// Trim anything from left of string +CLI11_INLINE std::string <rim(std::string &str, const std::string &filter); + +/// Trim whitespace from right of string +CLI11_INLINE std::string &rtrim(std::string &str); + +/// Trim anything from right of string +CLI11_INLINE std::string &rtrim(std::string &str, const std::string &filter); + +/// Trim whitespace from string +inline std::string &trim(std::string &str) { return ltrim(rtrim(str)); } + +/// Trim anything from string +inline std::string &trim(std::string &str, const std::string filter) { return ltrim(rtrim(str, filter), filter); } + +/// Make a copy of the string and then trim it +inline std::string trim_copy(const std::string &str) { + std::string s = str; + return trim(s); +} + +/// remove quotes at the front and back of a string either '"' or '\'' +CLI11_INLINE std::string &remove_quotes(std::string &str); + +/// Add a leader to the beginning of all new lines (nothing is added +/// at the start of the first line). `"; "` would be for ini files +/// +/// Can't use Regex, or this would be a subs. +CLI11_INLINE std::string fix_newlines(const std::string &leader, std::string input); + +/// Make a copy of the string and then trim it, any filter string can be used (any char in string is filtered) +inline std::string trim_copy(const std::string &str, const std::string &filter) { + std::string s = str; + return trim(s, filter); +} +/// Print a two part "help" string +CLI11_INLINE std::ostream & +format_help(std::ostream &out, std::string name, const std::string &description, std::size_t wid); + +/// Print subcommand aliases +CLI11_INLINE std::ostream &format_aliases(std::ostream &out, const std::vector &aliases, std::size_t wid); + +/// Verify the first character of an option +/// - is a trigger character, ! has special meaning and new lines would just be annoying to deal with +template bool valid_first_char(T c) { return ((c != '-') && (c != '!') && (c != ' ') && c != '\n'); } + +/// Verify following characters of an option +template bool valid_later_char(T c) { + // = and : are value separators, { has special meaning for option defaults, + // and \n would just be annoying to deal with in many places allowing space here has too much potential for + // inadvertent entry errors and bugs + return ((c != '=') && (c != ':') && (c != '{') && (c != ' ') && c != '\n'); +} + +/// Verify an option/subcommand name +CLI11_INLINE bool valid_name_string(const std::string &str); + +/// Verify an app name +inline bool valid_alias_name_string(const std::string &str) { + static const std::string badChars(std::string("\n") + '\0'); + return (str.find_first_of(badChars) == std::string::npos); +} + +/// check if a string is a container segment separator (empty or "%%") +inline bool is_separator(const std::string &str) { + static const std::string sep("%%"); + return (str.empty() || str == sep); +} + +/// Verify that str consists of letters only +inline bool isalpha(const std::string &str) { + return std::all_of(str.begin(), str.end(), [](char c) { return std::isalpha(c, std::locale()); }); +} + +/// Return a lower case version of a string +inline std::string to_lower(std::string str) { + std::transform(std::begin(str), std::end(str), std::begin(str), [](const std::string::value_type &x) { + return std::tolower(x, std::locale()); + }); + return str; +} + +/// remove underscores from a string +inline std::string remove_underscore(std::string str) { + str.erase(std::remove(std::begin(str), std::end(str), '_'), std::end(str)); + return str; +} + +/// Find and replace a substring with another substring +CLI11_INLINE std::string find_and_replace(std::string str, std::string from, std::string to); + +/// check if the flag definitions has possible false flags +inline bool has_default_flag_values(const std::string &flags) { + return (flags.find_first_of("{!") != std::string::npos); +} + +CLI11_INLINE void remove_default_flag_values(std::string &flags); + +/// Check if a string is a member of a list of strings and optionally ignore case or ignore underscores +CLI11_INLINE std::ptrdiff_t find_member(std::string name, + const std::vector names, + bool ignore_case = false, + bool ignore_underscore = false); + +/// Find a trigger string and call a modify callable function that takes the current string and starting position of the +/// trigger and returns the position in the string to search for the next trigger string +template inline std::string find_and_modify(std::string str, std::string trigger, Callable modify) { + std::size_t start_pos = 0; + while((start_pos = str.find(trigger, start_pos)) != std::string::npos) { + start_pos = modify(str, start_pos); + } + return str; +} + +/// Split a string '"one two" "three"' into 'one two', 'three' +/// Quote characters can be ` ' or " +CLI11_INLINE std::vector split_up(std::string str, char delimiter = '\0'); + +/// This function detects an equal or colon followed by an escaped quote after an argument +/// then modifies the string to replace the equality with a space. This is needed +/// to allow the split up function to work properly and is intended to be used with the find_and_modify function +/// the return value is the offset+1 which is required by the find_and_modify function. +CLI11_INLINE std::size_t escape_detect(std::string &str, std::size_t offset); + +/// Add quotes if the string contains spaces +CLI11_INLINE std::string &add_quotes_if_needed(std::string &str); + +/// get the value of an environmental variable or empty string if empty +CLI11_INLINE std::string get_environment_value(const std::string &env_name); +} // namespace detail + + + + +namespace detail { +CLI11_INLINE std::vector split(const std::string &s, char delim) { + std::vector elems; + // Check to see if empty string, give consistent result + if(s.empty()) { + elems.emplace_back(); + } else { + std::stringstream ss; + ss.str(s); + std::string item; + while(std::getline(ss, item, delim)) { + elems.push_back(item); + } + } + return elems; +} + +CLI11_INLINE std::string <rim(std::string &str) { + auto it = std::find_if(str.begin(), str.end(), [](char ch) { return !std::isspace(ch, std::locale()); }); + str.erase(str.begin(), it); + return str; +} + +CLI11_INLINE std::string <rim(std::string &str, const std::string &filter) { + auto it = std::find_if(str.begin(), str.end(), [&filter](char ch) { return filter.find(ch) == std::string::npos; }); + str.erase(str.begin(), it); + return str; +} + +CLI11_INLINE std::string &rtrim(std::string &str) { + auto it = std::find_if(str.rbegin(), str.rend(), [](char ch) { return !std::isspace(ch, std::locale()); }); + str.erase(it.base(), str.end()); + return str; +} + +CLI11_INLINE std::string &rtrim(std::string &str, const std::string &filter) { + auto it = + std::find_if(str.rbegin(), str.rend(), [&filter](char ch) { return filter.find(ch) == std::string::npos; }); + str.erase(it.base(), str.end()); + return str; +} + +CLI11_INLINE std::string &remove_quotes(std::string &str) { + if(str.length() > 1 && (str.front() == '"' || str.front() == '\'')) { + if(str.front() == str.back()) { + str.pop_back(); + str.erase(str.begin(), str.begin() + 1); + } + } + return str; +} + +CLI11_INLINE std::string fix_newlines(const std::string &leader, std::string input) { + std::string::size_type n = 0; + while(n != std::string::npos && n < input.size()) { + n = input.find('\n', n); + if(n != std::string::npos) { + input = input.substr(0, n + 1) + leader + input.substr(n + 1); + n += leader.size(); + } + } + return input; +} + +CLI11_INLINE std::ostream & +format_help(std::ostream &out, std::string name, const std::string &description, std::size_t wid) { + name = " " + name; + out << std::setw(static_cast(wid)) << std::left << name; + if(!description.empty()) { + if(name.length() >= wid) + out << "\n" << std::setw(static_cast(wid)) << ""; + for(const char c : description) { + out.put(c); + if(c == '\n') { + out << std::setw(static_cast(wid)) << ""; + } + } + } + out << "\n"; + return out; +} + +CLI11_INLINE std::ostream &format_aliases(std::ostream &out, const std::vector &aliases, std::size_t wid) { + if(!aliases.empty()) { + out << std::setw(static_cast(wid)) << " aliases: "; + bool front = true; + for(const auto &alias : aliases) { + if(!front) { + out << ", "; + } else { + front = false; + } + out << detail::fix_newlines(" ", alias); + } + out << "\n"; + } + return out; +} + +CLI11_INLINE bool valid_name_string(const std::string &str) { + if(str.empty() || !valid_first_char(str[0])) { + return false; + } + auto e = str.end(); + for(auto c = str.begin() + 1; c != e; ++c) + if(!valid_later_char(*c)) + return false; + return true; +} + +CLI11_INLINE std::string find_and_replace(std::string str, std::string from, std::string to) { + + std::size_t start_pos = 0; + + while((start_pos = str.find(from, start_pos)) != std::string::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); + } + + return str; +} + +CLI11_INLINE void remove_default_flag_values(std::string &flags) { + auto loc = flags.find_first_of('{', 2); + while(loc != std::string::npos) { + auto finish = flags.find_first_of("},", loc + 1); + if((finish != std::string::npos) && (flags[finish] == '}')) { + flags.erase(flags.begin() + static_cast(loc), + flags.begin() + static_cast(finish) + 1); + } + loc = flags.find_first_of('{', loc + 1); + } + flags.erase(std::remove(flags.begin(), flags.end(), '!'), flags.end()); +} + +CLI11_INLINE std::ptrdiff_t +find_member(std::string name, const std::vector names, bool ignore_case, bool ignore_underscore) { + auto it = std::end(names); + if(ignore_case) { + if(ignore_underscore) { + name = detail::to_lower(detail::remove_underscore(name)); + it = std::find_if(std::begin(names), std::end(names), [&name](std::string local_name) { + return detail::to_lower(detail::remove_underscore(local_name)) == name; + }); + } else { + name = detail::to_lower(name); + it = std::find_if(std::begin(names), std::end(names), [&name](std::string local_name) { + return detail::to_lower(local_name) == name; + }); + } + + } else if(ignore_underscore) { + name = detail::remove_underscore(name); + it = std::find_if(std::begin(names), std::end(names), [&name](std::string local_name) { + return detail::remove_underscore(local_name) == name; + }); + } else { + it = std::find(std::begin(names), std::end(names), name); + } + + return (it != std::end(names)) ? (it - std::begin(names)) : (-1); +} + +CLI11_INLINE std::vector split_up(std::string str, char delimiter) { + + const std::string delims("\'\"`"); + auto find_ws = [delimiter](char ch) { + return (delimiter == '\0') ? std::isspace(ch, std::locale()) : (ch == delimiter); + }; + trim(str); + + std::vector output; + bool embeddedQuote = false; + char keyChar = ' '; + while(!str.empty()) { + if(delims.find_first_of(str[0]) != std::string::npos) { + keyChar = str[0]; + auto end = str.find_first_of(keyChar, 1); + while((end != std::string::npos) && (str[end - 1] == '\\')) { // deal with escaped quotes + end = str.find_first_of(keyChar, end + 1); + embeddedQuote = true; + } + if(end != std::string::npos) { + output.push_back(str.substr(1, end - 1)); + if(end + 2 < str.size()) { + str = str.substr(end + 2); + } else { + str.clear(); + } + + } else { + output.push_back(str.substr(1)); + str = ""; + } + } else { + auto it = std::find_if(std::begin(str), std::end(str), find_ws); + if(it != std::end(str)) { + std::string value = std::string(str.begin(), it); + output.push_back(value); + str = std::string(it + 1, str.end()); + } else { + output.push_back(str); + str = ""; + } + } + // transform any embedded quotes into the regular character + if(embeddedQuote) { + output.back() = find_and_replace(output.back(), std::string("\\") + keyChar, std::string(1, keyChar)); + embeddedQuote = false; + } + trim(str); + } + return output; +} + +CLI11_INLINE std::size_t escape_detect(std::string &str, std::size_t offset) { + auto next = str[offset + 1]; + if((next == '\"') || (next == '\'') || (next == '`')) { + auto astart = str.find_last_of("-/ \"\'`", offset - 1); + if(astart != std::string::npos) { + if(str[astart] == ((str[offset] == '=') ? '-' : '/')) + str[offset] = ' '; // interpret this as a space so the split_up works properly + } + } + return offset + 1; +} + +CLI11_INLINE std::string &add_quotes_if_needed(std::string &str) { + if((str.front() != '"' && str.front() != '\'') || str.front() != str.back()) { + char quote = str.find('"') < str.find('\'') ? '\'' : '"'; + if(str.find(' ') != std::string::npos) { + str.insert(0, 1, quote); + str.append(1, quote); + } + } + return str; +} + +std::string get_environment_value(const std::string &env_name) { + char *buffer = nullptr; + std::string ename_string; + +#ifdef _MSC_VER + // Windows version + std::size_t sz = 0; + if(_dupenv_s(&buffer, &sz, env_name.c_str()) == 0 && buffer != nullptr) { + ename_string = std::string(buffer); + free(buffer); + } +#else + // This also works on Windows, but gives a warning + buffer = std::getenv(env_name.c_str()); + if(buffer != nullptr) { + ename_string = std::string(buffer); + } +#endif + return ename_string; +} + +} // namespace detail + + + +// Use one of these on all error classes. +// These are temporary and are undef'd at the end of this file. +#define CLI11_ERROR_DEF(parent, name) \ + protected: \ + name(std::string ename, std::string msg, int exit_code) : parent(std::move(ename), std::move(msg), exit_code) {} \ + name(std::string ename, std::string msg, ExitCodes exit_code) \ + : parent(std::move(ename), std::move(msg), exit_code) {} \ + \ + public: \ + name(std::string msg, ExitCodes exit_code) : parent(#name, std::move(msg), exit_code) {} \ + name(std::string msg, int exit_code) : parent(#name, std::move(msg), exit_code) {} + +// This is added after the one above if a class is used directly and builds its own message +#define CLI11_ERROR_SIMPLE(name) \ + explicit name(std::string msg) : name(#name, msg, ExitCodes::name) {} + +/// These codes are part of every error in CLI. They can be obtained from e using e.exit_code or as a quick shortcut, +/// int values from e.get_error_code(). +enum class ExitCodes { + Success = 0, + IncorrectConstruction = 100, + BadNameString, + OptionAlreadyAdded, + FileError, + ConversionError, + ValidationError, + RequiredError, + RequiresError, + ExcludesError, + ExtrasError, + ConfigError, + InvalidError, + HorribleError, + OptionNotFound, + ArgumentMismatch, + BaseClass = 127 +}; + +// Error definitions + +/// @defgroup error_group Errors +/// @brief Errors thrown by CLI11 +/// +/// These are the errors that can be thrown. Some of them, like CLI::Success, are not really errors. +/// @{ + +/// All errors derive from this one +class Error : public std::runtime_error { + int actual_exit_code; + std::string error_name{"Error"}; + + public: + CLI11_NODISCARD int get_exit_code() const { return actual_exit_code; } + + CLI11_NODISCARD std::string get_name() const { return error_name; } + + Error(std::string name, std::string msg, int exit_code = static_cast(ExitCodes::BaseClass)) + : runtime_error(msg), actual_exit_code(exit_code), error_name(std::move(name)) {} + + Error(std::string name, std::string msg, ExitCodes exit_code) : Error(name, msg, static_cast(exit_code)) {} +}; + +// Note: Using Error::Error constructors does not work on GCC 4.7 + +/// Construction errors (not in parsing) +class ConstructionError : public Error { + CLI11_ERROR_DEF(Error, ConstructionError) +}; + +/// Thrown when an option is set to conflicting values (non-vector and multi args, for example) +class IncorrectConstruction : public ConstructionError { + CLI11_ERROR_DEF(ConstructionError, IncorrectConstruction) + CLI11_ERROR_SIMPLE(IncorrectConstruction) + static IncorrectConstruction PositionalFlag(std::string name) { + return IncorrectConstruction(name + ": Flags cannot be positional"); + } + static IncorrectConstruction Set0Opt(std::string name) { + return IncorrectConstruction(name + ": Cannot set 0 expected, use a flag instead"); + } + static IncorrectConstruction SetFlag(std::string name) { + return IncorrectConstruction(name + ": Cannot set an expected number for flags"); + } + static IncorrectConstruction ChangeNotVector(std::string name) { + return IncorrectConstruction(name + ": You can only change the expected arguments for vectors"); + } + static IncorrectConstruction AfterMultiOpt(std::string name) { + return IncorrectConstruction( + name + ": You can't change expected arguments after you've changed the multi option policy!"); + } + static IncorrectConstruction MissingOption(std::string name) { + return IncorrectConstruction("Option " + name + " is not defined"); + } + static IncorrectConstruction MultiOptionPolicy(std::string name) { + return IncorrectConstruction(name + ": multi_option_policy only works for flags and exact value options"); + } +}; + +/// Thrown on construction of a bad name +class BadNameString : public ConstructionError { + CLI11_ERROR_DEF(ConstructionError, BadNameString) + CLI11_ERROR_SIMPLE(BadNameString) + static BadNameString OneCharName(std::string name) { return BadNameString("Invalid one char name: " + name); } + static BadNameString MissingDash(std::string name) { + return BadNameString("Long names strings require 2 dashes " + name); + } + static BadNameString BadLongName(std::string name) { return BadNameString("Bad long name: " + name); } + static BadNameString DashesOnly(std::string name) { + return BadNameString("Must have a name, not just dashes: " + name); + } + static BadNameString MultiPositionalNames(std::string name) { + return BadNameString("Only one positional name allowed, remove: " + name); + } +}; + +/// Thrown when an option already exists +class OptionAlreadyAdded : public ConstructionError { + CLI11_ERROR_DEF(ConstructionError, OptionAlreadyAdded) + explicit OptionAlreadyAdded(std::string name) + : OptionAlreadyAdded(name + " is already added", ExitCodes::OptionAlreadyAdded) {} + static OptionAlreadyAdded Requires(std::string name, std::string other) { + return {name + " requires " + other, ExitCodes::OptionAlreadyAdded}; + } + static OptionAlreadyAdded Excludes(std::string name, std::string other) { + return {name + " excludes " + other, ExitCodes::OptionAlreadyAdded}; + } +}; + +// Parsing errors + +/// Anything that can error in Parse +class ParseError : public Error { + CLI11_ERROR_DEF(Error, ParseError) +}; + +// Not really "errors" + +/// This is a successful completion on parsing, supposed to exit +class Success : public ParseError { + CLI11_ERROR_DEF(ParseError, Success) + Success() : Success("Successfully completed, should be caught and quit", ExitCodes::Success) {} +}; + +/// -h or --help on command line +class CallForHelp : public Success { + CLI11_ERROR_DEF(Success, CallForHelp) + CallForHelp() : CallForHelp("This should be caught in your main function, see examples", ExitCodes::Success) {} +}; + +/// Usually something like --help-all on command line +class CallForAllHelp : public Success { + CLI11_ERROR_DEF(Success, CallForAllHelp) + CallForAllHelp() + : CallForAllHelp("This should be caught in your main function, see examples", ExitCodes::Success) {} +}; + +/// -v or --version on command line +class CallForVersion : public Success { + CLI11_ERROR_DEF(Success, CallForVersion) + CallForVersion() + : CallForVersion("This should be caught in your main function, see examples", ExitCodes::Success) {} +}; + +/// Does not output a diagnostic in CLI11_PARSE, but allows main() to return with a specific error code. +class RuntimeError : public ParseError { + CLI11_ERROR_DEF(ParseError, RuntimeError) + explicit RuntimeError(int exit_code = 1) : RuntimeError("Runtime error", exit_code) {} +}; + +/// Thrown when parsing an INI file and it is missing +class FileError : public ParseError { + CLI11_ERROR_DEF(ParseError, FileError) + CLI11_ERROR_SIMPLE(FileError) + static FileError Missing(std::string name) { return FileError(name + " was not readable (missing?)"); } +}; + +/// Thrown when conversion call back fails, such as when an int fails to coerce to a string +class ConversionError : public ParseError { + CLI11_ERROR_DEF(ParseError, ConversionError) + CLI11_ERROR_SIMPLE(ConversionError) + ConversionError(std::string member, std::string name) + : ConversionError("The value " + member + " is not an allowed value for " + name) {} + ConversionError(std::string name, std::vector results) + : ConversionError("Could not convert: " + name + " = " + detail::join(results)) {} + static ConversionError TooManyInputsFlag(std::string name) { + return ConversionError(name + ": too many inputs for a flag"); + } + static ConversionError TrueFalse(std::string name) { + return ConversionError(name + ": Should be true/false or a number"); + } +}; + +/// Thrown when validation of results fails +class ValidationError : public ParseError { + CLI11_ERROR_DEF(ParseError, ValidationError) + CLI11_ERROR_SIMPLE(ValidationError) + explicit ValidationError(std::string name, std::string msg) : ValidationError(name + ": " + msg) {} +}; + +/// Thrown when a required option is missing +class RequiredError : public ParseError { + CLI11_ERROR_DEF(ParseError, RequiredError) + explicit RequiredError(std::string name) : RequiredError(name + " is required", ExitCodes::RequiredError) {} + static RequiredError Subcommand(std::size_t min_subcom) { + if(min_subcom == 1) { + return RequiredError("A subcommand"); + } + return {"Requires at least " + std::to_string(min_subcom) + " subcommands", ExitCodes::RequiredError}; + } + static RequiredError + Option(std::size_t min_option, std::size_t max_option, std::size_t used, const std::string &option_list) { + if((min_option == 1) && (max_option == 1) && (used == 0)) + return RequiredError("Exactly 1 option from [" + option_list + "]"); + if((min_option == 1) && (max_option == 1) && (used > 1)) { + return {"Exactly 1 option from [" + option_list + "] is required and " + std::to_string(used) + + " were given", + ExitCodes::RequiredError}; + } + if((min_option == 1) && (used == 0)) + return RequiredError("At least 1 option from [" + option_list + "]"); + if(used < min_option) { + return {"Requires at least " + std::to_string(min_option) + " options used and only " + + std::to_string(used) + "were given from [" + option_list + "]", + ExitCodes::RequiredError}; + } + if(max_option == 1) + return {"Requires at most 1 options be given from [" + option_list + "]", ExitCodes::RequiredError}; + + return {"Requires at most " + std::to_string(max_option) + " options be used and " + std::to_string(used) + + "were given from [" + option_list + "]", + ExitCodes::RequiredError}; + } +}; + +/// Thrown when the wrong number of arguments has been received +class ArgumentMismatch : public ParseError { + CLI11_ERROR_DEF(ParseError, ArgumentMismatch) + CLI11_ERROR_SIMPLE(ArgumentMismatch) + ArgumentMismatch(std::string name, int expected, std::size_t received) + : ArgumentMismatch(expected > 0 ? ("Expected exactly " + std::to_string(expected) + " arguments to " + name + + ", got " + std::to_string(received)) + : ("Expected at least " + std::to_string(-expected) + " arguments to " + name + + ", got " + std::to_string(received)), + ExitCodes::ArgumentMismatch) {} + + static ArgumentMismatch AtLeast(std::string name, int num, std::size_t received) { + return ArgumentMismatch(name + ": At least " + std::to_string(num) + " required but received " + + std::to_string(received)); + } + static ArgumentMismatch AtMost(std::string name, int num, std::size_t received) { + return ArgumentMismatch(name + ": At Most " + std::to_string(num) + " required but received " + + std::to_string(received)); + } + static ArgumentMismatch TypedAtLeast(std::string name, int num, std::string type) { + return ArgumentMismatch(name + ": " + std::to_string(num) + " required " + type + " missing"); + } + static ArgumentMismatch FlagOverride(std::string name) { + return ArgumentMismatch(name + " was given a disallowed flag override"); + } + static ArgumentMismatch PartialType(std::string name, int num, std::string type) { + return ArgumentMismatch(name + ": " + type + " only partially specified: " + std::to_string(num) + + " required for each element"); + } +}; + +/// Thrown when a requires option is missing +class RequiresError : public ParseError { + CLI11_ERROR_DEF(ParseError, RequiresError) + RequiresError(std::string curname, std::string subname) + : RequiresError(curname + " requires " + subname, ExitCodes::RequiresError) {} +}; + +/// Thrown when an excludes option is present +class ExcludesError : public ParseError { + CLI11_ERROR_DEF(ParseError, ExcludesError) + ExcludesError(std::string curname, std::string subname) + : ExcludesError(curname + " excludes " + subname, ExitCodes::ExcludesError) {} +}; + +/// Thrown when too many positionals or options are found +class ExtrasError : public ParseError { + CLI11_ERROR_DEF(ParseError, ExtrasError) + explicit ExtrasError(std::vector args) + : ExtrasError((args.size() > 1 ? "The following arguments were not expected: " + : "The following argument was not expected: ") + + detail::rjoin(args, " "), + ExitCodes::ExtrasError) {} + ExtrasError(const std::string &name, std::vector args) + : ExtrasError(name, + (args.size() > 1 ? "The following arguments were not expected: " + : "The following argument was not expected: ") + + detail::rjoin(args, " "), + ExitCodes::ExtrasError) {} +}; + +/// Thrown when extra values are found in an INI file +class ConfigError : public ParseError { + CLI11_ERROR_DEF(ParseError, ConfigError) + CLI11_ERROR_SIMPLE(ConfigError) + static ConfigError Extras(std::string item) { return ConfigError("INI was not able to parse " + item); } + static ConfigError NotConfigurable(std::string item) { + return ConfigError(item + ": This option is not allowed in a configuration file"); + } +}; + +/// Thrown when validation fails before parsing +class InvalidError : public ParseError { + CLI11_ERROR_DEF(ParseError, InvalidError) + explicit InvalidError(std::string name) + : InvalidError(name + ": Too many positional arguments with unlimited expected args", ExitCodes::InvalidError) { + } +}; + +/// This is just a safety check to verify selection and parsing match - you should not ever see it +/// Strings are directly added to this error, but again, it should never be seen. +class HorribleError : public ParseError { + CLI11_ERROR_DEF(ParseError, HorribleError) + CLI11_ERROR_SIMPLE(HorribleError) +}; + +// After parsing + +/// Thrown when counting a non-existent option +class OptionNotFound : public Error { + CLI11_ERROR_DEF(Error, OptionNotFound) + explicit OptionNotFound(std::string name) : OptionNotFound(name + " not found", ExitCodes::OptionNotFound) {} +}; + +#undef CLI11_ERROR_DEF +#undef CLI11_ERROR_SIMPLE + +/// @} + + + + +// Type tools + +// Utilities for type enabling +namespace detail { +// Based generally on https://rmf.io/cxx11/almost-static-if +/// Simple empty scoped class +enum class enabler {}; + +/// An instance to use in EnableIf +constexpr enabler dummy = {}; +} // namespace detail + +/// A copy of enable_if_t from C++14, compatible with C++11. +/// +/// We could check to see if C++14 is being used, but it does not hurt to redefine this +/// (even Google does this: https://github.com/google/skia/blob/main/include/private/SkTLogic.h) +/// It is not in the std namespace anyway, so no harm done. +template using enable_if_t = typename std::enable_if::type; + +/// A copy of std::void_t from C++17 (helper for C++11 and C++14) +template struct make_void { + using type = void; +}; + +/// A copy of std::void_t from C++17 - same reasoning as enable_if_t, it does not hurt to redefine +template using void_t = typename make_void::type; + +/// A copy of std::conditional_t from C++14 - same reasoning as enable_if_t, it does not hurt to redefine +template using conditional_t = typename std::conditional::type; + +/// Check to see if something is bool (fail check by default) +template struct is_bool : std::false_type {}; + +/// Check to see if something is bool (true if actually a bool) +template <> struct is_bool : std::true_type {}; + +/// Check to see if something is a shared pointer +template struct is_shared_ptr : std::false_type {}; + +/// Check to see if something is a shared pointer (True if really a shared pointer) +template struct is_shared_ptr> : std::true_type {}; + +/// Check to see if something is a shared pointer (True if really a shared pointer) +template struct is_shared_ptr> : std::true_type {}; + +/// Check to see if something is copyable pointer +template struct is_copyable_ptr { + static bool const value = is_shared_ptr::value || std::is_pointer::value; +}; + +/// This can be specialized to override the type deduction for IsMember. +template struct IsMemberType { + using type = T; +}; + +/// The main custom type needed here is const char * should be a string. +template <> struct IsMemberType { + using type = std::string; +}; + +namespace detail { + +// These are utilities for IsMember and other transforming objects + +/// Handy helper to access the element_type generically. This is not part of is_copyable_ptr because it requires that +/// pointer_traits be valid. + +/// not a pointer +template struct element_type { + using type = T; +}; + +template struct element_type::value>::type> { + using type = typename std::pointer_traits::element_type; +}; + +/// Combination of the element type and value type - remove pointer (including smart pointers) and get the value_type of +/// the container +template struct element_value_type { + using type = typename element_type::type::value_type; +}; + +/// Adaptor for set-like structure: This just wraps a normal container in a few utilities that do almost nothing. +template struct pair_adaptor : std::false_type { + using value_type = typename T::value_type; + using first_type = typename std::remove_const::type; + using second_type = typename std::remove_const::type; + + /// Get the first value (really just the underlying value) + template static auto first(Q &&pair_value) -> decltype(std::forward(pair_value)) { + return std::forward(pair_value); + } + /// Get the second value (really just the underlying value) + template static auto second(Q &&pair_value) -> decltype(std::forward(pair_value)) { + return std::forward(pair_value); + } +}; + +/// Adaptor for map-like structure (true version, must have key_type and mapped_type). +/// This wraps a mapped container in a few utilities access it in a general way. +template +struct pair_adaptor< + T, + conditional_t, void>> + : std::true_type { + using value_type = typename T::value_type; + using first_type = typename std::remove_const::type; + using second_type = typename std::remove_const::type; + + /// Get the first value (really just the underlying value) + template static auto first(Q &&pair_value) -> decltype(std::get<0>(std::forward(pair_value))) { + return std::get<0>(std::forward(pair_value)); + } + /// Get the second value (really just the underlying value) + template static auto second(Q &&pair_value) -> decltype(std::get<1>(std::forward(pair_value))) { + return std::get<1>(std::forward(pair_value)); + } +}; + +// Warning is suppressed due to "bug" in gcc<5.0 and gcc 7.0 with c++17 enabled that generates a Wnarrowing warning +// in the unevaluated context even if the function that was using this wasn't used. The standard says narrowing in +// brace initialization shouldn't be allowed but for backwards compatibility gcc allows it in some contexts. It is a +// little fuzzy what happens in template constructs and I think that was something GCC took a little while to work out. +// But regardless some versions of gcc generate a warning when they shouldn't from the following code so that should be +// suppressed +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnarrowing" +#endif +// check for constructibility from a specific type and copy assignable used in the parse detection +template class is_direct_constructible { + template + static auto test(int, std::true_type) -> decltype( +// NVCC warns about narrowing conversions here +#ifdef __CUDACC__ +#ifdef __NVCC_DIAG_PRAGMA_SUPPORT__ +#pragma nv_diag_suppress 2361 +#else +#pragma diag_suppress 2361 +#endif +#endif + TT{std::declval()} +#ifdef __CUDACC__ +#ifdef __NVCC_DIAG_PRAGMA_SUPPORT__ +#pragma nv_diag_default 2361 +#else +#pragma diag_default 2361 +#endif +#endif + , + std::is_move_assignable()); + + template static auto test(int, std::false_type) -> std::false_type; + + template static auto test(...) -> std::false_type; + + public: + static constexpr bool value = decltype(test(0, typename std::is_constructible::type()))::value; +}; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + +// Check for output streamability +// Based on https://stackoverflow.com/questions/22758291/how-can-i-detect-if-a-type-can-be-streamed-to-an-stdostream + +template class is_ostreamable { + template + static auto test(int) -> decltype(std::declval() << std::declval(), std::true_type()); + + template static auto test(...) -> std::false_type; + + public: + static constexpr bool value = decltype(test(0))::value; +}; + +/// Check for input streamability +template class is_istreamable { + template + static auto test(int) -> decltype(std::declval() >> std::declval(), std::true_type()); + + template static auto test(...) -> std::false_type; + + public: + static constexpr bool value = decltype(test(0))::value; +}; + +/// Check for complex +template class is_complex { + template + static auto test(int) -> decltype(std::declval().real(), std::declval().imag(), std::true_type()); + + template static auto test(...) -> std::false_type; + + public: + static constexpr bool value = decltype(test(0))::value; +}; + +/// Templated operation to get a value from a stream +template ::value, detail::enabler> = detail::dummy> +bool from_stream(const std::string &istring, T &obj) { + std::istringstream is; + is.str(istring); + is >> obj; + return !is.fail() && !is.rdbuf()->in_avail(); +} + +template ::value, detail::enabler> = detail::dummy> +bool from_stream(const std::string & /*istring*/, T & /*obj*/) { + return false; +} + +// check to see if an object is a mutable container (fail by default) +template struct is_mutable_container : std::false_type {}; + +/// type trait to test if a type is a mutable container meaning it has a value_type, it has an iterator, a clear, and +/// end methods and an insert function. And for our purposes we exclude std::string and types that can be constructed +/// from a std::string +template +struct is_mutable_container< + T, + conditional_t().end()), + decltype(std::declval().clear()), + decltype(std::declval().insert(std::declval().end())>(), + std::declval()))>, + void>> : public conditional_t::value || + std::is_constructible::value, + std::false_type, + std::true_type> {}; + +// check to see if an object is a mutable container (fail by default) +template struct is_readable_container : std::false_type {}; + +/// type trait to test if a type is a container meaning it has a value_type, it has an iterator, a clear, and an end +/// methods and an insert function. And for our purposes we exclude std::string and types that can be constructed from +/// a std::string +template +struct is_readable_container< + T, + conditional_t().end()), decltype(std::declval().begin())>, void>> + : public std::true_type {}; + +// check to see if an object is a wrapper (fail by default) +template struct is_wrapper : std::false_type {}; + +// check if an object is a wrapper (it has a value_type defined) +template +struct is_wrapper, void>> : public std::true_type {}; + +// Check for tuple like types, as in classes with a tuple_size type trait +template class is_tuple_like { + template + // static auto test(int) + // -> decltype(std::conditional<(std::tuple_size::value > 0), std::true_type, std::false_type>::type()); + static auto test(int) -> decltype(std::tuple_size::type>::value, std::true_type{}); + template static auto test(...) -> std::false_type; + + public: + static constexpr bool value = decltype(test(0))::value; +}; + +/// Convert an object to a string (directly forward if this can become a string) +template ::value, detail::enabler> = detail::dummy> +auto to_string(T &&value) -> decltype(std::forward(value)) { + return std::forward(value); +} + +/// Construct a string from the object +template ::value && !std::is_convertible::value, + detail::enabler> = detail::dummy> +std::string to_string(const T &value) { + return std::string(value); // NOLINT(google-readability-casting) +} + +/// Convert an object to a string (streaming must be supported for that type) +template ::value && !std::is_constructible::value && + is_ostreamable::value, + detail::enabler> = detail::dummy> +std::string to_string(T &&value) { + std::stringstream stream; + stream << value; + return stream.str(); +} + +/// If conversion is not supported, return an empty string (streaming is not supported for that type) +template ::value && !is_ostreamable::value && + !is_readable_container::type>::value, + detail::enabler> = detail::dummy> +std::string to_string(T &&) { + return {}; +} + +/// convert a readable container to a string +template ::value && !is_ostreamable::value && + is_readable_container::value, + detail::enabler> = detail::dummy> +std::string to_string(T &&variable) { + auto cval = variable.begin(); + auto end = variable.end(); + if(cval == end) { + return {"{}"}; + } + std::vector defaults; + while(cval != end) { + defaults.emplace_back(CLI::detail::to_string(*cval)); + ++cval; + } + return {"[" + detail::join(defaults) + "]"}; +} + +/// special template overload +template ::value, detail::enabler> = detail::dummy> +auto checked_to_string(T &&value) -> decltype(to_string(std::forward(value))) { + return to_string(std::forward(value)); +} + +/// special template overload +template ::value, detail::enabler> = detail::dummy> +std::string checked_to_string(T &&) { + return std::string{}; +} +/// get a string as a convertible value for arithmetic types +template ::value, detail::enabler> = detail::dummy> +std::string value_string(const T &value) { + return std::to_string(value); +} +/// get a string as a convertible value for enumerations +template ::value, detail::enabler> = detail::dummy> +std::string value_string(const T &value) { + return std::to_string(static_cast::type>(value)); +} +/// for other types just use the regular to_string function +template ::value && !std::is_arithmetic::value, detail::enabler> = detail::dummy> +auto value_string(const T &value) -> decltype(to_string(value)) { + return to_string(value); +} + +/// template to get the underlying value type if it exists or use a default +template struct wrapped_type { + using type = def; +}; + +/// Type size for regular object types that do not look like a tuple +template struct wrapped_type::value>::type> { + using type = typename T::value_type; +}; + +/// This will only trigger for actual void type +template struct type_count_base { + static const int value{0}; +}; + +/// Type size for regular object types that do not look like a tuple +template +struct type_count_base::value && !is_mutable_container::value && + !std::is_void::value>::type> { + static constexpr int value{1}; +}; + +/// the base tuple size +template +struct type_count_base::value && !is_mutable_container::value>::type> { + static constexpr int value{std::tuple_size::value}; +}; + +/// Type count base for containers is the type_count_base of the individual element +template struct type_count_base::value>::type> { + static constexpr int value{type_count_base::value}; +}; + +/// Set of overloads to get the type size of an object + +/// forward declare the subtype_count structure +template struct subtype_count; + +/// forward declare the subtype_count_min structure +template struct subtype_count_min; + +/// This will only trigger for actual void type +template struct type_count { + static const int value{0}; +}; + +/// Type size for regular object types that do not look like a tuple +template +struct type_count::value && !is_tuple_like::value && !is_complex::value && + !std::is_void::value>::type> { + static constexpr int value{1}; +}; + +/// Type size for complex since it sometimes looks like a wrapper +template struct type_count::value>::type> { + static constexpr int value{2}; +}; + +/// Type size of types that are wrappers,except complex and tuples(which can also be wrappers sometimes) +template struct type_count::value>::type> { + static constexpr int value{subtype_count::value}; +}; + +/// Type size of types that are wrappers,except containers complex and tuples(which can also be wrappers sometimes) +template +struct type_count::value && !is_complex::value && !is_tuple_like::value && + !is_mutable_container::value>::type> { + static constexpr int value{type_count::value}; +}; + +/// 0 if the index > tuple size +template +constexpr typename std::enable_if::value, int>::type tuple_type_size() { + return 0; +} + +/// Recursively generate the tuple type name +template + constexpr typename std::enable_if < I::value, int>::type tuple_type_size() { + return subtype_count::type>::value + tuple_type_size(); +} + +/// Get the type size of the sum of type sizes for all the individual tuple types +template struct type_count::value>::type> { + static constexpr int value{tuple_type_size()}; +}; + +/// definition of subtype count +template struct subtype_count { + static constexpr int value{is_mutable_container::value ? expected_max_vector_size : type_count::value}; +}; + +/// This will only trigger for actual void type +template struct type_count_min { + static const int value{0}; +}; + +/// Type size for regular object types that do not look like a tuple +template +struct type_count_min< + T, + typename std::enable_if::value && !is_tuple_like::value && !is_wrapper::value && + !is_complex::value && !std::is_void::value>::type> { + static constexpr int value{type_count::value}; +}; + +/// Type size for complex since it sometimes looks like a wrapper +template struct type_count_min::value>::type> { + static constexpr int value{1}; +}; + +/// Type size min of types that are wrappers,except complex and tuples(which can also be wrappers sometimes) +template +struct type_count_min< + T, + typename std::enable_if::value && !is_complex::value && !is_tuple_like::value>::type> { + static constexpr int value{subtype_count_min::value}; +}; + +/// 0 if the index > tuple size +template +constexpr typename std::enable_if::value, int>::type tuple_type_size_min() { + return 0; +} + +/// Recursively generate the tuple type name +template + constexpr typename std::enable_if < I::value, int>::type tuple_type_size_min() { + return subtype_count_min::type>::value + tuple_type_size_min(); +} + +/// Get the type size of the sum of type sizes for all the individual tuple types +template struct type_count_min::value>::type> { + static constexpr int value{tuple_type_size_min()}; +}; + +/// definition of subtype count +template struct subtype_count_min { + static constexpr int value{is_mutable_container::value + ? ((type_count::value < expected_max_vector_size) ? type_count::value : 0) + : type_count_min::value}; +}; + +/// This will only trigger for actual void type +template struct expected_count { + static const int value{0}; +}; + +/// For most types the number of expected items is 1 +template +struct expected_count::value && !is_wrapper::value && + !std::is_void::value>::type> { + static constexpr int value{1}; +}; +/// number of expected items in a vector +template struct expected_count::value>::type> { + static constexpr int value{expected_max_vector_size}; +}; + +/// number of expected items in a vector +template +struct expected_count::value && is_wrapper::value>::type> { + static constexpr int value{expected_count::value}; +}; + +// Enumeration of the different supported categorizations of objects +enum class object_category : int { + char_value = 1, + integral_value = 2, + unsigned_integral = 4, + enumeration = 6, + boolean_value = 8, + floating_point = 10, + number_constructible = 12, + double_constructible = 14, + integer_constructible = 16, + // string like types + string_assignable = 23, + string_constructible = 24, + wstring_assignable = 25, + wstring_constructible = 26, + other = 45, + // special wrapper or container types + wrapper_value = 50, + complex_number = 60, + tuple_value = 70, + container_value = 80, + +}; + +/// Set of overloads to classify an object according to type + +/// some type that is not otherwise recognized +template struct classify_object { + static constexpr object_category value{object_category::other}; +}; + +/// Signed integers +template +struct classify_object< + T, + typename std::enable_if::value && !std::is_same::value && std::is_signed::value && + !is_bool::value && !std::is_enum::value>::type> { + static constexpr object_category value{object_category::integral_value}; +}; + +/// Unsigned integers +template +struct classify_object::value && std::is_unsigned::value && + !std::is_same::value && !is_bool::value>::type> { + static constexpr object_category value{object_category::unsigned_integral}; +}; + +/// single character values +template +struct classify_object::value && !std::is_enum::value>::type> { + static constexpr object_category value{object_category::char_value}; +}; + +/// Boolean values +template struct classify_object::value>::type> { + static constexpr object_category value{object_category::boolean_value}; +}; + +/// Floats +template struct classify_object::value>::type> { + static constexpr object_category value{object_category::floating_point}; +}; +#if defined _MSC_VER +// in MSVC wstring should take precedence if available this isn't as useful on other compilers due to the broader use of +// utf-8 encoding +#define WIDE_STRING_CHECK \ + !std::is_assignable::value && !std::is_constructible::value +#define STRING_CHECK true +#else +#define WIDE_STRING_CHECK true +#define STRING_CHECK !std::is_assignable::value && !std::is_constructible::value +#endif + +/// String and similar direct assignment +template +struct classify_object< + T, + typename std::enable_if::value && !std::is_integral::value && WIDE_STRING_CHECK && + std::is_assignable::value>::type> { + static constexpr object_category value{object_category::string_assignable}; +}; + +/// String and similar constructible and copy assignment +template +struct classify_object< + T, + typename std::enable_if::value && !std::is_integral::value && + !std::is_assignable::value && (type_count::value == 1) && + WIDE_STRING_CHECK && std::is_constructible::value>::type> { + static constexpr object_category value{object_category::string_constructible}; +}; + +/// Wide strings +template +struct classify_object::value && !std::is_integral::value && + STRING_CHECK && std::is_assignable::value>::type> { + static constexpr object_category value{object_category::wstring_assignable}; +}; + +template +struct classify_object< + T, + typename std::enable_if::value && !std::is_integral::value && + !std::is_assignable::value && (type_count::value == 1) && + STRING_CHECK && std::is_constructible::value>::type> { + static constexpr object_category value{object_category::wstring_constructible}; +}; + +/// Enumerations +template struct classify_object::value>::type> { + static constexpr object_category value{object_category::enumeration}; +}; + +template struct classify_object::value>::type> { + static constexpr object_category value{object_category::complex_number}; +}; + +/// Handy helper to contain a bunch of checks that rule out many common types (integers, string like, floating point, +/// vectors, and enumerations +template struct uncommon_type { + using type = typename std::conditional< + !std::is_floating_point::value && !std::is_integral::value && + !std::is_assignable::value && !std::is_constructible::value && + !std::is_assignable::value && !std::is_constructible::value && + !is_complex::value && !is_mutable_container::value && !std::is_enum::value, + std::true_type, + std::false_type>::type; + static constexpr bool value = type::value; +}; + +/// wrapper type +template +struct classify_object::value && is_wrapper::value && + !is_tuple_like::value && uncommon_type::value)>::type> { + static constexpr object_category value{object_category::wrapper_value}; +}; + +/// Assignable from double or int +template +struct classify_object::value && type_count::value == 1 && + !is_wrapper::value && is_direct_constructible::value && + is_direct_constructible::value>::type> { + static constexpr object_category value{object_category::number_constructible}; +}; + +/// Assignable from int +template +struct classify_object::value && type_count::value == 1 && + !is_wrapper::value && !is_direct_constructible::value && + is_direct_constructible::value>::type> { + static constexpr object_category value{object_category::integer_constructible}; +}; + +/// Assignable from double +template +struct classify_object::value && type_count::value == 1 && + !is_wrapper::value && is_direct_constructible::value && + !is_direct_constructible::value>::type> { + static constexpr object_category value{object_category::double_constructible}; +}; + +/// Tuple type +template +struct classify_object< + T, + typename std::enable_if::value && + ((type_count::value >= 2 && !is_wrapper::value) || + (uncommon_type::value && !is_direct_constructible::value && + !is_direct_constructible::value) || + (uncommon_type::value && type_count::value >= 2))>::type> { + static constexpr object_category value{object_category::tuple_value}; + // the condition on this class requires it be like a tuple, but on some compilers (like Xcode) tuples can be + // constructed from just the first element so tuples of can be constructed from a string, which + // could lead to issues so there are two variants of the condition, the first isolates things with a type size >=2 + // mainly to get tuples on Xcode with the exception of wrappers, the second is the main one and just separating out + // those cases that are caught by other object classifications +}; + +/// container type +template struct classify_object::value>::type> { + static constexpr object_category value{object_category::container_value}; +}; + +// Type name print + +/// Was going to be based on +/// http://stackoverflow.com/questions/1055452/c-get-name-of-type-in-template +/// But this is cleaner and works better in this case + +template ::value == object_category::char_value, detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "CHAR"; +} + +template ::value == object_category::integral_value || + classify_object::value == object_category::integer_constructible, + detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "INT"; +} + +template ::value == object_category::unsigned_integral, detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "UINT"; +} + +template ::value == object_category::floating_point || + classify_object::value == object_category::number_constructible || + classify_object::value == object_category::double_constructible, + detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "FLOAT"; +} + +/// Print name for enumeration types +template ::value == object_category::enumeration, detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "ENUM"; +} + +/// Print name for enumeration types +template ::value == object_category::boolean_value, detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "BOOLEAN"; +} + +/// Print name for enumeration types +template ::value == object_category::complex_number, detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "COMPLEX"; +} + +/// Print for all other types +template ::value >= object_category::string_assignable && + classify_object::value <= object_category::other, + detail::enabler> = detail::dummy> +constexpr const char *type_name() { + return "TEXT"; +} +/// typename for tuple value +template ::value == object_category::tuple_value && type_count_base::value >= 2, + detail::enabler> = detail::dummy> +std::string type_name(); // forward declaration + +/// Generate type name for a wrapper or container value +template ::value == object_category::container_value || + classify_object::value == object_category::wrapper_value, + detail::enabler> = detail::dummy> +std::string type_name(); // forward declaration + +/// Print name for single element tuple types +template ::value == object_category::tuple_value && type_count_base::value == 1, + detail::enabler> = detail::dummy> +inline std::string type_name() { + return type_name::type>::type>(); +} + +/// Empty string if the index > tuple size +template +inline typename std::enable_if::value, std::string>::type tuple_name() { + return std::string{}; +} + +/// Recursively generate the tuple type name +template +inline typename std::enable_if<(I < type_count_base::value), std::string>::type tuple_name() { + auto str = std::string{type_name::type>::type>()} + ',' + + tuple_name(); + if(str.back() == ',') + str.pop_back(); + return str; +} + +/// Print type name for tuples with 2 or more elements +template ::value == object_category::tuple_value && type_count_base::value >= 2, + detail::enabler>> +inline std::string type_name() { + auto tname = std::string(1, '[') + tuple_name(); + tname.push_back(']'); + return tname; +} + +/// get the type name for a type that has a value_type member +template ::value == object_category::container_value || + classify_object::value == object_category::wrapper_value, + detail::enabler>> +inline std::string type_name() { + return type_name(); +} + +// Lexical cast + +/// Convert to an unsigned integral +template ::value, detail::enabler> = detail::dummy> +bool integral_conversion(const std::string &input, T &output) noexcept { + if(input.empty() || input.front() == '-') { + return false; + } + char *val = nullptr; + errno = 0; + std::uint64_t output_ll = std::strtoull(input.c_str(), &val, 0); + if(errno == ERANGE) { + return false; + } + output = static_cast(output_ll); + if(val == (input.c_str() + input.size()) && static_cast(output) == output_ll) { + return true; + } + val = nullptr; + std::int64_t output_sll = std::strtoll(input.c_str(), &val, 0); + if(val == (input.c_str() + input.size())) { + output = (output_sll < 0) ? static_cast(0) : static_cast(output_sll); + return (static_cast(output) == output_sll); + } + return false; +} + +/// Convert to a signed integral +template ::value, detail::enabler> = detail::dummy> +bool integral_conversion(const std::string &input, T &output) noexcept { + if(input.empty()) { + return false; + } + char *val = nullptr; + errno = 0; + std::int64_t output_ll = std::strtoll(input.c_str(), &val, 0); + if(errno == ERANGE) { + return false; + } + output = static_cast(output_ll); + if(val == (input.c_str() + input.size()) && static_cast(output) == output_ll) { + return true; + } + if(input == "true") { + // this is to deal with a few oddities with flags and wrapper int types + output = static_cast(1); + return true; + } + return false; +} + +/// Convert a flag into an integer value typically binary flags +inline std::int64_t to_flag_value(std::string val) { + static const std::string trueString("true"); + static const std::string falseString("false"); + if(val == trueString) { + return 1; + } + if(val == falseString) { + return -1; + } + val = detail::to_lower(val); + std::int64_t ret = 0; + if(val.size() == 1) { + if(val[0] >= '1' && val[0] <= '9') { + return (static_cast(val[0]) - '0'); + } + switch(val[0]) { + case '0': + case 'f': + case 'n': + case '-': + ret = -1; + break; + case 't': + case 'y': + case '+': + ret = 1; + break; + default: + throw std::invalid_argument("unrecognized character"); + } + return ret; + } + if(val == trueString || val == "on" || val == "yes" || val == "enable") { + ret = 1; + } else if(val == falseString || val == "off" || val == "no" || val == "disable") { + ret = -1; + } else { + ret = std::stoll(val); + } + return ret; +} + +/// Integer conversion +template ::value == object_category::integral_value || + classify_object::value == object_category::unsigned_integral, + detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + return integral_conversion(input, output); +} + +/// char values +template ::value == object_category::char_value, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + if(input.size() == 1) { + output = static_cast(input[0]); + return true; + } + return integral_conversion(input, output); +} + +/// Boolean values +template ::value == object_category::boolean_value, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + try { + auto out = to_flag_value(input); + output = (out > 0); + return true; + } catch(const std::invalid_argument &) { + return false; + } catch(const std::out_of_range &) { + // if the number is out of the range of a 64 bit value then it is still a number and for this purpose is still + // valid all we care about the sign + output = (input[0] != '-'); + return true; + } +} + +/// Floats +template ::value == object_category::floating_point, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + if(input.empty()) { + return false; + } + char *val = nullptr; + auto output_ld = std::strtold(input.c_str(), &val); + output = static_cast(output_ld); + return val == (input.c_str() + input.size()); +} + +/// complex +template ::value == object_category::complex_number, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + using XC = typename wrapped_type::type; + XC x{0.0}, y{0.0}; + auto str1 = input; + bool worked = false; + auto nloc = str1.find_last_of("+-"); + if(nloc != std::string::npos && nloc > 0) { + worked = lexical_cast(str1.substr(0, nloc), x); + str1 = str1.substr(nloc); + if(str1.back() == 'i' || str1.back() == 'j') + str1.pop_back(); + worked = worked && lexical_cast(str1, y); + } else { + if(str1.back() == 'i' || str1.back() == 'j') { + str1.pop_back(); + worked = lexical_cast(str1, y); + x = XC{0}; + } else { + worked = lexical_cast(str1, x); + y = XC{0}; + } + } + if(worked) { + output = T{x, y}; + return worked; + } + return from_stream(input, output); +} + +/// String and similar direct assignment +template ::value == object_category::string_assignable, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + output = input; + return true; +} + +/// String and similar constructible and copy assignment +template < + typename T, + enable_if_t::value == object_category::string_constructible, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + output = T(input); + return true; +} + +/// Wide strings +template < + typename T, + enable_if_t::value == object_category::wstring_assignable, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + output = widen(input); + return true; +} + +template < + typename T, + enable_if_t::value == object_category::wstring_constructible, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + output = T{widen(input)}; + return true; +} + +/// Enumerations +template ::value == object_category::enumeration, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + typename std::underlying_type::type val; + if(!integral_conversion(input, val)) { + return false; + } + output = static_cast(val); + return true; +} + +/// wrapper types +template ::value == object_category::wrapper_value && + std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + typename T::value_type val; + if(lexical_cast(input, val)) { + output = val; + return true; + } + return from_stream(input, output); +} + +template ::value == object_category::wrapper_value && + !std::is_assignable::value && std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + typename T::value_type val; + if(lexical_cast(input, val)) { + output = T{val}; + return true; + } + return from_stream(input, output); +} + +/// Assignable from double or int +template < + typename T, + enable_if_t::value == object_category::number_constructible, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + int val = 0; + if(integral_conversion(input, val)) { + output = T(val); + return true; + } + + double dval = 0.0; + if(lexical_cast(input, dval)) { + output = T{dval}; + return true; + } + + return from_stream(input, output); +} + +/// Assignable from int +template < + typename T, + enable_if_t::value == object_category::integer_constructible, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + int val = 0; + if(integral_conversion(input, val)) { + output = T(val); + return true; + } + return from_stream(input, output); +} + +/// Assignable from double +template < + typename T, + enable_if_t::value == object_category::double_constructible, detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + double val = 0.0; + if(lexical_cast(input, val)) { + output = T{val}; + return true; + } + return from_stream(input, output); +} + +/// Non-string convertible from an int +template ::value == object_category::other && std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + int val = 0; + if(integral_conversion(input, val)) { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4800) +#endif + // with Atomic this could produce a warning due to the conversion but if atomic gets here it is an old style + // so will most likely still work + output = val; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + return true; + } + // LCOV_EXCL_START + // This version of cast is only used for odd cases in an older compilers the fail over + // from_stream is tested elsewhere an not relevant for coverage here + return from_stream(input, output); + // LCOV_EXCL_STOP +} + +/// Non-string parsable by a stream +template ::value == object_category::other && !std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_cast(const std::string &input, T &output) { + static_assert(is_istreamable::value, + "option object type must have a lexical cast overload or streaming input operator(>>) defined, if it " + "is convertible from another type use the add_option(...) with XC being the known type"); + return from_stream(input, output); +} + +/// Assign a value through lexical cast operations +/// Strings can be empty so we need to do a little different +template ::value && + (classify_object::value == object_category::string_assignable || + classify_object::value == object_category::string_constructible || + classify_object::value == object_category::wstring_assignable || + classify_object::value == object_category::wstring_constructible), + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + return lexical_cast(input, output); +} + +/// Assign a value through lexical cast operations +template ::value && std::is_assignable::value && + classify_object::value != object_category::string_assignable && + classify_object::value != object_category::string_constructible && + classify_object::value != object_category::wstring_assignable && + classify_object::value != object_category::wstring_constructible, + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + if(input.empty()) { + output = AssignTo{}; + return true; + } + + return lexical_cast(input, output); +} + +/// Assign a value through lexical cast operations +template ::value && !std::is_assignable::value && + classify_object::value == object_category::wrapper_value, + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + if(input.empty()) { + typename AssignTo::value_type emptyVal{}; + output = emptyVal; + return true; + } + return lexical_cast(input, output); +} + +/// Assign a value through lexical cast operations for int compatible values +/// mainly for atomic operations on some compilers +template ::value && !std::is_assignable::value && + classify_object::value != object_category::wrapper_value && + std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + if(input.empty()) { + output = 0; + return true; + } + int val{0}; + if(lexical_cast(input, val)) { +#if defined(__clang__) +/* on some older clang compilers */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-conversion" +#endif + output = val; +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + return true; + } + return false; +} + +/// Assign a value converted from a string in lexical cast to the output value directly +template ::value && std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + ConvertTo val{}; + bool parse_result = (!input.empty()) ? lexical_cast(input, val) : true; + if(parse_result) { + output = val; + } + return parse_result; +} + +/// Assign a value from a lexical cast through constructing a value and move assigning it +template < + typename AssignTo, + typename ConvertTo, + enable_if_t::value && !std::is_assignable::value && + std::is_move_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_assign(const std::string &input, AssignTo &output) { + ConvertTo val{}; + bool parse_result = input.empty() ? true : lexical_cast(input, val); + if(parse_result) { + output = AssignTo(val); // use () form of constructor to allow some implicit conversions + } + return parse_result; +} + +/// primary lexical conversion operation, 1 string to 1 type of some kind +template ::value <= object_category::other && + classify_object::value <= object_category::wrapper_value, + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + return lexical_assign(strings[0], output); +} + +/// Lexical conversion if there is only one element but the conversion type is for two, then call a two element +/// constructor +template ::value <= 2) && expected_count::value == 1 && + is_tuple_like::value && type_count_base::value == 2, + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + // the remove const is to handle pair types coming from a container + using FirstType = typename std::remove_const::type>::type; + using SecondType = typename std::tuple_element<1, ConvertTo>::type; + FirstType v1; + SecondType v2; + bool retval = lexical_assign(strings[0], v1); + if(strings.size() > 1) { + retval = retval && lexical_assign(strings[1], v2); + } + if(retval) { + output = AssignTo{v1, v2}; + } + return retval; +} + +/// Lexical conversion of a container types of single elements +template ::value && is_mutable_container::value && + type_count::value == 1, + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + output.erase(output.begin(), output.end()); + if(strings.empty()) { + return true; + } + if(strings.size() == 1 && strings[0] == "{}") { + return true; + } + bool skip_remaining = false; + if(strings.size() == 2 && strings[0] == "{}" && is_separator(strings[1])) { + skip_remaining = true; + } + for(const auto &elem : strings) { + typename AssignTo::value_type out; + bool retval = lexical_assign(elem, out); + if(!retval) { + return false; + } + output.insert(output.end(), std::move(out)); + if(skip_remaining) { + break; + } + } + return (!output.empty()); +} + +/// Lexical conversion for complex types +template ::value, detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + + if(strings.size() >= 2 && !strings[1].empty()) { + using XC2 = typename wrapped_type::type; + XC2 x{0.0}, y{0.0}; + auto str1 = strings[1]; + if(str1.back() == 'i' || str1.back() == 'j') { + str1.pop_back(); + } + auto worked = lexical_cast(strings[0], x) && lexical_cast(str1, y); + if(worked) { + output = ConvertTo{x, y}; + } + return worked; + } + return lexical_assign(strings[0], output); +} + +/// Conversion to a vector type using a particular single type as the conversion type +template ::value && (expected_count::value == 1) && + (type_count::value == 1), + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + bool retval = true; + output.clear(); + output.reserve(strings.size()); + for(const auto &elem : strings) { + + output.emplace_back(); + retval = retval && lexical_assign(elem, output.back()); + } + return (!output.empty()) && retval; +} + +// forward declaration + +/// Lexical conversion of a container types with conversion type of two elements +template ::value && is_mutable_container::value && + type_count_base::value == 2, + detail::enabler> = detail::dummy> +bool lexical_conversion(std::vector strings, AssignTo &output); + +/// Lexical conversion of a vector types with type_size >2 forward declaration +template ::value && is_mutable_container::value && + type_count_base::value != 2 && + ((type_count::value > 2) || + (type_count::value > type_count_base::value)), + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output); + +/// Conversion for tuples +template ::value && is_tuple_like::value && + (type_count_base::value != type_count::value || + type_count::value > 2), + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output); // forward declaration + +/// Conversion for operations where the assigned type is some class but the conversion is a mutable container or large +/// tuple +template ::value && !is_mutable_container::value && + classify_object::value != object_category::wrapper_value && + (is_mutable_container::value || type_count::value > 2), + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + + if(strings.size() > 1 || (!strings.empty() && !(strings.front().empty()))) { + ConvertTo val; + auto retval = lexical_conversion(strings, val); + output = AssignTo{val}; + return retval; + } + output = AssignTo{}; + return true; +} + +/// function template for converting tuples if the static Index is greater than the tuple size +template +inline typename std::enable_if<(I >= type_count_base::value), bool>::type +tuple_conversion(const std::vector &, AssignTo &) { + return true; +} + +/// Conversion of a tuple element where the type size ==1 and not a mutable container +template +inline typename std::enable_if::value && type_count::value == 1, bool>::type +tuple_type_conversion(std::vector &strings, AssignTo &output) { + auto retval = lexical_assign(strings[0], output); + strings.erase(strings.begin()); + return retval; +} + +/// Conversion of a tuple element where the type size !=1 but the size is fixed and not a mutable container +template +inline typename std::enable_if::value && (type_count::value > 1) && + type_count::value == type_count_min::value, + bool>::type +tuple_type_conversion(std::vector &strings, AssignTo &output) { + auto retval = lexical_conversion(strings, output); + strings.erase(strings.begin(), strings.begin() + type_count::value); + return retval; +} + +/// Conversion of a tuple element where the type is a mutable container or a type with different min and max type sizes +template +inline typename std::enable_if::value || + type_count::value != type_count_min::value, + bool>::type +tuple_type_conversion(std::vector &strings, AssignTo &output) { + + std::size_t index{subtype_count_min::value}; + const std::size_t mx_count{subtype_count::value}; + const std::size_t mx{(std::min)(mx_count, strings.size() - 1)}; + + while(index < mx) { + if(is_separator(strings[index])) { + break; + } + ++index; + } + bool retval = lexical_conversion( + std::vector(strings.begin(), strings.begin() + static_cast(index)), output); + if(strings.size() > index) { + strings.erase(strings.begin(), strings.begin() + static_cast(index) + 1); + } else { + strings.clear(); + } + return retval; +} + +/// Tuple conversion operation +template +inline typename std::enable_if<(I < type_count_base::value), bool>::type +tuple_conversion(std::vector strings, AssignTo &output) { + bool retval = true; + using ConvertToElement = typename std:: + conditional::value, typename std::tuple_element::type, ConvertTo>::type; + if(!strings.empty()) { + retval = retval && tuple_type_conversion::type, ConvertToElement>( + strings, std::get(output)); + } + retval = retval && tuple_conversion(std::move(strings), output); + return retval; +} + +/// Lexical conversion of a container types with tuple elements of size 2 +template ::value && is_mutable_container::value && + type_count_base::value == 2, + detail::enabler>> +bool lexical_conversion(std::vector strings, AssignTo &output) { + output.clear(); + while(!strings.empty()) { + + typename std::remove_const::type>::type v1; + typename std::tuple_element<1, typename ConvertTo::value_type>::type v2; + bool retval = tuple_type_conversion(strings, v1); + if(!strings.empty()) { + retval = retval && tuple_type_conversion(strings, v2); + } + if(retval) { + output.insert(output.end(), typename AssignTo::value_type{v1, v2}); + } else { + return false; + } + } + return (!output.empty()); +} + +/// lexical conversion of tuples with type count>2 or tuples of types of some element with a type size>=2 +template ::value && is_tuple_like::value && + (type_count_base::value != type_count::value || + type_count::value > 2), + detail::enabler>> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + static_assert( + !is_tuple_like::value || type_count_base::value == type_count_base::value, + "if the conversion type is defined as a tuple it must be the same size as the type you are converting to"); + return tuple_conversion(strings, output); +} + +/// Lexical conversion of a vector types for everything but tuples of two elements and types of size 1 +template ::value && is_mutable_container::value && + type_count_base::value != 2 && + ((type_count::value > 2) || + (type_count::value > type_count_base::value)), + detail::enabler>> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + bool retval = true; + output.clear(); + std::vector temp; + std::size_t ii{0}; + std::size_t icount{0}; + std::size_t xcm{type_count::value}; + auto ii_max = strings.size(); + while(ii < ii_max) { + temp.push_back(strings[ii]); + ++ii; + ++icount; + if(icount == xcm || is_separator(temp.back()) || ii == ii_max) { + if(static_cast(xcm) > type_count_min::value && is_separator(temp.back())) { + temp.pop_back(); + } + typename AssignTo::value_type temp_out; + retval = retval && + lexical_conversion(temp, temp_out); + temp.clear(); + if(!retval) { + return false; + } + output.insert(output.end(), std::move(temp_out)); + icount = 0; + } + } + return retval; +} + +/// conversion for wrapper types +template ::value == object_category::wrapper_value && + std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + if(strings.empty() || strings.front().empty()) { + output = ConvertTo{}; + return true; + } + typename ConvertTo::value_type val; + if(lexical_conversion(strings, val)) { + output = ConvertTo{val}; + return true; + } + return false; +} + +/// conversion for wrapper types +template ::value == object_category::wrapper_value && + !std::is_assignable::value, + detail::enabler> = detail::dummy> +bool lexical_conversion(const std::vector &strings, AssignTo &output) { + using ConvertType = typename ConvertTo::value_type; + if(strings.empty() || strings.front().empty()) { + output = ConvertType{}; + return true; + } + ConvertType val; + if(lexical_conversion(strings, val)) { + output = val; + return true; + } + return false; +} + +/// Sum a vector of strings +inline std::string sum_string_vector(const std::vector &values) { + double val{0.0}; + bool fail{false}; + std::string output; + for(const auto &arg : values) { + double tv{0.0}; + auto comp = lexical_cast(arg, tv); + if(!comp) { + try { + tv = static_cast(detail::to_flag_value(arg)); + } catch(const std::exception &) { + fail = true; + break; + } + } + val += tv; + } + if(fail) { + for(const auto &arg : values) { + output.append(arg); + } + } else { + std::ostringstream out; + out.precision(16); + out << val; + output = out.str(); + } + return output; +} + +} // namespace detail + + + +namespace detail { + +// Returns false if not a short option. Otherwise, sets opt name and rest and returns true +CLI11_INLINE bool split_short(const std::string ¤t, std::string &name, std::string &rest); + +// Returns false if not a long option. Otherwise, sets opt name and other side of = and returns true +CLI11_INLINE bool split_long(const std::string ¤t, std::string &name, std::string &value); + +// Returns false if not a windows style option. Otherwise, sets opt name and value and returns true +CLI11_INLINE bool split_windows_style(const std::string ¤t, std::string &name, std::string &value); + +// Splits a string into multiple long and short names +CLI11_INLINE std::vector split_names(std::string current); + +/// extract default flag values either {def} or starting with a ! +CLI11_INLINE std::vector> get_default_flag_values(const std::string &str); + +/// Get a vector of short names, one of long names, and a single name +CLI11_INLINE std::tuple, std::vector, std::string> +get_names(const std::vector &input); + +} // namespace detail + + + +namespace detail { + +CLI11_INLINE bool split_short(const std::string ¤t, std::string &name, std::string &rest) { + if(current.size() > 1 && current[0] == '-' && valid_first_char(current[1])) { + name = current.substr(1, 1); + rest = current.substr(2); + return true; + } + return false; +} + +CLI11_INLINE bool split_long(const std::string ¤t, std::string &name, std::string &value) { + if(current.size() > 2 && current.compare(0, 2, "--") == 0 && valid_first_char(current[2])) { + auto loc = current.find_first_of('='); + if(loc != std::string::npos) { + name = current.substr(2, loc - 2); + value = current.substr(loc + 1); + } else { + name = current.substr(2); + value = ""; + } + return true; + } + return false; +} + +CLI11_INLINE bool split_windows_style(const std::string ¤t, std::string &name, std::string &value) { + if(current.size() > 1 && current[0] == '/' && valid_first_char(current[1])) { + auto loc = current.find_first_of(':'); + if(loc != std::string::npos) { + name = current.substr(1, loc - 1); + value = current.substr(loc + 1); + } else { + name = current.substr(1); + value = ""; + } + return true; + } + return false; +} + +CLI11_INLINE std::vector split_names(std::string current) { + std::vector output; + std::size_t val = 0; + while((val = current.find(',')) != std::string::npos) { + output.push_back(trim_copy(current.substr(0, val))); + current = current.substr(val + 1); + } + output.push_back(trim_copy(current)); + return output; +} + +CLI11_INLINE std::vector> get_default_flag_values(const std::string &str) { + std::vector flags = split_names(str); + flags.erase(std::remove_if(flags.begin(), + flags.end(), + [](const std::string &name) { + return ((name.empty()) || (!(((name.find_first_of('{') != std::string::npos) && + (name.back() == '}')) || + (name[0] == '!')))); + }), + flags.end()); + std::vector> output; + output.reserve(flags.size()); + for(auto &flag : flags) { + auto def_start = flag.find_first_of('{'); + std::string defval = "false"; + if((def_start != std::string::npos) && (flag.back() == '}')) { + defval = flag.substr(def_start + 1); + defval.pop_back(); + flag.erase(def_start, std::string::npos); // NOLINT(readability-suspicious-call-argument) + } + flag.erase(0, flag.find_first_not_of("-!")); + output.emplace_back(flag, defval); + } + return output; +} + +CLI11_INLINE std::tuple, std::vector, std::string> +get_names(const std::vector &input) { + + std::vector short_names; + std::vector long_names; + std::string pos_name; + + for(std::string name : input) { + if(name.length() == 0) { + continue; + } + if(name.length() > 1 && name[0] == '-' && name[1] != '-') { + if(name.length() == 2 && valid_first_char(name[1])) + short_names.emplace_back(1, name[1]); + else if(name.length() > 2) + throw BadNameString::MissingDash(name); + else + throw BadNameString::OneCharName(name); + } else if(name.length() > 2 && name.substr(0, 2) == "--") { + name = name.substr(2); + if(valid_name_string(name)) + long_names.push_back(name); + else + throw BadNameString::BadLongName(name); + } else if(name == "-" || name == "--") { + throw BadNameString::DashesOnly(name); + } else { + if(pos_name.length() > 0) + throw BadNameString::MultiPositionalNames(name); + pos_name = name; + } + } + + return std::make_tuple(short_names, long_names, pos_name); +} + +} // namespace detail + + + +class App; + +/// Holds values to load into Options +struct ConfigItem { + /// This is the list of parents + std::vector parents{}; + + /// This is the name + std::string name{}; + + /// Listing of inputs + std::vector inputs{}; + + /// The list of parents and name joined by "." + CLI11_NODISCARD std::string fullname() const { + std::vector tmp = parents; + tmp.emplace_back(name); + return detail::join(tmp, "."); + } +}; + +/// This class provides a converter for configuration files. +class Config { + protected: + std::vector items{}; + + public: + /// Convert an app into a configuration + virtual std::string to_config(const App *, bool, bool, std::string) const = 0; + + /// Convert a configuration into an app + virtual std::vector from_config(std::istream &) const = 0; + + /// Get a flag value + CLI11_NODISCARD virtual std::string to_flag(const ConfigItem &item) const { + if(item.inputs.size() == 1) { + return item.inputs.at(0); + } + if(item.inputs.empty()) { + return "{}"; + } + throw ConversionError::TooManyInputsFlag(item.fullname()); // LCOV_EXCL_LINE + } + + /// Parse a config file, throw an error (ParseError:ConfigParseError or FileError) on failure + CLI11_NODISCARD std::vector from_file(const std::string &name) const { + std::ifstream input{name}; + if(!input.good()) + throw FileError::Missing(name); + + return from_config(input); + } + + /// Virtual destructor + virtual ~Config() = default; +}; + +/// This converter works with INI/TOML files; to write INI files use ConfigINI +class ConfigBase : public Config { + protected: + /// the character used for comments + char commentChar = '#'; + /// the character used to start an array '\0' is a default to not use + char arrayStart = '['; + /// the character used to end an array '\0' is a default to not use + char arrayEnd = ']'; + /// the character used to separate elements in an array + char arraySeparator = ','; + /// the character used separate the name from the value + char valueDelimiter = '='; + /// the character to use around strings + char stringQuote = '"'; + /// the character to use around single characters + char characterQuote = '\''; + /// the maximum number of layers to allow + uint8_t maximumLayers{255}; + /// the separator used to separator parent layers + char parentSeparatorChar{'.'}; + /// Specify the configuration index to use for arrayed sections + int16_t configIndex{-1}; + /// Specify the configuration section that should be used + std::string configSection{}; + + public: + std::string + to_config(const App * /*app*/, bool default_also, bool write_description, std::string prefix) const override; + + std::vector from_config(std::istream &input) const override; + /// Specify the configuration for comment characters + ConfigBase *comment(char cchar) { + commentChar = cchar; + return this; + } + /// Specify the start and end characters for an array + ConfigBase *arrayBounds(char aStart, char aEnd) { + arrayStart = aStart; + arrayEnd = aEnd; + return this; + } + /// Specify the delimiter character for an array + ConfigBase *arrayDelimiter(char aSep) { + arraySeparator = aSep; + return this; + } + /// Specify the delimiter between a name and value + ConfigBase *valueSeparator(char vSep) { + valueDelimiter = vSep; + return this; + } + /// Specify the quote characters used around strings and characters + ConfigBase *quoteCharacter(char qString, char qChar) { + stringQuote = qString; + characterQuote = qChar; + return this; + } + /// Specify the maximum number of parents + ConfigBase *maxLayers(uint8_t layers) { + maximumLayers = layers; + return this; + } + /// Specify the separator to use for parent layers + ConfigBase *parentSeparator(char sep) { + parentSeparatorChar = sep; + return this; + } + /// get a reference to the configuration section + std::string §ionRef() { return configSection; } + /// get the section + CLI11_NODISCARD const std::string §ion() const { return configSection; } + /// specify a particular section of the configuration file to use + ConfigBase *section(const std::string §ionName) { + configSection = sectionName; + return this; + } + + /// get a reference to the configuration index + int16_t &indexRef() { return configIndex; } + /// get the section index + CLI11_NODISCARD int16_t index() const { return configIndex; } + /// specify a particular index in the section to use (-1) for all sections to use + ConfigBase *index(int16_t sectionIndex) { + configIndex = sectionIndex; + return this; + } +}; + +/// the default Config is the TOML file format +using ConfigTOML = ConfigBase; + +/// ConfigINI generates a "standard" INI compliant output +class ConfigINI : public ConfigTOML { + + public: + ConfigINI() { + commentChar = ';'; + arrayStart = '\0'; + arrayEnd = '\0'; + arraySeparator = ' '; + valueDelimiter = '='; + } +}; + + + +class Option; + +/// @defgroup validator_group Validators + +/// @brief Some validators that are provided +/// +/// These are simple `std::string(const std::string&)` validators that are useful. They return +/// a string if the validation fails. A custom struct is provided, as well, with the same user +/// semantics, but with the ability to provide a new type name. +/// @{ + +/// +class Validator { + protected: + /// This is the description function, if empty the description_ will be used + std::function desc_function_{[]() { return std::string{}; }}; + + /// This is the base function that is to be called. + /// Returns a string error message if validation fails. + std::function func_{[](std::string &) { return std::string{}; }}; + /// The name for search purposes of the Validator + std::string name_{}; + /// A Validator will only apply to an indexed value (-1 is all elements) + int application_index_ = -1; + /// Enable for Validator to allow it to be disabled if need be + bool active_{true}; + /// specify that a validator should not modify the input + bool non_modifying_{false}; + + Validator(std::string validator_desc, std::function func) + : desc_function_([validator_desc]() { return validator_desc; }), func_(std::move(func)) {} + + public: + Validator() = default; + /// Construct a Validator with just the description string + explicit Validator(std::string validator_desc) : desc_function_([validator_desc]() { return validator_desc; }) {} + /// Construct Validator from basic information + Validator(std::function op, std::string validator_desc, std::string validator_name = "") + : desc_function_([validator_desc]() { return validator_desc; }), func_(std::move(op)), + name_(std::move(validator_name)) {} + /// Set the Validator operation function + Validator &operation(std::function op) { + func_ = std::move(op); + return *this; + } + /// This is the required operator for a Validator - provided to help + /// users (CLI11 uses the member `func` directly) + std::string operator()(std::string &str) const; + + /// This is the required operator for a Validator - provided to help + /// users (CLI11 uses the member `func` directly) + std::string operator()(const std::string &str) const { + std::string value = str; + return (active_) ? func_(value) : std::string{}; + } + + /// Specify the type string + Validator &description(std::string validator_desc) { + desc_function_ = [validator_desc]() { return validator_desc; }; + return *this; + } + /// Specify the type string + CLI11_NODISCARD Validator description(std::string validator_desc) const; + + /// Generate type description information for the Validator + CLI11_NODISCARD std::string get_description() const { + if(active_) { + return desc_function_(); + } + return std::string{}; + } + /// Specify the type string + Validator &name(std::string validator_name) { + name_ = std::move(validator_name); + return *this; + } + /// Specify the type string + CLI11_NODISCARD Validator name(std::string validator_name) const { + Validator newval(*this); + newval.name_ = std::move(validator_name); + return newval; + } + /// Get the name of the Validator + CLI11_NODISCARD const std::string &get_name() const { return name_; } + /// Specify whether the Validator is active or not + Validator &active(bool active_val = true) { + active_ = active_val; + return *this; + } + /// Specify whether the Validator is active or not + CLI11_NODISCARD Validator active(bool active_val = true) const { + Validator newval(*this); + newval.active_ = active_val; + return newval; + } + + /// Specify whether the Validator can be modifying or not + Validator &non_modifying(bool no_modify = true) { + non_modifying_ = no_modify; + return *this; + } + /// Specify the application index of a validator + Validator &application_index(int app_index) { + application_index_ = app_index; + return *this; + } + /// Specify the application index of a validator + CLI11_NODISCARD Validator application_index(int app_index) const { + Validator newval(*this); + newval.application_index_ = app_index; + return newval; + } + /// Get the current value of the application index + CLI11_NODISCARD int get_application_index() const { return application_index_; } + /// Get a boolean if the validator is active + CLI11_NODISCARD bool get_active() const { return active_; } + + /// Get a boolean if the validator is allowed to modify the input returns true if it can modify the input + CLI11_NODISCARD bool get_modifying() const { return !non_modifying_; } + + /// Combining validators is a new validator. Type comes from left validator if function, otherwise only set if the + /// same. + Validator operator&(const Validator &other) const; + + /// Combining validators is a new validator. Type comes from left validator if function, otherwise only set if the + /// same. + Validator operator|(const Validator &other) const; + + /// Create a validator that fails when a given validator succeeds + Validator operator!() const; + + private: + void _merge_description(const Validator &val1, const Validator &val2, const std::string &merger); +}; + +/// Class wrapping some of the accessors of Validator +class CustomValidator : public Validator { + public: +}; +// The implementation of the built in validators is using the Validator class; +// the user is only expected to use the const (static) versions (since there's no setup). +// Therefore, this is in detail. +namespace detail { + +/// CLI enumeration of different file types +enum class path_type { nonexistent, file, directory }; + +/// get the type of the path from a file name +CLI11_INLINE path_type check_path(const char *file) noexcept; + +/// Check for an existing file (returns error message if check fails) +class ExistingFileValidator : public Validator { + public: + ExistingFileValidator(); +}; + +/// Check for an existing directory (returns error message if check fails) +class ExistingDirectoryValidator : public Validator { + public: + ExistingDirectoryValidator(); +}; + +/// Check for an existing path +class ExistingPathValidator : public Validator { + public: + ExistingPathValidator(); +}; + +/// Check for an non-existing path +class NonexistentPathValidator : public Validator { + public: + NonexistentPathValidator(); +}; + +/// Validate the given string is a legal ipv4 address +class IPV4Validator : public Validator { + public: + IPV4Validator(); +}; + +} // namespace detail + +// Static is not needed here, because global const implies static. + +/// Check for existing file (returns error message if check fails) +const detail::ExistingFileValidator ExistingFile; + +/// Check for an existing directory (returns error message if check fails) +const detail::ExistingDirectoryValidator ExistingDirectory; + +/// Check for an existing path +const detail::ExistingPathValidator ExistingPath; + +/// Check for an non-existing path +const detail::NonexistentPathValidator NonexistentPath; + +/// Check for an IP4 address +const detail::IPV4Validator ValidIPV4; + +/// Validate the input as a particular type +template class TypeValidator : public Validator { + public: + explicit TypeValidator(const std::string &validator_name) + : Validator(validator_name, [](std::string &input_string) { + using CLI::detail::lexical_cast; + auto val = DesiredType(); + if(!lexical_cast(input_string, val)) { + return std::string("Failed parsing ") + input_string + " as a " + detail::type_name(); + } + return std::string(); + }) {} + TypeValidator() : TypeValidator(detail::type_name()) {} +}; + +/// Check for a number +const TypeValidator Number("NUMBER"); + +/// Modify a path if the file is a particular default location, can be used as Check or transform +/// with the error return optionally disabled +class FileOnDefaultPath : public Validator { + public: + explicit FileOnDefaultPath(std::string default_path, bool enableErrorReturn = true); +}; + +/// Produce a range (factory). Min and max are inclusive. +class Range : public Validator { + public: + /// This produces a range with min and max inclusive. + /// + /// Note that the constructor is templated, but the struct is not, so C++17 is not + /// needed to provide nice syntax for Range(a,b). + template + Range(T min_val, T max_val, const std::string &validator_name = std::string{}) : Validator(validator_name) { + if(validator_name.empty()) { + std::stringstream out; + out << detail::type_name() << " in [" << min_val << " - " << max_val << "]"; + description(out.str()); + } + + func_ = [min_val, max_val](std::string &input) { + using CLI::detail::lexical_cast; + T val; + bool converted = lexical_cast(input, val); + if((!converted) || (val < min_val || val > max_val)) { + std::stringstream out; + out << "Value " << input << " not in range ["; + out << min_val << " - " << max_val << "]"; + return out.str(); + } + return std::string{}; + }; + } + + /// Range of one value is 0 to value + template + explicit Range(T max_val, const std::string &validator_name = std::string{}) + : Range(static_cast(0), max_val, validator_name) {} +}; + +/// Check for a non negative number +const Range NonNegativeNumber((std::numeric_limits::max)(), "NONNEGATIVE"); + +/// Check for a positive valued number (val>0.0), ::min here is the smallest positive number +const Range PositiveNumber((std::numeric_limits::min)(), (std::numeric_limits::max)(), "POSITIVE"); + +/// Produce a bounded range (factory). Min and max are inclusive. +class Bound : public Validator { + public: + /// This bounds a value with min and max inclusive. + /// + /// Note that the constructor is templated, but the struct is not, so C++17 is not + /// needed to provide nice syntax for Range(a,b). + template Bound(T min_val, T max_val) { + std::stringstream out; + out << detail::type_name() << " bounded to [" << min_val << " - " << max_val << "]"; + description(out.str()); + + func_ = [min_val, max_val](std::string &input) { + using CLI::detail::lexical_cast; + T val; + bool converted = lexical_cast(input, val); + if(!converted) { + return std::string("Value ") + input + " could not be converted"; + } + if(val < min_val) + input = detail::to_string(min_val); + else if(val > max_val) + input = detail::to_string(max_val); + + return std::string{}; + }; + } + + /// Range of one value is 0 to value + template explicit Bound(T max_val) : Bound(static_cast(0), max_val) {} +}; + +namespace detail { +template ::type>::value, detail::enabler> = detail::dummy> +auto smart_deref(T value) -> decltype(*value) { + return *value; +} + +template < + typename T, + enable_if_t::type>::value, detail::enabler> = detail::dummy> +typename std::remove_reference::type &smart_deref(T &value) { + return value; +} +/// Generate a string representation of a set +template std::string generate_set(const T &set) { + using element_t = typename detail::element_type::type; + using iteration_type_t = typename detail::pair_adaptor::value_type; // the type of the object pair + std::string out(1, '{'); + out.append(detail::join( + detail::smart_deref(set), + [](const iteration_type_t &v) { return detail::pair_adaptor::first(v); }, + ",")); + out.push_back('}'); + return out; +} + +/// Generate a string representation of a map +template std::string generate_map(const T &map, bool key_only = false) { + using element_t = typename detail::element_type::type; + using iteration_type_t = typename detail::pair_adaptor::value_type; // the type of the object pair + std::string out(1, '{'); + out.append(detail::join( + detail::smart_deref(map), + [key_only](const iteration_type_t &v) { + std::string res{detail::to_string(detail::pair_adaptor::first(v))}; + + if(!key_only) { + res.append("->"); + res += detail::to_string(detail::pair_adaptor::second(v)); + } + return res; + }, + ",")); + out.push_back('}'); + return out; +} + +template struct has_find { + template + static auto test(int) -> decltype(std::declval().find(std::declval()), std::true_type()); + template static auto test(...) -> decltype(std::false_type()); + + static const auto value = decltype(test(0))::value; + using type = std::integral_constant; +}; + +/// A search function +template ::value, detail::enabler> = detail::dummy> +auto search(const T &set, const V &val) -> std::pair { + using element_t = typename detail::element_type::type; + auto &setref = detail::smart_deref(set); + auto it = std::find_if(std::begin(setref), std::end(setref), [&val](decltype(*std::begin(setref)) v) { + return (detail::pair_adaptor::first(v) == val); + }); + return {(it != std::end(setref)), it}; +} + +/// A search function that uses the built in find function +template ::value, detail::enabler> = detail::dummy> +auto search(const T &set, const V &val) -> std::pair { + auto &setref = detail::smart_deref(set); + auto it = setref.find(val); + return {(it != std::end(setref)), it}; +} + +/// A search function with a filter function +template +auto search(const T &set, const V &val, const std::function &filter_function) + -> std::pair { + using element_t = typename detail::element_type::type; + // do the potentially faster first search + auto res = search(set, val); + if((res.first) || (!(filter_function))) { + return res; + } + // if we haven't found it do the longer linear search with all the element translations + auto &setref = detail::smart_deref(set); + auto it = std::find_if(std::begin(setref), std::end(setref), [&](decltype(*std::begin(setref)) v) { + V a{detail::pair_adaptor::first(v)}; + a = filter_function(a); + return (a == val); + }); + return {(it != std::end(setref)), it}; +} + +// the following suggestion was made by Nikita Ofitserov(@himikof) +// done in templates to prevent compiler warnings on negation of unsigned numbers + +/// Do a check for overflow on signed numbers +template +inline typename std::enable_if::value, T>::type overflowCheck(const T &a, const T &b) { + if((a > 0) == (b > 0)) { + return ((std::numeric_limits::max)() / (std::abs)(a) < (std::abs)(b)); + } + return ((std::numeric_limits::min)() / (std::abs)(a) > -(std::abs)(b)); +} +/// Do a check for overflow on unsigned numbers +template +inline typename std::enable_if::value, T>::type overflowCheck(const T &a, const T &b) { + return ((std::numeric_limits::max)() / a < b); +} + +/// Performs a *= b; if it doesn't cause integer overflow. Returns false otherwise. +template typename std::enable_if::value, bool>::type checked_multiply(T &a, T b) { + if(a == 0 || b == 0 || a == 1 || b == 1) { + a *= b; + return true; + } + if(a == (std::numeric_limits::min)() || b == (std::numeric_limits::min)()) { + return false; + } + if(overflowCheck(a, b)) { + return false; + } + a *= b; + return true; +} + +/// Performs a *= b; if it doesn't equal infinity. Returns false otherwise. +template +typename std::enable_if::value, bool>::type checked_multiply(T &a, T b) { + T c = a * b; + if(std::isinf(c) && !std::isinf(a) && !std::isinf(b)) { + return false; + } + a = c; + return true; +} + +} // namespace detail +/// Verify items are in a set +class IsMember : public Validator { + public: + using filter_fn_t = std::function; + + /// This allows in-place construction using an initializer list + template + IsMember(std::initializer_list values, Args &&...args) + : IsMember(std::vector(values), std::forward(args)...) {} + + /// This checks to see if an item is in a set (empty function) + template explicit IsMember(T &&set) : IsMember(std::forward(set), nullptr) {} + + /// This checks to see if an item is in a set: pointer or copy version. You can pass in a function that will filter + /// both sides of the comparison before computing the comparison. + template explicit IsMember(T set, F filter_function) { + + // Get the type of the contained item - requires a container have ::value_type + // if the type does not have first_type and second_type, these are both value_type + using element_t = typename detail::element_type::type; // Removes (smart) pointers if needed + using item_t = typename detail::pair_adaptor::first_type; // Is value_type if not a map + + using local_item_t = typename IsMemberType::type; // This will convert bad types to good ones + // (const char * to std::string) + + // Make a local copy of the filter function, using a std::function if not one already + std::function filter_fn = filter_function; + + // This is the type name for help, it will take the current version of the set contents + desc_function_ = [set]() { return detail::generate_set(detail::smart_deref(set)); }; + + // This is the function that validates + // It stores a copy of the set pointer-like, so shared_ptr will stay alive + func_ = [set, filter_fn](std::string &input) { + using CLI::detail::lexical_cast; + local_item_t b; + if(!lexical_cast(input, b)) { + throw ValidationError(input); // name is added later + } + if(filter_fn) { + b = filter_fn(b); + } + auto res = detail::search(set, b, filter_fn); + if(res.first) { + // Make sure the version in the input string is identical to the one in the set + if(filter_fn) { + input = detail::value_string(detail::pair_adaptor::first(*(res.second))); + } + + // Return empty error string (success) + return std::string{}; + } + + // If you reach this point, the result was not found + return input + " not in " + detail::generate_set(detail::smart_deref(set)); + }; + } + + /// You can pass in as many filter functions as you like, they nest (string only currently) + template + IsMember(T &&set, filter_fn_t filter_fn_1, filter_fn_t filter_fn_2, Args &&...other) + : IsMember( + std::forward(set), + [filter_fn_1, filter_fn_2](std::string a) { return filter_fn_2(filter_fn_1(a)); }, + other...) {} +}; + +/// definition of the default transformation object +template using TransformPairs = std::vector>; + +/// Translate named items to other or a value set +class Transformer : public Validator { + public: + using filter_fn_t = std::function; + + /// This allows in-place construction + template + Transformer(std::initializer_list> values, Args &&...args) + : Transformer(TransformPairs(values), std::forward(args)...) {} + + /// direct map of std::string to std::string + template explicit Transformer(T &&mapping) : Transformer(std::forward(mapping), nullptr) {} + + /// This checks to see if an item is in a set: pointer or copy version. You can pass in a function that will filter + /// both sides of the comparison before computing the comparison. + template explicit Transformer(T mapping, F filter_function) { + + static_assert(detail::pair_adaptor::type>::value, + "mapping must produce value pairs"); + // Get the type of the contained item - requires a container have ::value_type + // if the type does not have first_type and second_type, these are both value_type + using element_t = typename detail::element_type::type; // Removes (smart) pointers if needed + using item_t = typename detail::pair_adaptor::first_type; // Is value_type if not a map + using local_item_t = typename IsMemberType::type; // Will convert bad types to good ones + // (const char * to std::string) + + // Make a local copy of the filter function, using a std::function if not one already + std::function filter_fn = filter_function; + + // This is the type name for help, it will take the current version of the set contents + desc_function_ = [mapping]() { return detail::generate_map(detail::smart_deref(mapping)); }; + + func_ = [mapping, filter_fn](std::string &input) { + using CLI::detail::lexical_cast; + local_item_t b; + if(!lexical_cast(input, b)) { + return std::string(); + // there is no possible way we can match anything in the mapping if we can't convert so just return + } + if(filter_fn) { + b = filter_fn(b); + } + auto res = detail::search(mapping, b, filter_fn); + if(res.first) { + input = detail::value_string(detail::pair_adaptor::second(*res.second)); + } + return std::string{}; + }; + } + + /// You can pass in as many filter functions as you like, they nest + template + Transformer(T &&mapping, filter_fn_t filter_fn_1, filter_fn_t filter_fn_2, Args &&...other) + : Transformer( + std::forward(mapping), + [filter_fn_1, filter_fn_2](std::string a) { return filter_fn_2(filter_fn_1(a)); }, + other...) {} +}; + +/// translate named items to other or a value set +class CheckedTransformer : public Validator { + public: + using filter_fn_t = std::function; + + /// This allows in-place construction + template + CheckedTransformer(std::initializer_list> values, Args &&...args) + : CheckedTransformer(TransformPairs(values), std::forward(args)...) {} + + /// direct map of std::string to std::string + template explicit CheckedTransformer(T mapping) : CheckedTransformer(std::move(mapping), nullptr) {} + + /// This checks to see if an item is in a set: pointer or copy version. You can pass in a function that will filter + /// both sides of the comparison before computing the comparison. + template explicit CheckedTransformer(T mapping, F filter_function) { + + static_assert(detail::pair_adaptor::type>::value, + "mapping must produce value pairs"); + // Get the type of the contained item - requires a container have ::value_type + // if the type does not have first_type and second_type, these are both value_type + using element_t = typename detail::element_type::type; // Removes (smart) pointers if needed + using item_t = typename detail::pair_adaptor::first_type; // Is value_type if not a map + using local_item_t = typename IsMemberType::type; // Will convert bad types to good ones + // (const char * to std::string) + using iteration_type_t = typename detail::pair_adaptor::value_type; // the type of the object pair + + // Make a local copy of the filter function, using a std::function if not one already + std::function filter_fn = filter_function; + + auto tfunc = [mapping]() { + std::string out("value in "); + out += detail::generate_map(detail::smart_deref(mapping)) + " OR {"; + out += detail::join( + detail::smart_deref(mapping), + [](const iteration_type_t &v) { return detail::to_string(detail::pair_adaptor::second(v)); }, + ","); + out.push_back('}'); + return out; + }; + + desc_function_ = tfunc; + + func_ = [mapping, tfunc, filter_fn](std::string &input) { + using CLI::detail::lexical_cast; + local_item_t b; + bool converted = lexical_cast(input, b); + if(converted) { + if(filter_fn) { + b = filter_fn(b); + } + auto res = detail::search(mapping, b, filter_fn); + if(res.first) { + input = detail::value_string(detail::pair_adaptor::second(*res.second)); + return std::string{}; + } + } + for(const auto &v : detail::smart_deref(mapping)) { + auto output_string = detail::value_string(detail::pair_adaptor::second(v)); + if(output_string == input) { + return std::string(); + } + } + + return "Check " + input + " " + tfunc() + " FAILED"; + }; + } + + /// You can pass in as many filter functions as you like, they nest + template + CheckedTransformer(T &&mapping, filter_fn_t filter_fn_1, filter_fn_t filter_fn_2, Args &&...other) + : CheckedTransformer( + std::forward(mapping), + [filter_fn_1, filter_fn_2](std::string a) { return filter_fn_2(filter_fn_1(a)); }, + other...) {} +}; + +/// Helper function to allow ignore_case to be passed to IsMember or Transform +inline std::string ignore_case(std::string item) { return detail::to_lower(item); } + +/// Helper function to allow ignore_underscore to be passed to IsMember or Transform +inline std::string ignore_underscore(std::string item) { return detail::remove_underscore(item); } + +/// Helper function to allow checks to ignore spaces to be passed to IsMember or Transform +inline std::string ignore_space(std::string item) { + item.erase(std::remove(std::begin(item), std::end(item), ' '), std::end(item)); + item.erase(std::remove(std::begin(item), std::end(item), '\t'), std::end(item)); + return item; +} + +/// Multiply a number by a factor using given mapping. +/// Can be used to write transforms for SIZE or DURATION inputs. +/// +/// Example: +/// With mapping = `{"b"->1, "kb"->1024, "mb"->1024*1024}` +/// one can recognize inputs like "100", "12kb", "100 MB", +/// that will be automatically transformed to 100, 14448, 104857600. +/// +/// Output number type matches the type in the provided mapping. +/// Therefore, if it is required to interpret real inputs like "0.42 s", +/// the mapping should be of a type or . +class AsNumberWithUnit : public Validator { + public: + /// Adjust AsNumberWithUnit behavior. + /// CASE_SENSITIVE/CASE_INSENSITIVE controls how units are matched. + /// UNIT_OPTIONAL/UNIT_REQUIRED throws ValidationError + /// if UNIT_REQUIRED is set and unit literal is not found. + enum Options { + CASE_SENSITIVE = 0, + CASE_INSENSITIVE = 1, + UNIT_OPTIONAL = 0, + UNIT_REQUIRED = 2, + DEFAULT = CASE_INSENSITIVE | UNIT_OPTIONAL + }; + + template + explicit AsNumberWithUnit(std::map mapping, + Options opts = DEFAULT, + const std::string &unit_name = "UNIT") { + description(generate_description(unit_name, opts)); + validate_mapping(mapping, opts); + + // transform function + func_ = [mapping, opts](std::string &input) -> std::string { + Number num{}; + + detail::rtrim(input); + if(input.empty()) { + throw ValidationError("Input is empty"); + } + + // Find split position between number and prefix + auto unit_begin = input.end(); + while(unit_begin > input.begin() && std::isalpha(*(unit_begin - 1), std::locale())) { + --unit_begin; + } + + std::string unit{unit_begin, input.end()}; + input.resize(static_cast(std::distance(input.begin(), unit_begin))); + detail::trim(input); + + if(opts & UNIT_REQUIRED && unit.empty()) { + throw ValidationError("Missing mandatory unit"); + } + if(opts & CASE_INSENSITIVE) { + unit = detail::to_lower(unit); + } + if(unit.empty()) { + using CLI::detail::lexical_cast; + if(!lexical_cast(input, num)) { + throw ValidationError(std::string("Value ") + input + " could not be converted to " + + detail::type_name()); + } + // No need to modify input if no unit passed + return {}; + } + + // find corresponding factor + auto it = mapping.find(unit); + if(it == mapping.end()) { + throw ValidationError(unit + + " unit not recognized. " + "Allowed values: " + + detail::generate_map(mapping, true)); + } + + if(!input.empty()) { + using CLI::detail::lexical_cast; + bool converted = lexical_cast(input, num); + if(!converted) { + throw ValidationError(std::string("Value ") + input + " could not be converted to " + + detail::type_name()); + } + // perform safe multiplication + bool ok = detail::checked_multiply(num, it->second); + if(!ok) { + throw ValidationError(detail::to_string(num) + " multiplied by " + unit + + " factor would cause number overflow. Use smaller value."); + } + } else { + num = static_cast(it->second); + } + + input = detail::to_string(num); + + return {}; + }; + } + + private: + /// Check that mapping contains valid units. + /// Update mapping for CASE_INSENSITIVE mode. + template static void validate_mapping(std::map &mapping, Options opts) { + for(auto &kv : mapping) { + if(kv.first.empty()) { + throw ValidationError("Unit must not be empty."); + } + if(!detail::isalpha(kv.first)) { + throw ValidationError("Unit must contain only letters."); + } + } + + // make all units lowercase if CASE_INSENSITIVE + if(opts & CASE_INSENSITIVE) { + std::map lower_mapping; + for(auto &kv : mapping) { + auto s = detail::to_lower(kv.first); + if(lower_mapping.count(s)) { + throw ValidationError(std::string("Several matching lowercase unit representations are found: ") + + s); + } + lower_mapping[detail::to_lower(kv.first)] = kv.second; + } + mapping = std::move(lower_mapping); + } + } + + /// Generate description like this: NUMBER [UNIT] + template static std::string generate_description(const std::string &name, Options opts) { + std::stringstream out; + out << detail::type_name() << ' '; + if(opts & UNIT_REQUIRED) { + out << name; + } else { + out << '[' << name << ']'; + } + return out.str(); + } +}; + +inline AsNumberWithUnit::Options operator|(const AsNumberWithUnit::Options &a, const AsNumberWithUnit::Options &b) { + return static_cast(static_cast(a) | static_cast(b)); +} + +/// Converts a human-readable size string (with unit literal) to uin64_t size. +/// Example: +/// "100" => 100 +/// "1 b" => 100 +/// "10Kb" => 10240 // you can configure this to be interpreted as kilobyte (*1000) or kibibyte (*1024) +/// "10 KB" => 10240 +/// "10 kb" => 10240 +/// "10 kib" => 10240 // *i, *ib are always interpreted as *bibyte (*1024) +/// "10kb" => 10240 +/// "2 MB" => 2097152 +/// "2 EiB" => 2^61 // Units up to exibyte are supported +class AsSizeValue : public AsNumberWithUnit { + public: + using result_t = std::uint64_t; + + /// If kb_is_1000 is true, + /// interpret 'kb', 'k' as 1000 and 'kib', 'ki' as 1024 + /// (same applies to higher order units as well). + /// Otherwise, interpret all literals as factors of 1024. + /// The first option is formally correct, but + /// the second interpretation is more wide-spread + /// (see https://en.wikipedia.org/wiki/Binary_prefix). + explicit AsSizeValue(bool kb_is_1000); + + private: + /// Get mapping + static std::map init_mapping(bool kb_is_1000); + + /// Cache calculated mapping + static std::map get_mapping(bool kb_is_1000); +}; + +namespace detail { +/// Split a string into a program name and command line arguments +/// the string is assumed to contain a file name followed by other arguments +/// the return value contains is a pair with the first argument containing the program name and the second +/// everything else. +CLI11_INLINE std::pair split_program_name(std::string commandline); + +} // namespace detail +/// @} + + + + +CLI11_INLINE std::string Validator::operator()(std::string &str) const { + std::string retstring; + if(active_) { + if(non_modifying_) { + std::string value = str; + retstring = func_(value); + } else { + retstring = func_(str); + } + } + return retstring; +} + +CLI11_NODISCARD CLI11_INLINE Validator Validator::description(std::string validator_desc) const { + Validator newval(*this); + newval.desc_function_ = [validator_desc]() { return validator_desc; }; + return newval; +} + +CLI11_INLINE Validator Validator::operator&(const Validator &other) const { + Validator newval; + + newval._merge_description(*this, other, " AND "); + + // Give references (will make a copy in lambda function) + const std::function &f1 = func_; + const std::function &f2 = other.func_; + + newval.func_ = [f1, f2](std::string &input) { + std::string s1 = f1(input); + std::string s2 = f2(input); + if(!s1.empty() && !s2.empty()) + return std::string("(") + s1 + ") AND (" + s2 + ")"; + return s1 + s2; + }; + + newval.active_ = active_ && other.active_; + newval.application_index_ = application_index_; + return newval; +} + +CLI11_INLINE Validator Validator::operator|(const Validator &other) const { + Validator newval; + + newval._merge_description(*this, other, " OR "); + + // Give references (will make a copy in lambda function) + const std::function &f1 = func_; + const std::function &f2 = other.func_; + + newval.func_ = [f1, f2](std::string &input) { + std::string s1 = f1(input); + std::string s2 = f2(input); + if(s1.empty() || s2.empty()) + return std::string(); + + return std::string("(") + s1 + ") OR (" + s2 + ")"; + }; + newval.active_ = active_ && other.active_; + newval.application_index_ = application_index_; + return newval; +} + +CLI11_INLINE Validator Validator::operator!() const { + Validator newval; + const std::function &dfunc1 = desc_function_; + newval.desc_function_ = [dfunc1]() { + auto str = dfunc1(); + return (!str.empty()) ? std::string("NOT ") + str : std::string{}; + }; + // Give references (will make a copy in lambda function) + const std::function &f1 = func_; + + newval.func_ = [f1, dfunc1](std::string &test) -> std::string { + std::string s1 = f1(test); + if(s1.empty()) { + return std::string("check ") + dfunc1() + " succeeded improperly"; + } + return std::string{}; + }; + newval.active_ = active_; + newval.application_index_ = application_index_; + return newval; +} + +CLI11_INLINE void +Validator::_merge_description(const Validator &val1, const Validator &val2, const std::string &merger) { + + const std::function &dfunc1 = val1.desc_function_; + const std::function &dfunc2 = val2.desc_function_; + + desc_function_ = [=]() { + std::string f1 = dfunc1(); + std::string f2 = dfunc2(); + if((f1.empty()) || (f2.empty())) { + return f1 + f2; + } + return std::string(1, '(') + f1 + ')' + merger + '(' + f2 + ')'; + }; +} + +namespace detail { + +#if defined CLI11_HAS_FILESYSTEM && CLI11_HAS_FILESYSTEM > 0 +CLI11_INLINE path_type check_path(const char *file) noexcept { + std::error_code ec; + auto stat = std::filesystem::status(to_path(file), ec); + if(ec) { + return path_type::nonexistent; + } + switch(stat.type()) { + case std::filesystem::file_type::none: // LCOV_EXCL_LINE + case std::filesystem::file_type::not_found: + return path_type::nonexistent; + case std::filesystem::file_type::directory: + return path_type::directory; + case std::filesystem::file_type::symlink: + case std::filesystem::file_type::block: + case std::filesystem::file_type::character: + case std::filesystem::file_type::fifo: + case std::filesystem::file_type::socket: + case std::filesystem::file_type::regular: + case std::filesystem::file_type::unknown: + default: + return path_type::file; + } +} +#else +CLI11_INLINE path_type check_path(const char *file) noexcept { +#if defined(_MSC_VER) + struct __stat64 buffer; + if(_stat64(file, &buffer) == 0) { + return ((buffer.st_mode & S_IFDIR) != 0) ? path_type::directory : path_type::file; + } +#else + struct stat buffer; + if(stat(file, &buffer) == 0) { + return ((buffer.st_mode & S_IFDIR) != 0) ? path_type::directory : path_type::file; + } +#endif + return path_type::nonexistent; +} +#endif + +CLI11_INLINE ExistingFileValidator::ExistingFileValidator() : Validator("FILE") { + func_ = [](std::string &filename) { + auto path_result = check_path(filename.c_str()); + if(path_result == path_type::nonexistent) { + return "File does not exist: " + filename; + } + if(path_result == path_type::directory) { + return "File is actually a directory: " + filename; + } + return std::string(); + }; +} + +CLI11_INLINE ExistingDirectoryValidator::ExistingDirectoryValidator() : Validator("DIR") { + func_ = [](std::string &filename) { + auto path_result = check_path(filename.c_str()); + if(path_result == path_type::nonexistent) { + return "Directory does not exist: " + filename; + } + if(path_result == path_type::file) { + return "Directory is actually a file: " + filename; + } + return std::string(); + }; +} + +CLI11_INLINE ExistingPathValidator::ExistingPathValidator() : Validator("PATH(existing)") { + func_ = [](std::string &filename) { + auto path_result = check_path(filename.c_str()); + if(path_result == path_type::nonexistent) { + return "Path does not exist: " + filename; + } + return std::string(); + }; +} + +CLI11_INLINE NonexistentPathValidator::NonexistentPathValidator() : Validator("PATH(non-existing)") { + func_ = [](std::string &filename) { + auto path_result = check_path(filename.c_str()); + if(path_result != path_type::nonexistent) { + return "Path already exists: " + filename; + } + return std::string(); + }; +} + +CLI11_INLINE IPV4Validator::IPV4Validator() : Validator("IPV4") { + func_ = [](std::string &ip_addr) { + auto result = CLI::detail::split(ip_addr, '.'); + if(result.size() != 4) { + return std::string("Invalid IPV4 address must have four parts (") + ip_addr + ')'; + } + int num = 0; + for(const auto &var : result) { + using CLI::detail::lexical_cast; + bool retval = lexical_cast(var, num); + if(!retval) { + return std::string("Failed parsing number (") + var + ')'; + } + if(num < 0 || num > 255) { + return std::string("Each IP number must be between 0 and 255 ") + var; + } + } + return std::string(); + }; +} + +} // namespace detail + +CLI11_INLINE FileOnDefaultPath::FileOnDefaultPath(std::string default_path, bool enableErrorReturn) + : Validator("FILE") { + func_ = [default_path, enableErrorReturn](std::string &filename) { + auto path_result = detail::check_path(filename.c_str()); + if(path_result == detail::path_type::nonexistent) { + std::string test_file_path = default_path; + if(default_path.back() != '/' && default_path.back() != '\\') { + // Add folder separator + test_file_path += '/'; + } + test_file_path.append(filename); + path_result = detail::check_path(test_file_path.c_str()); + if(path_result == detail::path_type::file) { + filename = test_file_path; + } else { + if(enableErrorReturn) { + return "File does not exist: " + filename; + } + } + } + return std::string{}; + }; +} + +CLI11_INLINE AsSizeValue::AsSizeValue(bool kb_is_1000) : AsNumberWithUnit(get_mapping(kb_is_1000)) { + if(kb_is_1000) { + description("SIZE [b, kb(=1000b), kib(=1024b), ...]"); + } else { + description("SIZE [b, kb(=1024b), ...]"); + } +} + +CLI11_INLINE std::map AsSizeValue::init_mapping(bool kb_is_1000) { + std::map m; + result_t k_factor = kb_is_1000 ? 1000 : 1024; + result_t ki_factor = 1024; + result_t k = 1; + result_t ki = 1; + m["b"] = 1; + for(std::string p : {"k", "m", "g", "t", "p", "e"}) { + k *= k_factor; + ki *= ki_factor; + m[p] = k; + m[p + "b"] = k; + m[p + "i"] = ki; + m[p + "ib"] = ki; + } + return m; +} + +CLI11_INLINE std::map AsSizeValue::get_mapping(bool kb_is_1000) { + if(kb_is_1000) { + static auto m = init_mapping(true); + return m; + } + static auto m = init_mapping(false); + return m; +} + +namespace detail { + +CLI11_INLINE std::pair split_program_name(std::string commandline) { + // try to determine the programName + std::pair vals; + trim(commandline); + auto esp = commandline.find_first_of(' ', 1); + while(detail::check_path(commandline.substr(0, esp).c_str()) != path_type::file) { + esp = commandline.find_first_of(' ', esp + 1); + if(esp == std::string::npos) { + // if we have reached the end and haven't found a valid file just assume the first argument is the + // program name + if(commandline[0] == '"' || commandline[0] == '\'' || commandline[0] == '`') { + bool embeddedQuote = false; + auto keyChar = commandline[0]; + auto end = commandline.find_first_of(keyChar, 1); + while((end != std::string::npos) && (commandline[end - 1] == '\\')) { // deal with escaped quotes + end = commandline.find_first_of(keyChar, end + 1); + embeddedQuote = true; + } + if(end != std::string::npos) { + vals.first = commandline.substr(1, end - 1); + esp = end + 1; + if(embeddedQuote) { + vals.first = find_and_replace(vals.first, std::string("\\") + keyChar, std::string(1, keyChar)); + } + } else { + esp = commandline.find_first_of(' ', 1); + } + } else { + esp = commandline.find_first_of(' ', 1); + } + + break; + } + } + if(vals.first.empty()) { + vals.first = commandline.substr(0, esp); + rtrim(vals.first); + } + + // strip the program name + vals.second = (esp < commandline.length() - 1) ? commandline.substr(esp + 1) : std::string{}; + ltrim(vals.second); + return vals; +} + +} // namespace detail +/// @} + + + + +class Option; +class App; + +/// This enum signifies the type of help requested +/// +/// This is passed in by App; all user classes must accept this as +/// the second argument. + +enum class AppFormatMode { + Normal, ///< The normal, detailed help + All, ///< A fully expanded help + Sub, ///< Used when printed as part of expanded subcommand +}; + +/// This is the minimum requirements to run a formatter. +/// +/// A user can subclass this is if they do not care at all +/// about the structure in CLI::Formatter. +class FormatterBase { + protected: + /// @name Options + ///@{ + + /// The width of the first column + std::size_t column_width_{30}; + + /// @brief The required help printout labels (user changeable) + /// Values are Needs, Excludes, etc. + std::map labels_{}; + + ///@} + /// @name Basic + ///@{ + + public: + FormatterBase() = default; + FormatterBase(const FormatterBase &) = default; + FormatterBase(FormatterBase &&) = default; + FormatterBase &operator=(const FormatterBase &) = default; + FormatterBase &operator=(FormatterBase &&) = default; + + /// Adding a destructor in this form to work around bug in GCC 4.7 + virtual ~FormatterBase() noexcept {} // NOLINT(modernize-use-equals-default) + + /// This is the key method that puts together help + virtual std::string make_help(const App *, std::string, AppFormatMode) const = 0; + + ///@} + /// @name Setters + ///@{ + + /// Set the "REQUIRED" label + void label(std::string key, std::string val) { labels_[key] = val; } + + /// Set the column width + void column_width(std::size_t val) { column_width_ = val; } + + ///@} + /// @name Getters + ///@{ + + /// Get the current value of a name (REQUIRED, etc.) + CLI11_NODISCARD std::string get_label(std::string key) const { + if(labels_.find(key) == labels_.end()) + return key; + return labels_.at(key); + } + + /// Get the current column width + CLI11_NODISCARD std::size_t get_column_width() const { return column_width_; } + + ///@} +}; + +/// This is a specialty override for lambda functions +class FormatterLambda final : public FormatterBase { + using funct_t = std::function; + + /// The lambda to hold and run + funct_t lambda_; + + public: + /// Create a FormatterLambda with a lambda function + explicit FormatterLambda(funct_t funct) : lambda_(std::move(funct)) {} + + /// Adding a destructor (mostly to make GCC 4.7 happy) + ~FormatterLambda() noexcept override {} // NOLINT(modernize-use-equals-default) + + /// This will simply call the lambda function + std::string make_help(const App *app, std::string name, AppFormatMode mode) const override { + return lambda_(app, name, mode); + } +}; + +/// This is the default Formatter for CLI11. It pretty prints help output, and is broken into quite a few +/// overridable methods, to be highly customizable with minimal effort. +class Formatter : public FormatterBase { + public: + Formatter() = default; + Formatter(const Formatter &) = default; + Formatter(Formatter &&) = default; + Formatter &operator=(const Formatter &) = default; + Formatter &operator=(Formatter &&) = default; + + /// @name Overridables + ///@{ + + /// This prints out a group of options with title + /// + CLI11_NODISCARD virtual std::string + make_group(std::string group, bool is_positional, std::vector opts) const; + + /// This prints out just the positionals "group" + virtual std::string make_positionals(const App *app) const; + + /// This prints out all the groups of options + std::string make_groups(const App *app, AppFormatMode mode) const; + + /// This prints out all the subcommands + virtual std::string make_subcommands(const App *app, AppFormatMode mode) const; + + /// This prints out a subcommand + virtual std::string make_subcommand(const App *sub) const; + + /// This prints out a subcommand in help-all + virtual std::string make_expanded(const App *sub) const; + + /// This prints out all the groups of options + virtual std::string make_footer(const App *app) const; + + /// This displays the description line + virtual std::string make_description(const App *app) const; + + /// This displays the usage line + virtual std::string make_usage(const App *app, std::string name) const; + + /// This puts everything together + std::string make_help(const App * /*app*/, std::string, AppFormatMode) const override; + + ///@} + /// @name Options + ///@{ + + /// This prints out an option help line, either positional or optional form + virtual std::string make_option(const Option *opt, bool is_positional) const { + std::stringstream out; + detail::format_help( + out, make_option_name(opt, is_positional) + make_option_opts(opt), make_option_desc(opt), column_width_); + return out.str(); + } + + /// @brief This is the name part of an option, Default: left column + virtual std::string make_option_name(const Option *, bool) const; + + /// @brief This is the options part of the name, Default: combined into left column + virtual std::string make_option_opts(const Option *) const; + + /// @brief This is the description. Default: Right column, on new line if left column too large + virtual std::string make_option_desc(const Option *) const; + + /// @brief This is used to print the name on the USAGE line + virtual std::string make_option_usage(const Option *opt) const; + + ///@} +}; + + + + +using results_t = std::vector; +/// callback function definition +using callback_t = std::function; + +class Option; +class App; + +using Option_p = std::unique_ptr -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 300 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and -# SVG. The default value is HTML-CSS, which is slower, but has the best -# compatibility. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. -# There are two flavours of web server based search depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. -# See the manual for details. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain -# the search results. Doxygen ships with an example indexer (doxyindexer) and -# search engine (doxysearch.cgi) which are based on the open source search engine -# library Xapian. See the manual for configuration details. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will returned the search results when EXTERNAL_SEARCH is enabled. -# Doxygen ships with an example search engine (doxysearch) which is based on -# the open source search engine library Xapian. See the manual for configuration -# details. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id -# of to a relative location where the documentation can be found. -# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = GLFWAPI= \ - GLFW_EXPOSE_NATIVE_WIN32 \ - GLFW_EXPOSE_NATIVE_WGL \ - GLFW_EXPOSE_NATIVE_X11 \ - GLFW_EXPOSE_NATIVE_WAYLAND \ - GLFW_EXPOSE_NATIVE_GLX \ - GLFW_EXPOSE_NATIVE_COCOA \ - GLFW_EXPOSE_NATIVE_NSGL \ - GLFW_EXPOSE_NATIVE_EGL \ - GLFW_EXPOSE_NATIVE_OSMESA \ - VK_VERSION_1_0 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# manageable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50% before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/third_party/penumbra/vendor/glfw/docs/DoxygenLayout.xml b/third_party/penumbra/vendor/glfw/docs/DoxygenLayout.xml deleted file mode 100644 index ab971721860..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/DoxygenLayout.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/third_party/penumbra/vendor/glfw/docs/SUPPORT.md b/third_party/penumbra/vendor/glfw/docs/SUPPORT.md deleted file mode 100644 index 604957d0660..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/SUPPORT.md +++ /dev/null @@ -1,14 +0,0 @@ -# Support resources - -See the [latest documentation](http://www.glfw.org/docs/latest/) for tutorials, -guides and the API reference. - -If you have questions about using GLFW, we have a -[forum](https://discourse.glfw.org/), and the `#glfw` IRC channel on -[Freenode](http://freenode.net/). - -Bugs are reported to our [issue tracker](https://github.com/glfw/glfw/issues). -Please check the [contribution -guide](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md) for -information on what to include when reporting a bug. - diff --git a/third_party/penumbra/vendor/glfw/docs/build.dox b/third_party/penumbra/vendor/glfw/docs/build.dox deleted file mode 100644 index 5aeb136abca..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/build.dox +++ /dev/null @@ -1,342 +0,0 @@ -/*! - -@page build_guide Building applications - -@tableofcontents - -This is about compiling and linking applications that use GLFW. For information on -how to write such applications, start with the -[introductory tutorial](@ref quick_guide). For information on how to compile -the GLFW library itself, see @ref compile_guide. - -This is not a tutorial on compilation or linking. It assumes basic -understanding of how to compile and link a C program as well as how to use the -specific compiler of your chosen development environment. The compilation -and linking process should be explained in your C programming material and in -the documentation for your development environment. - - -@section build_include Including the GLFW header file - -You should include the GLFW header in the source files where you use OpenGL or -GLFW. - -@code -#include -@endcode - -This header declares the GLFW API and by default also includes the OpenGL header -from your development environment. See below for how to control this. - -The GLFW header also defines any platform-specific macros needed by your OpenGL -header, so it can be included without needing any window system headers. - -For example, under Windows you are normally required to include `windows.h` -before the OpenGL header, which would bring in the whole Win32 API. The GLFW -header duplicates the small number of macros needed. - -It does this only when needed, so if `windows.h` _is_ included, the GLFW header -does not try to redefine those symbols. The reverse is not true, i.e. -`windows.h` cannot cope if any of its symbols have already been defined. - -In other words: - - - Do _not_ include the OpenGL headers yourself, as GLFW does this for you - - Do _not_ include `windows.h` or other platform-specific headers unless you - plan on using those APIs directly - - If you _do_ need to include such headers, do it _before_ including - the GLFW header and it will handle this - -If you are using an OpenGL extension loading library such as -[glad](https://github.com/Dav1dde/glad), the extension loader header should -be included _before_ the GLFW one. - -@code -#include -#include -@endcode - -Alternatively the @ref GLFW_INCLUDE_NONE macro (described below) can be used to -prevent the GLFW header from including the OpenGL header. - -@code -#define GLFW_INCLUDE_NONE -#include -#include -@endcode - - -@subsection build_macros GLFW header option macros - -These macros may be defined before the inclusion of the GLFW header and affect -its behavior. - -@anchor GLFW_DLL -__GLFW_DLL__ is required on Windows when using the GLFW DLL, to tell the -compiler that the GLFW functions are defined in a DLL. - -The following macros control which OpenGL or OpenGL ES API header is included. -Only one of these may be defined at a time. - -@note GLFW does not provide any of the API headers mentioned below. They are -provided by your development environment or your OpenGL, OpenGL ES or Vulkan -SDK, and most of them can be downloaded from the -[Khronos Registry](https://www.khronos.org/registry/). - -@anchor GLFW_INCLUDE_GLCOREARB -__GLFW_INCLUDE_GLCOREARB__ makes the GLFW header include the modern -`GL/glcorearb.h` header (`OpenGL/gl3.h` on macOS) instead of the regular OpenGL -header. - -@anchor GLFW_INCLUDE_ES1 -__GLFW_INCLUDE_ES1__ makes the GLFW header include the OpenGL ES 1.x `GLES/gl.h` -header instead of the regular OpenGL header. - -@anchor GLFW_INCLUDE_ES2 -__GLFW_INCLUDE_ES2__ makes the GLFW header include the OpenGL ES 2.0 -`GLES2/gl2.h` header instead of the regular OpenGL header. - -@anchor GLFW_INCLUDE_ES3 -__GLFW_INCLUDE_ES3__ makes the GLFW header include the OpenGL ES 3.0 -`GLES3/gl3.h` header instead of the regular OpenGL header. - -@anchor GLFW_INCLUDE_ES31 -__GLFW_INCLUDE_ES31__ makes the GLFW header include the OpenGL ES 3.1 -`GLES3/gl31.h` header instead of the regular OpenGL header. - -@anchor GLFW_INCLUDE_ES32 -__GLFW_INCLUDE_ES31__ makes the GLFW header include the OpenGL ES 3.2 -`GLES3/gl32.h` header instead of the regular OpenGL header. - -@anchor GLFW_INCLUDE_NONE -__GLFW_INCLUDE_NONE__ makes the GLFW header not include any OpenGL or OpenGL ES -API header. This is useful in combination with an extension loading library. - -If none of the above inclusion macros are defined, the standard OpenGL `GL/gl.h` -header (`OpenGL/gl.h` on macOS) is included. - -The following macros control the inclusion of additional API headers. Any -number of these may be defined simultaneously, and/or together with one of the -above macros. - -@anchor GLFW_INCLUDE_VULKAN -__GLFW_INCLUDE_VULKAN__ makes the GLFW header include the Vulkan -`vulkan/vulkan.h` header in addition to any selected OpenGL or OpenGL ES header. - -@anchor GLFW_INCLUDE_GLEXT -__GLFW_INCLUDE_GLEXT__ makes the GLFW header include the appropriate extension -header for the OpenGL or OpenGL ES header selected above after and in addition -to that header. - -@anchor GLFW_INCLUDE_GLU -__GLFW_INCLUDE_GLU__ makes the header include the GLU header in addition to the -header selected above. This should only be used with the standard OpenGL header -and only for compatibility with legacy code. GLU has been deprecated and should -not be used in new code. - -@note None of these macros may be defined during the compilation of GLFW itself. -If your build includes GLFW and you define any these in your build files, make -sure they are not applied to the GLFW sources. - - -@section build_link Link with the right libraries - -GLFW is essentially a wrapper of various platform-specific APIs and therefore -needs to link against many different system libraries. If you are using GLFW as -a shared library / dynamic library / DLL then it takes care of these links. -However, if you are using GLFW as a static library then your executable will -need to link against these libraries. - -On Windows and macOS, the list of system libraries is static and can be -hard-coded into your build environment. See the section for your development -environment below. On Linux and other Unix-like operating systems, the list -varies but can be retrieved in various ways as described below. - -A good general introduction to linking is -[Beginner's Guide to Linkers](https://www.lurklurk.org/linkers/linkers.html) by -David Drysdale. - - -@subsection build_link_win32 With MinGW or Visual C++ on Windows - -The static version of the GLFW library is named `glfw3`. When using this -version, it is also necessary to link with some libraries that GLFW uses. - -When using MinGW to link an application with the static version of GLFW, you -must also explicitly link with `gdi32`. Other toolchains including MinGW-w64 -include it in the set of default libraries along with other dependencies like -`user32` and `kernel32`. - -The link library for the GLFW DLL is named `glfw3dll`. When compiling an -application that uses the DLL version of GLFW, you need to define the @ref -GLFW_DLL macro _before_ any inclusion of the GLFW header. This can be done -either with a compiler switch or by defining it in your source code. - - -@subsection build_link_cmake_source With CMake and GLFW source - -This section is about using CMake to compile and link GLFW along with your -application. If you want to use an installed binary instead, see @ref -build_link_cmake_package. - -With a few changes to your `CMakeLists.txt` you can have the GLFW source tree -built along with your application. - -When including GLFW as part of your build, you probably don't want to build the -GLFW tests, examples and documentation. To disable these, set the corresponding -cache variables before adding the GLFW source tree. - -@code -set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) -set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) -set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -@endcode - -Add the root directory of the GLFW source tree to your project. This will add -the `glfw` target to your project. - -@code{.cmake} -add_subdirectory(path/to/glfw) -@endcode - -Once GLFW has been added, link your application against the `glfw` target. -This adds the GLFW library and its link-time dependencies as it is currently -configured, the include directory for the GLFW header and, when applicable, the -@ref GLFW_DLL macro. - -@code{.cmake} -target_link_libraries(myapp glfw) -@endcode - -Note that the `glfw` target does not depend on OpenGL, as GLFW loads any OpenGL, -OpenGL ES or Vulkan libraries it needs at runtime. If your application calls -OpenGL directly, instead of using a modern -[extension loader library](@ref context_glext_auto), use the OpenGL CMake -package. - -@code{.cmake} -find_package(OpenGL REQUIRED) -@endcode - -If OpenGL is found, the `OpenGL::GL` target is added to your project, containing -library and include directory paths. Link against this like above. - -@code{.cmake} -target_link_libraries(myapp OpenGL::GL) -@endcode - - -@subsection build_link_cmake_package With CMake and installed GLFW binaries - -This section is about using CMake to link GLFW after it has been built and -installed. If you want to build it along with your application instead, see -@ref build_link_cmake_source. - -With a few changes to your `CMakeLists.txt` you can locate the package and -target files generated when GLFW is installed. - -@code{.cmake} -find_package(glfw3 3.3 REQUIRED) -@endcode - -Once GLFW has been added to the project, link against it with the `glfw` target. -This adds the GLFW library and its link-time dependencies, the include directory -for the GLFW header and, when applicable, the @ref GLFW_DLL macro. - -@code{.cmake} -target_link_libraries(myapp glfw) -@endcode - -Note that the `glfw` target does not depend on OpenGL, as GLFW loads any OpenGL, -OpenGL ES or Vulkan libraries it needs at runtime. If your application calls -OpenGL directly, instead of using a modern -[extension loader library](@ref context_glext_auto), use the OpenGL CMake -package. - -@code{.cmake} -find_package(OpenGL REQUIRED) -@endcode - -If OpenGL is found, the `OpenGL::GL` target is added to your project, containing -library and include directory paths. Link against this like above. - -@code{.cmake} -target_link_libraries(myapp OpenGL::GL) -@endcode - - -@subsection build_link_pkgconfig With makefiles and pkg-config on Unix - -GLFW supports [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/), -and the `glfw3.pc` pkg-config file is generated when the GLFW library is built -and is installed along with it. A pkg-config file describes all necessary -compile-time and link-time flags and dependencies needed to use a library. When -they are updated or if they differ between systems, you will get the correct -ones automatically. - -A typical compile and link command-line when using the static version of the -GLFW library may look like this: - -@code{.sh} -cc $(pkg-config --cflags glfw3) -o myprog myprog.c $(pkg-config --static --libs glfw3) -@endcode - -If you are using the shared version of the GLFW library, omit the `--static` -flag. - -@code{.sh} -cc $(pkg-config --cflags glfw3) -o myprog myprog.c $(pkg-config --libs glfw3) -@endcode - -You can also use the `glfw3.pc` file without installing it first, by using the -`PKG_CONFIG_PATH` environment variable. - -@code{.sh} -env PKG_CONFIG_PATH=path/to/glfw/src cc $(pkg-config --cflags glfw3) -o myprog myprog.c $(pkg-config --libs glfw3) -@endcode - -The dependencies do not include OpenGL, as GLFW loads any OpenGL, OpenGL ES or -Vulkan libraries it needs at runtime. If your application calls OpenGL -directly, instead of using a modern -[extension loader library](@ref context_glext_auto), you should add the `gl` -pkg-config package. - -@code{.sh} -cc $(pkg-config --cflags glfw3 gl) -o myprog myprog.c $(pkg-config --libs glfw3 gl) -@endcode - - -@subsection build_link_xcode With Xcode on macOS - -If you are using the dynamic library version of GLFW, add it to the project -dependencies. - -If you are using the static library version of GLFW, add it and the Cocoa, -OpenGL and IOKit frameworks to the project as dependencies. They can all be -found in `/System/Library/Frameworks`. - - -@subsection build_link_osx With command-line on macOS - -It is recommended that you use [pkg-config](@ref build_link_pkgconfig) when -building from the command line on macOS. That way you will get any new -dependencies added automatically. If you still wish to build manually, you need -to add the required frameworks and libraries to your command-line yourself using -the `-l` and `-framework` switches. - -If you are using the dynamic GLFW library, which is named `libglfw.3.dylib`, do: - -@code{.sh} -cc -o myprog myprog.c -lglfw -framework Cocoa -framework OpenGL -framework IOKit -@endcode - -If you are using the static library, named `libglfw3.a`, substitute `-lglfw3` -for `-lglfw`. - -Note that you do not add the `.framework` extension to a framework when linking -against it from the command-line. - -@note Your machine may have `libGL.*.dylib` style OpenGL library, but that is -for the X Window System and will not work with the macOS native version of GLFW. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/compat.dox b/third_party/penumbra/vendor/glfw/docs/compat.dox deleted file mode 100644 index fea7ab180b5..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/compat.dox +++ /dev/null @@ -1,285 +0,0 @@ -/*! - -@page compat_guide Standards conformance - -@tableofcontents - -This guide describes the various API extensions used by this version of GLFW. -It lists what are essentially implementation details, but which are nonetheless -vital knowledge for developers intending to deploy their applications on a wide -range of machines. - -The information in this guide is not a part of GLFW API, but merely -preconditions for some parts of the library to function on a given machine. Any -part of this information may change in future versions of GLFW and that will not -be considered a breaking API change. - - -@section compat_x11 X11 extensions, protocols and IPC standards - -As GLFW uses Xlib directly, without any intervening toolkit -library, it has sole responsibility for interacting well with the many and -varied window managers in use on Unix-like systems. In order for applications -and window managers to work well together, a number of standards and -conventions have been developed that regulate behavior outside the scope of the -X11 API; most importantly the -[Inter-Client Communication Conventions Manual](https://www.tronche.com/gui/x/icccm/) -(ICCCM) and -[Extended Window Manager Hints](https://standards.freedesktop.org/wm-spec/wm-spec-latest.html) -(EWMH) standards. - -GLFW uses the `_MOTIF_WM_HINTS` window property to support borderless windows. -If the running window manager does not support this property, the -`GLFW_DECORATED` hint will have no effect. - -GLFW uses the ICCCM `WM_DELETE_WINDOW` protocol to intercept the user -attempting to close the GLFW window. If the running window manager does not -support this protocol, the close callback will never be called. - -GLFW uses the EWMH `_NET_WM_PING` protocol, allowing the window manager notify -the user when the application has stopped responding, i.e. when it has ceased to -process events. If the running window manager does not support this protocol, -the user will not be notified if the application locks up. - -GLFW uses the EWMH `_NET_WM_STATE_FULLSCREEN` window state to tell the window -manager to make the GLFW window full screen. If the running window manager does -not support this state, full screen windows may not work properly. GLFW has -a fallback code path in case this state is unavailable, but every window manager -behaves slightly differently in this regard. - -GLFW uses the EWMH `_NET_WM_BYPASS_COMPOSITOR` window property to tell a -compositing window manager to un-redirect full screen GLFW windows. If the -running window manager uses compositing but does not support this property then -additional copying may be performed for each buffer swap of full screen windows. - -GLFW uses the -[clipboard manager protocol](https://www.freedesktop.org/wiki/ClipboardManager/) -to push a clipboard string (i.e. selection) owned by a GLFW window about to be -destroyed to the clipboard manager. If there is no running clipboard manager, -the clipboard string will be unavailable once the window has been destroyed. - -GLFW uses the -[X drag-and-drop protocol](https://www.freedesktop.org/wiki/Specifications/XDND/) -to provide file drop events. If the application originating the drag does not -support this protocol, drag and drop will not work. - -GLFW uses the XRandR 1.3 extension to provide multi-monitor support. If the -running X server does not support this version of this extension, multi-monitor -support will not function and only a single, desktop-spanning monitor will be -reported. - -GLFW uses the XRandR 1.3 and Xf86vidmode extensions to provide gamma ramp -support. If the running X server does not support either or both of these -extensions, gamma ramp support will not function. - -GLFW uses the Xkb extension and detectable auto-repeat to provide keyboard -input. If the running X server does not support this extension, a non-Xkb -fallback path is used. - -GLFW uses the XInput2 extension to provide raw, non-accelerated mouse motion -when the cursor is disabled. If the running X server does not support this -extension, regular accelerated mouse motion will be used. - -GLFW uses both the XRender extension and the compositing manager to support -transparent window framebuffers. If the running X server does not support this -extension or there is no running compositing manager, the -`GLFW_TRANSPARENT_FRAMEBUFFER` framebuffer hint will have no effect. - - -@section compat_wayland Wayland protocols and IPC standards - -As GLFW uses libwayland directly, without any intervening toolkit library, it -has sole responsibility for interacting well with every compositor in use on -Unix-like systems. Most of the features are provided by the core protocol, -while cursor support is provided by the libwayland-cursor helper library, EGL -integration by libwayland-egl, and keyboard handling by -[libxkbcommon](https://xkbcommon.org/). In addition, GLFW uses some protocols -from wayland-protocols to provide additional features if the compositor -supports them. - -GLFW uses xkbcommon 0.5.0 to provide compose key support. When it has been -built against an older xkbcommon, the compose key will be disabled even if it -has been configured in the compositor. - -GLFW uses the [xdg-shell -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/stable/xdg-shell/xdg-shell.xml) -to provide better window management. This protocol is part of -wayland-protocols 1.12, and mandatory at build time. If the running compositor -does not support this protocol, the older [wl_shell -interface](https://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml#n972) -will be used instead. This will result in a worse integration with the -desktop, especially on tiling compositors. - -GLFW uses the [relative pointer -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable/relative-pointer/relative-pointer-unstable-v1.xml) -alongside the [pointer constraints -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml) -to implement disabled cursor. These two protocols are part of -wayland-protocols 1.1, and mandatory at build time. If the running compositor -does not support both of these protocols, disabling the cursor will have no -effect. - -GLFW uses the [idle inhibit -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml) -to prohibit the screensaver from starting. This protocol is part of -wayland-protocols 1.6, and mandatory at build time. If the running compositor -does not support this protocol, the screensaver may start even for full screen -windows. - -GLFW uses the [xdg-decoration -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml) -to request decorations to be drawn around its windows. This protocol is part -of wayland-protocols 1.15, and mandatory at build time. If the running -compositor does not support this protocol, a very simple frame will be drawn by -GLFW itself, using the [viewporter -protocol](https://cgit.freedesktop.org/wayland/wayland-protocols/tree/stable/viewporter/viewporter.xml) -alongside -[subsurfaces](https://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml#n2598). -This protocol is part of wayland-protocols 1.4, and mandatory at build time. -If the running compositor does not support this protocol either, no decorations -will be drawn around windows. - - -@section compat_glx GLX extensions - -The GLX API is the default API used to create OpenGL contexts on Unix-like -systems using the X Window System. - -GLFW uses the GLX 1.3 `GLXFBConfig` functions to enumerate and select framebuffer pixel -formats. If GLX 1.3 is not supported, @ref glfwInit will fail. - -GLFW uses the `GLX_MESA_swap_control,` `GLX_EXT_swap_control` and -`GLX_SGI_swap_control` extensions to provide vertical retrace synchronization -(or _vsync_), in that order of preference. Where none of these extension are -available, calling @ref glfwSwapInterval will have no effect. - -GLFW uses the `GLX_ARB_multisample` extension to create contexts with -multisampling anti-aliasing. Where this extension is unavailable, the -`GLFW_SAMPLES` hint will have no effect. - -GLFW uses the `GLX_ARB_create_context` extension when available, even when -creating OpenGL contexts of version 2.1 and below. Where this extension is -unavailable, the `GLFW_CONTEXT_VERSION_MAJOR` and `GLFW_CONTEXT_VERSION_MINOR` -hints will only be partially supported, the `GLFW_OPENGL_DEBUG_CONTEXT` hint -will have no effect, and setting the `GLFW_OPENGL_PROFILE` or -`GLFW_OPENGL_FORWARD_COMPAT` hints to `GLFW_TRUE` will cause @ref -glfwCreateWindow to fail. - -GLFW uses the `GLX_ARB_create_context_profile` extension to provide support for -context profiles. Where this extension is unavailable, setting the -`GLFW_OPENGL_PROFILE` hint to anything but `GLFW_OPENGL_ANY_PROFILE`, or setting -`GLFW_CLIENT_API` to anything but `GLFW_OPENGL_API` or `GLFW_NO_API` will cause -@ref glfwCreateWindow to fail. - -GLFW uses the `GLX_ARB_context_flush_control` extension to provide control over -whether a context is flushed when it is released (made non-current). Where this -extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no -effect and the context will always be flushed when released. - -GLFW uses the `GLX_ARB_framebuffer_sRGB` and `GLX_EXT_framebuffer_sRGB` -extensions to provide support for sRGB framebuffers. Where both of these -extensions are unavailable, the `GLFW_SRGB_CAPABLE` hint will have no effect. - - -@section compat_wgl WGL extensions - -The WGL API is used to create OpenGL contexts on Microsoft Windows and other -implementations of the Win32 API, such as Wine. - -GLFW uses either the `WGL_EXT_extension_string` or the -`WGL_ARB_extension_string` extension to check for the presence of all other WGL -extensions listed below. If both are available, the EXT one is preferred. If -neither is available, no other extensions are used and many GLFW features -related to context creation will have no effect or cause errors when used. - -GLFW uses the `WGL_EXT_swap_control` extension to provide vertical retrace -synchronization (or _vsync_). Where this extension is unavailable, calling @ref -glfwSwapInterval will have no effect. - -GLFW uses the `WGL_ARB_pixel_format` and `WGL_ARB_multisample` extensions to -create contexts with multisampling anti-aliasing. Where these extensions are -unavailable, the `GLFW_SAMPLES` hint will have no effect. - -GLFW uses the `WGL_ARB_create_context` extension when available, even when -creating OpenGL contexts of version 2.1 and below. Where this extension is -unavailable, the `GLFW_CONTEXT_VERSION_MAJOR` and `GLFW_CONTEXT_VERSION_MINOR` -hints will only be partially supported, the `GLFW_OPENGL_DEBUG_CONTEXT` hint -will have no effect, and setting the `GLFW_OPENGL_PROFILE` or -`GLFW_OPENGL_FORWARD_COMPAT` hints to `GLFW_TRUE` will cause @ref -glfwCreateWindow to fail. - -GLFW uses the `WGL_ARB_create_context_profile` extension to provide support for -context profiles. Where this extension is unavailable, setting the -`GLFW_OPENGL_PROFILE` hint to anything but `GLFW_OPENGL_ANY_PROFILE` will cause -@ref glfwCreateWindow to fail. - -GLFW uses the `WGL_ARB_context_flush_control` extension to provide control over -whether a context is flushed when it is released (made non-current). Where this -extension is unavailable, the `GLFW_CONTEXT_RELEASE_BEHAVIOR` hint will have no -effect and the context will always be flushed when released. - -GLFW uses the `WGL_ARB_framebuffer_sRGB` and `WGL_EXT_framebuffer_sRGB` -extensions to provide support for sRGB framebuffers. Where both of these -extension are unavailable, the `GLFW_SRGB_CAPABLE` hint will have no effect. - - -@section compat_osx OpenGL on macOS - -Support for OpenGL 3.2 and above was introduced with OS X 10.7 and even then -only forward-compatible, core profile contexts are supported. Support for -OpenGL 4.1 was introduced with OS X 10.9, also limited to forward-compatible, -core profile contexts. There is also still no mechanism for requesting debug -contexts or no-error contexts. Versions of Mac OS X earlier than 10.7 support -at most OpenGL version 2.1. - -Because of this, on OS X 10.7 and later, the `GLFW_CONTEXT_VERSION_MAJOR` and -`GLFW_CONTEXT_VERSION_MINOR` hints will cause @ref glfwCreateWindow to fail if -given version 3.0 or 3.1. The `GLFW_OPENGL_FORWARD_COMPAT` hint must be set to -`GLFW_TRUE` and the `GLFW_OPENGL_PROFILE` hint must be set to -`GLFW_OPENGL_CORE_PROFILE` when creating OpenGL 3.2 and later contexts. The -`GLFW_OPENGL_DEBUG_CONTEXT` and `GLFW_CONTEXT_NO_ERROR` hints are ignored. - -Also, on Mac OS X 10.6 and below, the `GLFW_CONTEXT_VERSION_MAJOR` and -`GLFW_CONTEXT_VERSION_MINOR` hints will fail if given a version above 2.1, -setting the `GLFW_OPENGL_PROFILE` or `GLFW_OPENGL_FORWARD_COMPAT` hints to -a non-default value will cause @ref glfwCreateWindow to fail and the -`GLFW_OPENGL_DEBUG_CONTEXT` hint is ignored. - - -@section compat_vulkan Vulkan loader and API - -By default, GLFW uses the standard system-wide Vulkan loader to access the -Vulkan API on all platforms except macOS. This is installed by both graphics -drivers and Vulkan SDKs. If either the loader or at least one minimally -functional ICD is missing, @ref glfwVulkanSupported will return `GLFW_FALSE` and -all other Vulkan-related functions will fail with an @ref GLFW_API_UNAVAILABLE -error. - - -@section compat_wsi Vulkan WSI extensions - -The Vulkan WSI extensions are used to create Vulkan surfaces for GLFW windows on -all supported platforms. - -GLFW uses the `VK_KHR_surface` and `VK_KHR_win32_surface` extensions to create -surfaces on Microsoft Windows. If any of these extensions are not available, -@ref glfwGetRequiredInstanceExtensions will return an empty list and window -surface creation will fail. - -GLFW uses the `VK_KHR_surface` and either the `VK_MVK_macos_surface` or -`VK_EXT_metal_surface` extensions to create surfaces on macOS. If any of these -extensions are not available, @ref glfwGetRequiredInstanceExtensions will -return an empty list and window surface creation will fail. - -GLFW uses the `VK_KHR_surface` and either the `VK_KHR_xlib_surface` or -`VK_KHR_xcb_surface` extensions to create surfaces on X11. If `VK_KHR_surface` -or both `VK_KHR_xlib_surface` and `VK_KHR_xcb_surface` are not available, @ref -glfwGetRequiredInstanceExtensions will return an empty list and window surface -creation will fail. - -GLFW uses the `VK_KHR_surface` and `VK_KHR_wayland_surface` extensions to create -surfaces on Wayland. If any of these extensions are not available, @ref -glfwGetRequiredInstanceExtensions will return an empty list and window surface -creation will fail. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/compile.dox b/third_party/penumbra/vendor/glfw/docs/compile.dox deleted file mode 100644 index 8a4fb583b4a..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/compile.dox +++ /dev/null @@ -1,290 +0,0 @@ -/*! - -@page compile_guide Compiling GLFW - -@tableofcontents - -This is about compiling the GLFW library itself. For information on how to -build applications that use GLFW, see @ref build_guide. - - -@section compile_cmake Using CMake - -GLFW uses [CMake](https://cmake.org/) to generate project files or makefiles -for a particular development environment. If you are on a Unix-like system such -as Linux or FreeBSD or have a package system like Fink, MacPorts, Cygwin or -Homebrew, you can install its CMake package. If not, you can download -installers for Windows and macOS from the -[CMake website](https://cmake.org/). - -@note CMake only generates project files or makefiles. It does not compile the -actual GLFW library. To compile GLFW, first generate these files for your -chosen development environment and then use them to compile the actual GLFW -library. - - -@subsection compile_deps Dependencies - -Once you have installed CMake, make sure that all other dependencies are -available. On some platforms, GLFW needs a few additional packages to be -installed. See the section for your chosen platform and development environment -below. - - -@subsubsection compile_deps_msvc Dependencies for Visual C++ on Windows - -The Windows SDK bundled with Visual C++ already contains all the necessary -headers, link libraries and tools except for CMake. Move on to @ref -compile_generate. - - -@subsubsection compile_deps_mingw Dependencies for MinGW or MinGW-w64 on Windows - -Both the MinGW and the MinGW-w64 packages already contain all the necessary -headers, link libraries and tools except for CMake. Move on to @ref -compile_generate. - - -@subsubsection compile_deps_mingw_cross Dependencies for MinGW or MinGW-w64 cross-compilation - -Both Cygwin and many Linux distributions have MinGW or MinGW-w64 packages. For -example, Cygwin has the `mingw64-i686-gcc` and `mingw64-x86_64-gcc` packages -for 32- and 64-bit version of MinGW-w64, while Debian GNU/Linux and derivatives -like Ubuntu have the `mingw-w64` package for both. - -GLFW has CMake toolchain files in the `CMake/` directory that set up -cross-compilation of Windows binaries. To use these files you add an option -when running `cmake` to generate the project files or makefiles: - -@code{.sh} -cmake -DCMAKE_TOOLCHAIN_FILE= . -@endcode - -The exact toolchain file to use depends on the prefix used by the MinGW or -MinGW-w64 binaries on your system. You can usually see this in the /usr -directory. For example, both the Debian/Ubuntu and Cygwin MinGW-w64 packages -have `/usr/x86_64-w64-mingw32` for the 64-bit compilers, so the correct -invocation would be: - -@code{.sh} -cmake -DCMAKE_TOOLCHAIN_FILE=CMake/x86_64-w64-mingw32.cmake . -@endcode - -For more details see the article -[CMake Cross Compiling](https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling) on -the CMake wiki. - -Once you have this set up, move on to @ref compile_generate. - - -@subsubsection compile_deps_xcode Dependencies for Xcode on macOS - -Xcode comes with all necessary tools except for CMake. The required headers -and libraries are included in the core macOS frameworks. Xcode can be -downloaded from the Mac App Store or from the ADC Member Center. - -Once you have Xcode installed, move on to @ref compile_generate. - - -@subsubsection compile_deps_x11 Dependencies for Linux and X11 - -To compile GLFW for X11, you need to have the X11 packages installed, as well as -the basic development tools like GCC and make. For example, on Ubuntu and other -distributions based on Debian GNU/Linux, you need to install the `xorg-dev` -package, which pulls in all X.org header packages. - -Once you have installed the necessary packages, move on to @ref -compile_generate. - - -@subsubsection compile_deps_wayland Dependencies for Linux and Wayland - -To compile GLFW for Wayland, you need to have the Wayland packages installed, -as well as the basic development tools like GCC and make. For example, on -Ubuntu and other distributions based on Debian GNU/Linux, you need to install -the `libwayland-dev` package, which contains all Wayland headers and pulls in -wayland-scanner, as well as the `wayland-protocols` and `extra-cmake-modules` -packages. - -Once you have installed the necessary packages, move on to @ref -compile_generate. - - -@subsection compile_deps_osmesa Dependencies for Linux and OSMesa - -To compile GLFW for OSMesa, you need to install the OSMesa library and header -packages. For example, on Ubuntu and other distributions based on Debian -GNU/Linux, you need to install the `libosmesa6-dev` package. The OSMesa library -is required at runtime for context creation and is loaded on demand. - -Once you have installed the necessary packages, move on to @ref -compile_generate. - - -@subsection compile_generate Generating build files with CMake - -Once you have all necessary dependencies it is time to generate the project -files or makefiles for your development environment. CMake needs to know two -paths for this: the path to the _root_ directory of the GLFW source tree (i.e. -_not_ the `src` subdirectory) and the target path for the generated files and -compiled binaries. If these are the same, it is called an in-tree build, -otherwise it is called an out-of-tree build. - -One of several advantages of out-of-tree builds is that you can generate files -and compile for different development environments using a single source tree. - -@note This section is about generating the project files or makefiles necessary -to compile the GLFW library, not about compiling the actual library. - - -@subsubsection compile_generate_cli Generating files with the CMake command-line tool - -To make an in-tree build, enter the _root_ directory of the GLFW source tree -(i.e. _not_ the `src` subdirectory) and run CMake. The current directory is -used as target path, while the path provided as an argument is used to find the -source tree. - -@code{.sh} -cd -cmake . -@endcode - -To make an out-of-tree build, make a directory outside of the source tree, enter -it and run CMake with the (relative or absolute) path to the root of the source -tree as an argument. - -@code{.sh} -mkdir glfw-build -cd glfw-build -cmake -@endcode - -Once you have generated the project files or makefiles for your chosen -development environment, move on to @ref compile_compile. - - -@subsubsection compile_generate_gui Generating files with the CMake GUI - -If you are using the GUI version, choose the root of the GLFW source tree as -source location and the same directory or another, empty directory as the -destination for binaries. Choose _Configure_, change any options you wish to, -_Configure_ again to let the changes take effect and then _Generate_. - -Once you have generated the project files or makefiles for your chosen -development environment, move on to @ref compile_compile. - - -@subsection compile_compile Compiling the library - -You should now have all required dependencies and the project files or makefiles -necessary to compile GLFW. Go ahead and compile the actual GLFW library with -these files, as you would with any other project. - -Once the GLFW library is compiled, you are ready to build your applications, -linking it to the GLFW library. See @ref build_guide for more information. - - -@subsection compile_options CMake options - -The CMake files for GLFW provide a number of options, although not all are -available on all supported platforms. Some of these are de facto standards -among projects using CMake and so have no `GLFW_` prefix. - -If you are using the GUI version of CMake, these are listed and can be changed -from there. If you are using the command-line version of CMake you can use the -`ccmake` ncurses GUI to set options. Some package systems like Ubuntu and other -distributions based on Debian GNU/Linux have this tool in a separate -`cmake-curses-gui` package. - -Finally, if you don't want to use any GUI, you can set options from the `cmake` -command-line with the `-D` flag. - -@code{.sh} -cmake -DBUILD_SHARED_LIBS=ON . -@endcode - - -@subsubsection compile_options_shared Shared CMake options - -@anchor BUILD_SHARED_LIBS -__BUILD_SHARED_LIBS__ determines whether GLFW is built as a static -library or as a DLL / shared library / dynamic library. - -@anchor GLFW_BUILD_EXAMPLES -__GLFW_BUILD_EXAMPLES__ determines whether the GLFW examples are built -along with the library. - -@anchor GLFW_BUILD_TESTS -__GLFW_BUILD_TESTS__ determines whether the GLFW test programs are -built along with the library. - -@anchor GLFW_BUILD_DOCS -__GLFW_BUILD_DOCS__ determines whether the GLFW documentation is built along -with the library. - -@anchor GLFW_VULKAN_STATIC -__GLFW_VULKAN_STATIC__ determines whether to use the Vulkan loader linked -directly with the application. - - -@subsubsection compile_options_win32 Windows specific CMake options - -@anchor USE_MSVC_RUNTIME_LIBRARY_DLL -__USE_MSVC_RUNTIME_LIBRARY_DLL__ determines whether to use the DLL version or the -static library version of the Visual C++ runtime library. If set to `ON`, the -DLL version of the Visual C++ library is used. - -@anchor GLFW_USE_HYBRID_HPG -__GLFW_USE_HYBRID_HPG__ determines whether to export the `NvOptimusEnablement` and -`AmdPowerXpressRequestHighPerformance` symbols, which force the use of the -high-performance GPU on Nvidia Optimus and AMD PowerXpress systems. These symbols -need to be exported by the EXE to be detected by the driver, so the override -will not work if GLFW is built as a DLL. - - -@section compile_manual Compiling GLFW manually - -If you wish to compile GLFW without its CMake build environment then you will -have to do at least some of the platform detection yourself. GLFW needs -a configuration macro to be defined in order to know what window system it's -being compiled for and also has optional, platform-specific ones for various -features. - -When building with CMake, the `glfw_config.h` configuration header is generated -based on the current platform and CMake options. The GLFW CMake environment -defines @b GLFW_USE_CONFIG_H, which causes this header to be included by -`internal.h`. Without this macro, GLFW will expect the necessary configuration -macros to be defined on the command-line. - -The window creation API is used to create windows, handle input, monitors, gamma -ramps and clipboard. The options are: - - - @b _GLFW_COCOA to use the Cocoa frameworks - - @b _GLFW_WIN32 to use the Win32 API - - @b _GLFW_X11 to use the X Window System - - @b _GLFW_WAYLAND to use the Wayland API (experimental and incomplete) - - @b _GLFW_OSMESA to use the OSMesa API (headless and non-interactive) - -If you are building GLFW as a shared library / dynamic library / DLL then you -must also define @b _GLFW_BUILD_DLL. Otherwise, you must not define it. - -If you are linking the Vulkan loader directly with your application then you -must also define @b _GLFW_VULKAN_STATIC. Otherwise, GLFW will attempt to use the -external version. - -If you are using a custom name for the Vulkan, EGL, GLX, OSMesa, OpenGL, GLESv1 -or GLESv2 library, you can override the default names by defining those you need -of @b _GLFW_VULKAN_LIBRARY, @b _GLFW_EGL_LIBRARY, @b _GLFW_GLX_LIBRARY, @b -_GLFW_OSMESA_LIBRARY, @b _GLFW_OPENGL_LIBRARY, @b _GLFW_GLESV1_LIBRARY and @b -_GLFW_GLESV2_LIBRARY. Otherwise, GLFW will use the built-in default names. - -For the EGL context creation API, the following options are available: - - - @b _GLFW_USE_EGLPLATFORM_H to use an existing `EGL/eglplatform.h` header file - for native handle types (fallback) - -@note None of the @ref build_macros may be defined during the compilation of -GLFW. If you define any of these in your build files, make sure they are not -applied to the GLFW sources. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/context.dox b/third_party/penumbra/vendor/glfw/docs/context.dox deleted file mode 100644 index 69b8fa7fdf2..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/context.dox +++ /dev/null @@ -1,346 +0,0 @@ -/*! - -@page context_guide Context guide - -@tableofcontents - -This guide introduces the OpenGL and OpenGL ES context related functions of -GLFW. For details on a specific function in this category, see the @ref -context. There are also guides for the other areas of the GLFW API. - - - @ref intro_guide - - @ref window_guide - - @ref vulkan_guide - - @ref monitor_guide - - @ref input_guide - - -@section context_object Context objects - -A window object encapsulates both a top-level window and an OpenGL or OpenGL ES -context. It is created with @ref glfwCreateWindow and destroyed with @ref -glfwDestroyWindow or @ref glfwTerminate. See @ref window_creation for more -information. - -As the window and context are inseparably linked, the window object also serves -as the context handle. - -To test the creation of various kinds of contexts and see their properties, run -the `glfwinfo` test program. - -@note Vulkan does not have a context and the Vulkan instance is created via the -Vulkan API itself. If you will be using Vulkan to render to a window, disable -context creation by setting the [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) -hint to `GLFW_NO_API`. For more information, see the @ref vulkan_guide. - - -@subsection context_hints Context creation hints - -There are a number of hints, specified using @ref glfwWindowHint, related to -what kind of context is created. See -[context related hints](@ref window_hints_ctx) in the window guide. - - -@subsection context_sharing Context object sharing - -When creating a window and its OpenGL or OpenGL ES context with @ref -glfwCreateWindow, you can specify another window whose context the new one -should share its objects (textures, vertex and element buffers, etc.) with. - -@code -GLFWwindow* second_window = glfwCreateWindow(640, 480, "Second Window", NULL, first_window); -@endcode - -Object sharing is implemented by the operating system and graphics driver. On -platforms where it is possible to choose which types of objects are shared, GLFW -requests that all types are shared. - -See the relevant chapter of the [OpenGL](https://www.opengl.org/registry/) or -[OpenGL ES](https://www.khronos.org/opengles/) reference documents for more -information. The name and number of this chapter unfortunately varies between -versions and APIs, but has at times been named _Shared Objects and Multiple -Contexts_. - -GLFW comes with a barebones object sharing example program called `sharing`. - - -@subsection context_offscreen Offscreen contexts - -GLFW doesn't support creating contexts without an associated window. However, -contexts with hidden windows can be created with the -[GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window hint. - -@code -glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - -GLFWwindow* offscreen_context = glfwCreateWindow(640, 480, "", NULL, NULL); -@endcode - -The window never needs to be shown and its context can be used as a plain -offscreen context. Depending on the window manager, the size of a hidden -window's framebuffer may not be usable or modifiable, so framebuffer -objects are recommended for rendering with such contexts. - -You should still [process events](@ref events) as long as you have at least one -window, even if none of them are visible. - -@macos The first time a window is created the menu bar is created. This is not -desirable for example when writing a command-line only application. Menu bar -creation can be disabled with the @ref GLFW_COCOA_MENUBAR init hint. - - -@subsection context_less Windows without contexts - -You can disable context creation by setting the -[GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_NO_API`. Windows -without contexts must not be passed to @ref glfwMakeContextCurrent or @ref -glfwSwapBuffers. - - -@section context_current Current context - -Before you can make OpenGL or OpenGL ES calls, you need to have a current -context of the correct type. A context can only be current for a single thread -at a time, and a thread can only have a single context current at a time. - -When moving a context between threads, you must make it non-current on the old -thread before making it current on the new one. - -The context of a window is made current with @ref glfwMakeContextCurrent. - -@code -glfwMakeContextCurrent(window); -@endcode - -The window of the current context is returned by @ref glfwGetCurrentContext. - -@code -GLFWwindow* window = glfwGetCurrentContext(); -@endcode - -The following GLFW functions require a context to be current. Calling any these -functions without a current context will generate a @ref GLFW_NO_CURRENT_CONTEXT -error. - - - @ref glfwSwapInterval - - @ref glfwExtensionSupported - - @ref glfwGetProcAddress - - -@section context_swap Buffer swapping - -See @ref buffer_swap in the window guide. - - -@section context_glext OpenGL and OpenGL ES extensions - -One of the benefits of OpenGL and OpenGL ES is their extensibility. -Hardware vendors may include extensions in their implementations that extend the -API before that functionality is included in a new version of the OpenGL or -OpenGL ES specification, and some extensions are never included and remain -as extensions until they become obsolete. - -An extension is defined by: - -- An extension name (e.g. `GL_ARB_debug_output`) -- New OpenGL tokens (e.g. `GL_DEBUG_SEVERITY_HIGH_ARB`) -- New OpenGL functions (e.g. `glGetDebugMessageLogARB`) - -Note the `ARB` affix, which stands for Architecture Review Board and is used -for official extensions. The extension above was created by the ARB, but there -are many different affixes, like `NV` for Nvidia and `AMD` for, well, AMD. Any -group may also use the generic `EXT` affix. Lists of extensions, together with -their specifications, can be found at the -[OpenGL Registry](https://www.opengl.org/registry/) and -[OpenGL ES Registry](https://www.khronos.org/registry/gles/). - - -@subsection context_glext_auto Loading extension with a loader library - -An extension loader library is the easiest and best way to access both OpenGL and -OpenGL ES extensions and modern versions of the core OpenGL or OpenGL ES APIs. -They will take care of all the details of declaring and loading everything you -need. One such library is [glad](https://github.com/Dav1dde/glad) and there are -several others. - -The following example will use glad but all extension loader libraries work -similarly. - -First you need to generate the source files using the glad Python script. This -example generates a loader for any version of OpenGL, which is the default for -both GLFW and glad, but loaders for OpenGL ES, as well as loaders for specific -API versions and extension sets can be generated. The generated files are -written to the `output` directory. - -@code{.sh} -python main.py --generator c --no-loader --out-path output -@endcode - -The `--no-loader` option is added because GLFW already provides a function for -loading OpenGL and OpenGL ES function pointers, one that automatically uses the -selected context creation API, and glad can call this instead of having to -implement its own. There are several other command-line options as well. See -the glad documentation for details. - -Add the generated `output/src/glad.c`, `output/include/glad/glad.h` and -`output/include/KHR/khrplatform.h` files to your build. Then you need to -include the glad header file, which will replace the OpenGL header of your -development environment. By including the glad header before the GLFW header, -it suppresses the development environment's OpenGL or OpenGL ES header. - -@code -#include -#include -@endcode - -Finally you need to initialize glad once you have a suitable current context. - -@code -window = glfwCreateWindow(640, 480, "My Window", NULL, NULL); -if (!window) -{ - ... -} - -glfwMakeContextCurrent(window); - -gladLoadGLLoader((GLADloadproc) glfwGetProcAddress); -@endcode - -Once glad has been loaded, you have access to all OpenGL core and extension -functions supported by both the context you created and the glad loader you -generated and you are ready to start rendering. - -You can specify a minimum required OpenGL or OpenGL ES version with -[context hints](@ref window_hints_ctx). If your needs are more complex, you can -check the actual OpenGL or OpenGL ES version with -[context attributes](@ref window_attribs_ctx), or you can check whether -a specific version is supported by the current context with the -`GLAD_GL_VERSION_x_x` booleans. - -@code -if (GLAD_GL_VERSION_3_2) -{ - // Call OpenGL 3.2+ specific code -} -@endcode - -To check whether a specific extension is supported, use the `GLAD_GL_xxx` -booleans. - -@code -if (GLAD_GL_ARB_debug_output) -{ - // Use GL_ARB_debug_output -} -@endcode - - -@subsection context_glext_manual Loading extensions manually - -__Do not use this technique__ unless it is absolutely necessary. An -[extension loader library](@ref context_glext_auto) will save you a ton of -tedious, repetitive, error prone work. - -To use a certain extension, you must first check whether the context supports -that extension and then, if it introduces new functions, retrieve the pointers -to those functions. GLFW provides @ref glfwExtensionSupported and @ref -glfwGetProcAddress for manual loading of extensions and new API functions. - -This section will demonstrate manual loading of OpenGL extensions. The loading -of OpenGL ES extensions is identical except for the name of the extension header. - - -@subsubsection context_glext_header The glext.h header - -The `glext.h` extension header is a continually updated file that defines the -interfaces for all OpenGL extensions. The latest version of this can always be -found at the [OpenGL Registry](https://www.opengl.org/registry/). There are also -extension headers for the various versions of OpenGL ES at the -[OpenGL ES Registry](https://www.khronos.org/registry/gles/). It it strongly -recommended that you use your own copy of the extension header, as the one -included in your development environment may be several years out of date and -may not include the extensions you wish to use. - -The header defines function pointer types for all functions of all extensions it -supports. These have names like `PFNGLGETDEBUGMESSAGELOGARBPROC` (for -`glGetDebugMessageLogARB`), i.e. the name is made uppercase and `PFN` (pointer -to function) and `PROC` (procedure) are added to the ends. - -To include the extension header, define @ref GLFW_INCLUDE_GLEXT before including -the GLFW header. - -@code -#define GLFW_INCLUDE_GLEXT -#include -@endcode - - -@subsubsection context_glext_string Checking for extensions - -A given machine may not actually support the extension (it may have older -drivers or a graphics card that lacks the necessary hardware features), so it -is necessary to check at run-time whether the context supports the extension. -This is done with @ref glfwExtensionSupported. - -@code -if (glfwExtensionSupported("GL_ARB_debug_output")) -{ - // The extension is supported by the current context -} -@endcode - -The argument is a null terminated ASCII string with the extension name. If the -extension is supported, @ref glfwExtensionSupported returns `GLFW_TRUE`, -otherwise it returns `GLFW_FALSE`. - - -@subsubsection context_glext_proc Fetching function pointers - -Many extensions, though not all, require the use of new OpenGL functions. -These functions often do not have entry points in the client API libraries of -your operating system, making it necessary to fetch them at run time. You can -retrieve pointers to these functions with @ref glfwGetProcAddress. - -@code -PFNGLGETDEBUGMESSAGELOGARBPROC pfnGetDebugMessageLog = glfwGetProcAddress("glGetDebugMessageLogARB"); -@endcode - -In general, you should avoid giving the function pointer variables the (exact) -same name as the function, as this may confuse your linker. Instead, you can -use a different prefix, like above, or some other naming scheme. - -Now that all the pieces have been introduced, here is what they might look like -when used together. - -@code -#define GLFW_INCLUDE_GLEXT -#include - -#define glGetDebugMessageLogARB pfnGetDebugMessageLog -PFNGLGETDEBUGMESSAGELOGARBPROC pfnGetDebugMessageLog; - -// Flag indicating whether the extension is supported -int has_ARB_debug_output = 0; - -void load_extensions(void) -{ - if (glfwExtensionSupported("GL_ARB_debug_output")) - { - pfnGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGARBPROC) - glfwGetProcAddress("glGetDebugMessageLogARB"); - has_ARB_debug_output = 1; - } -} - -void some_function(void) -{ - if (has_ARB_debug_output) - { - // Now the extension function can be called as usual - glGetDebugMessageLogARB(...); - } -} -@endcode - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/extra.css b/third_party/penumbra/vendor/glfw/docs/extra.css deleted file mode 100644 index 03a7f259a9a..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/extra.css +++ /dev/null @@ -1 +0,0 @@ -.sm-dox,.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted,.sm-dox ul a:hover{background:none;text-shadow:none}.sm-dox a span.sub-arrow{border-color:#f2f2f2 transparent transparent transparent}.sm-dox a span.sub-arrow:active,.sm-dox a span.sub-arrow:focus,.sm-dox a span.sub-arrow:hover,.sm-dox a:hover span.sub-arrow{border-color:#f60 transparent transparent transparent}.sm-dox ul a span.sub-arrow:active,.sm-dox ul a span.sub-arrow:focus,.sm-dox ul a span.sub-arrow:hover,.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #f60}.sm-dox ul a:hover{background:#666;text-shadow:none}.sm-dox ul.sm-nowrap a{color:#4d4d4d;text-shadow:none}#main-nav,#main-menu,#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.memdoc,dl.reflist dd,div.toc li,.ah,span.lineno,span.lineno a,span.lineno a:hover,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,.doxtable code,.markdownTable code{background:none}#titlearea,.footer,.contents,div.header,.memdoc,table.doxtable td,table.doxtable th,table.markdownTable td,table.markdownTable th,hr,.memSeparator{border:none}#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.reflist dt a.el,.levels span,.directory .levels span{text-shadow:none}.memdoc,dl.reflist dd{box-shadow:none}div.headertitle,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,table.doxtable code,table.markdownTable code{padding:0}#nav-path,.directory .levels,span.lineno{display:none}html,#titlearea,.footer,tr.even,.directory tr.even,.doxtable tr:nth-child(even),tr.markdownTableBody:nth-child(even),.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,code,.markdownTableRowEven{background:#f2f2f2}body{color:#4d4d4d}h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em{color:#1a1a1a;border-bottom:none}h1{padding-top:0.5em;font-size:180%}h2{padding-top:0.5em;margin-bottom:0;font-size:140%}h3{padding-top:0.5em;margin-bottom:0;font-size:110%}.glfwheader{font-size:16px;height:64px;max-width:920px;min-width:800px;padding:0 32px;margin:0 auto}#glfwhome{line-height:64px;padding-right:48px;color:#666;font-size:2.5em;background:url("https://www.glfw.org/css/arrow.png") no-repeat right}.glfwnavbar{list-style-type:none;margin:0 auto;float:right}#glfwhome,.glfwnavbar li{float:left}.glfwnavbar a,.glfwnavbar a:visited{line-height:64px;margin-left:2em;display:block;color:#666}#glfwhome,.glfwnavbar a,.glfwnavbar a:visited{transition:.35s ease}#titlearea,.footer{color:#666}address.footer{text-align:center;padding:2em;margin-top:3em}#top{background:#666}#main-nav{max-width:960px;min-width:800px;margin:0 auto;font-size:13px}#main-menu{max-width:920px;min-width:800px;margin:0 auto;font-size:13px}.memtitle{display:none}.memproto,.memname{font-weight:bold;text-shadow:none}#main-menu{height:36px;display:block;position:relative}#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li{color:#f2f2f2}#main-menu li ul.sm-nowrap li a{color:#4d4d4d}#main-menu li ul.sm-nowrap li a:hover{color:#f60}.contents{min-height:590px}div.contents,div.header{max-width:920px;margin:0 auto;padding:0 32px;background:#fff none}table.doxtable th,table.markdownTable th,dl.reflist dt{background:linear-gradient(to bottom, #ffa733 0, #f60 100%);box-shadow:inset 0 0 32px #f60;text-shadow:0 -1px 1px #b34700;text-align:left;color:#fff}dl.reflist dt a.el{color:#f60;padding:.2em;border-radius:4px;background-color:#ffe0cc}div.toc{float:none;width:auto}div.toc h3{font-size:1.17em}div.toc ul{padding-left:1.5em}div.toc li{font-size:1em;padding-left:0;list-style-type:disc}div.toc,.memproto,div.qindex,div.ah{background:linear-gradient(to bottom, #f2f2f2 0, #e6e6e6 100%);box-shadow:inset 0 0 32px #e6e6e6;text-shadow:0 1px 1px #fff;color:#1a1a1a;border:2px solid #e6e6e6;border-radius:4px}.paramname{color:#803300}dl.reflist dt{border:2px solid #f60;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:none}dl.reflist dd{border:2px solid #f60;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:none}table.doxtable,table.markdownTable{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}a,a:hover,a:visited,a:visited:hover,.contents a:visited,.el,a.el:visited,#glfwhome:hover,#main-menu a:hover,span.lineno a:hover{color:#f60;text-decoration:none}div.directory{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}hr,.memSeparator{height:2px;background:linear-gradient(to right, #f2f2f2 0, #d9d9d9 50%, #f2f2f2 100%)}dl.note,dl.pre,dl.post,dl.invariant{background:linear-gradient(to bottom, #ddfad1 0, #cbf7ba 100%);box-shadow:inset 0 0 32px #baf5a3;color:#1e5309;border:2px solid #afe599}dl.warning,dl.attention{background:linear-gradient(to bottom, #fae8d1 0, #f7ddba 100%);box-shadow:inset 0 0 32px #f5d1a3;color:#533309;border:2px solid #e5c499}dl.deprecated,dl.bug{background:linear-gradient(to bottom, #fad1e3 0, #f7bad6 100%);box-shadow:inset 0 0 32px #f5a3c8;color:#53092a;border:2px solid #e599bb}dl.todo,dl.test{background:linear-gradient(to bottom, #d1ecfa 0, #bae3f7 100%);box-shadow:inset 0 0 32px #a3daf5;color:#093a53;border:2px solid #99cce5}dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test{border-radius:4px;padding:1em;text-shadow:0 1px 1px #fff;margin:1em 0}.note a,.pre a,.post a,.invariant a,.warning a,.attention a,.deprecated a,.bug a,.todo a,.test a,.note a:visited,.pre a:visited,.post a:visited,.invariant a:visited,.warning a:visited,.attention a:visited,.deprecated a:visited,.bug a:visited,.todo a:visited,.test a:visited{color:inherit}div.line{line-height:inherit}div.fragment,pre.fragment{background:#f2f2f2;border-radius:4px;border:none;padding:1em;overflow:auto;border-left:4px solid #ccc;margin:1em 0}.lineno a,.lineno a:visited,.line,pre.fragment{color:#4d4d4d}span.preprocessor,span.comment{color:#007899}a.code,a.code:visited{color:#e64500}span.keyword,span.keywordtype,span.keywordflow{color:#404040;font-weight:bold}span.stringliteral{color:#360099}code{padding:.1em;border-radius:4px} diff --git a/third_party/penumbra/vendor/glfw/docs/extra.less b/third_party/penumbra/vendor/glfw/docs/extra.less deleted file mode 100644 index 6d82b346c6f..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/extra.less +++ /dev/null @@ -1,414 +0,0 @@ -// NOTE: Please use this file to perform modifications on default style sheets. -// -// You need to install a few Ruby gems to generate extra.css from this file: -// gem install less therubyracer -// -// Run this command to regenerate extra.css after you're finished with changes: -// lessc --compress extra.less > extra.css -// -// Alternatively you can use online services to regenerate extra.css. - - -// Default text color for page contents -@default-text-color: hsl(0,0%,30%); - -// Page header, footer, table rows, inline codes and definition lists -@header-footer-background-color: hsl(0,0%,95%); - -// Page header, footer links and navigation bar background -@header-footer-link-color: hsl(0,0%,40%); - -// Doxygen navigation bar links -@navbar-link-color: @header-footer-background-color; - -// Page content background color -@content-background-color: hsl(0,0%,100%); - -// Bold, italic, h1, h2, ... and table of contents -@heading-color: hsl(0,0%,10%); - -// Function, enum and macro definition separator -@def-separator-color: @header-footer-background-color; - -// Base color hue -@base-hue: 24; - -// Default color used for links -@default-link-color: hsl(@base-hue,100%,50%); - -// Doxygen navigation bar active tab -@tab-text-color: hsl(0,0%,100%); -@tab-background-color1: @default-link-color; -@tab-background-color2: lighten(spin(@tab-background-color1, 10), 10%); - -// Table borders -@default-border-color: @default-link-color; - -// Table header -@table-text-color: @tab-text-color; -@table-background-color1: @tab-background-color1; -@table-background-color2: @tab-background-color2; - -// Table of contents, data structure index and prototypes -@toc-background-color1: hsl(0,0%,90%); -@toc-background-color2: lighten(@toc-background-color1, 5%); - -// Function prototype parameters color -@prototype-param-color: darken(@default-link-color, 25%); - -// Message box color: note, pre, post and invariant -@box-note-color: hsl(103,80%,85%); - -// Message box color: warning and attention -@box-warning-color: hsl(34,80%,85%); - -// Message box color: deprecated and bug -@box-bug-color: hsl(333,80%,85%); - -// Message box color: todo and test -@box-todo-color: hsl(200,80%,85%); - -// Message box helper function -.message-box(@base-color) { - background:linear-gradient(to bottom,lighten(@base-color, 5%) 0%,@base-color 100%); - box-shadow:inset 0 0 32px darken(@base-color, 5%); - color:darken(@base-color, 67%); - border:2px solid desaturate(darken(@base-color, 10%), 20%); -} - -.sm-dox,.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted,.sm-dox ul a:hover { - background:none; - text-shadow:none; -} - -.sm-dox a span.sub-arrow { - border-color:@navbar-link-color transparent transparent transparent; -} - -.sm-dox a span.sub-arrow:active,.sm-dox a span.sub-arrow:focus,.sm-dox a span.sub-arrow:hover,.sm-dox a:hover span.sub-arrow { - border-color:@default-link-color transparent transparent transparent; -} - -.sm-dox ul a span.sub-arrow:active,.sm-dox ul a span.sub-arrow:focus,.sm-dox ul a span.sub-arrow:hover,.sm-dox ul a:hover span.sub-arrow { - border-color:transparent transparent transparent @default-link-color; -} - -.sm-dox ul a:hover { - background:@header-footer-link-color; - text-shadow:none; -} - -.sm-dox ul.sm-nowrap a { - color:@default-text-color; - text-shadow:none; -} - -#main-nav,#main-menu,#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.memdoc,dl.reflist dd,div.toc li,.ah,span.lineno,span.lineno a,span.lineno a:hover,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,.doxtable code,.markdownTable code { - background:none; -} - -#titlearea,.footer,.contents,div.header,.memdoc,table.doxtable td,table.doxtable th,table.markdownTable td,table.markdownTable th,hr,.memSeparator { - border:none; -} - -#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.reflist dt a.el,.levels span,.directory .levels span { - text-shadow:none; -} - -.memdoc,dl.reflist dd { - box-shadow:none; -} - -div.headertitle,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,table.doxtable code,table.markdownTable code { - padding:0; -} - -#nav-path,.directory .levels,span.lineno { - display:none; -} - -html,#titlearea,.footer,tr.even,.directory tr.even,.doxtable tr:nth-child(even),tr.markdownTableBody:nth-child(even),.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,code,.markdownTableRowEven { - background:@header-footer-background-color; -} - -body { - color:@default-text-color; -} - -h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em { - color:@heading-color; - border-bottom:none; -} - -h1 { - padding-top:0.5em; - font-size:180%; -} - -h2 { - padding-top:0.5em; - margin-bottom:0; - font-size:140%; -} - -h3 { - padding-top:0.5em; - margin-bottom:0; - font-size:110%; -} - -.glfwheader { - font-size:16px; - height:64px; - max-width:920px; - min-width:800px; - padding:0 32px; - margin:0 auto; -} - -#glfwhome { - line-height:64px; - padding-right:48px; - color:@header-footer-link-color; - font-size:2.5em; - background:url("https://www.glfw.org/css/arrow.png") no-repeat right; -} - -.glfwnavbar { - list-style-type:none; - margin:0 auto; - float:right; -} - -#glfwhome,.glfwnavbar li { - float:left; -} - -.glfwnavbar a,.glfwnavbar a:visited { - line-height:64px; - margin-left:2em; - display:block; - color:@header-footer-link-color; -} - -#glfwhome,.glfwnavbar a,.glfwnavbar a:visited { - transition:.35s ease; -} - -#titlearea,.footer { - color:@header-footer-link-color; -} - -address.footer { - text-align:center; - padding:2em; - margin-top:3em; -} - -#top { - background:@header-footer-link-color; -} - -#main-nav { - max-width:960px; - min-width:800px; - margin:0 auto; - font-size:13px; -} - -#main-menu { - max-width:920px; - min-width:800px; - margin:0 auto; - font-size:13px; -} - -.memtitle { - display:none; -} - -.memproto,.memname { - font-weight:bold; - text-shadow:none; -} - -#main-menu { - height:36px; - display:block; - position:relative; -} - -#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li { - color:@navbar-link-color; -} - -#main-menu li ul.sm-nowrap li a { - color:@default-text-color; -} - -#main-menu li ul.sm-nowrap li a:hover { - color:@default-link-color; -} - -.contents { - min-height:590px; -} - -div.contents,div.header { - max-width:920px; - margin:0 auto; - padding:0 32px; - background:@content-background-color none; -} - -table.doxtable th,table.markdownTable th,dl.reflist dt { - background:linear-gradient(to bottom,@table-background-color2 0%,@table-background-color1 100%); - box-shadow:inset 0 0 32px @table-background-color1; - text-shadow:0 -1px 1px darken(@table-background-color1, 15%); - text-align:left; - color:@table-text-color; -} - -dl.reflist dt a.el { - color:@default-link-color; - padding:.2em; - border-radius:4px; - background-color:lighten(@default-link-color, 40%); -} - -div.toc { - float:none; - width:auto; -} - -div.toc h3 { - font-size:1.17em; -} - -div.toc ul { - padding-left:1.5em; -} - -div.toc li { - font-size:1em; - padding-left:0; - list-style-type:disc; -} - -div.toc,.memproto,div.qindex,div.ah { - background:linear-gradient(to bottom,@toc-background-color2 0%,@toc-background-color1 100%); - box-shadow:inset 0 0 32px @toc-background-color1; - text-shadow:0 1px 1px lighten(@toc-background-color2, 10%); - color:@heading-color; - border:2px solid @toc-background-color1; - border-radius:4px; -} - -.paramname { - color:@prototype-param-color; -} - -dl.reflist dt { - border:2px solid @default-border-color; - border-top-left-radius:4px; - border-top-right-radius:4px; - border-bottom:none; -} - -dl.reflist dd { - border:2px solid @default-border-color; - border-bottom-right-radius:4px; - border-bottom-left-radius:4px; - border-top:none; -} - -table.doxtable,table.markdownTable { - border-collapse:inherit; - border-spacing:0; - border:2px solid @default-border-color; - border-radius:4px; -} - -a,a:hover,a:visited,a:visited:hover,.contents a:visited,.el,a.el:visited,#glfwhome:hover,#main-menu a:hover,span.lineno a:hover { - color:@default-link-color; - text-decoration:none; -} - -div.directory { - border-collapse:inherit; - border-spacing:0; - border:2px solid @default-border-color; - border-radius:4px; -} - -hr,.memSeparator { - height:2px; - background:linear-gradient(to right,@def-separator-color 0%,darken(@def-separator-color, 10%) 50%,@def-separator-color 100%); -} - -dl.note,dl.pre,dl.post,dl.invariant { - .message-box(@box-note-color); -} - -dl.warning,dl.attention { - .message-box(@box-warning-color); -} - -dl.deprecated,dl.bug { - .message-box(@box-bug-color); -} - -dl.todo,dl.test { - .message-box(@box-todo-color); -} - -dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test { - border-radius:4px; - padding:1em; - text-shadow:0 1px 1px hsl(0,0%,100%); - margin:1em 0; -} - -.note a,.pre a,.post a,.invariant a,.warning a,.attention a,.deprecated a,.bug a,.todo a,.test a,.note a:visited,.pre a:visited,.post a:visited,.invariant a:visited,.warning a:visited,.attention a:visited,.deprecated a:visited,.bug a:visited,.todo a:visited,.test a:visited { - color:inherit; -} - -div.line { - line-height:inherit; -} - -div.fragment,pre.fragment { - background:hsl(0,0%,95%); - border-radius:4px; - border:none; - padding:1em; - overflow:auto; - border-left:4px solid hsl(0,0%,80%); - margin:1em 0; -} - -.lineno a,.lineno a:visited,.line,pre.fragment { - color:@default-text-color; -} - -span.preprocessor,span.comment { - color:hsl(193,100%,30%); -} - -a.code,a.code:visited { - color:hsl(18,100%,45%); -} - -span.keyword,span.keywordtype,span.keywordflow { - color:darken(@default-text-color, 5%); - font-weight:bold; -} - -span.stringliteral { - color:hsl(261,100%,30%); -} - -code { - padding:.1em; - border-radius:4px; -} diff --git a/third_party/penumbra/vendor/glfw/docs/footer.html b/third_party/penumbra/vendor/glfw/docs/footer.html deleted file mode 100644 index b0434ca1839..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/footer.html +++ /dev/null @@ -1,7 +0,0 @@ -

- - diff --git a/third_party/penumbra/vendor/glfw/docs/header.html b/third_party/penumbra/vendor/glfw/docs/header.html deleted file mode 100644 index f42f49ee4e5..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/header.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - -$projectname: $title -$title - - - -$treeview -$search -$mathjax - -$extrastylesheet - - -
- - - - - diff --git a/third_party/penumbra/vendor/glfw/docs/input.dox b/third_party/penumbra/vendor/glfw/docs/input.dox deleted file mode 100644 index dea64877491..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/input.dox +++ /dev/null @@ -1,945 +0,0 @@ -/*! - -@page input_guide Input guide - -@tableofcontents - -This guide introduces the input related functions of GLFW. For details on -a specific function in this category, see the @ref input. There are also guides -for the other areas of GLFW. - - - @ref intro_guide - - @ref window_guide - - @ref context_guide - - @ref vulkan_guide - - @ref monitor_guide - -GLFW provides many kinds of input. While some can only be polled, like time, or -only received via callbacks, like scrolling, many provide both callbacks and -polling. Callbacks are more work to use than polling but is less CPU intensive -and guarantees that you do not miss state changes. - -All input callbacks receive a window handle. By using the -[window user pointer](@ref window_userptr), you can access non-global structures -or objects from your callbacks. - -To get a better feel for how the various events callbacks behave, run the -`events` test program. It register every callback supported by GLFW and prints -out all arguments provided for every event, along with time and sequence -information. - - -@section events Event processing - -GLFW needs to poll the window system for events both to provide input to the -application and to prove to the window system that the application hasn't locked -up. Event processing is normally done each frame after -[buffer swapping](@ref buffer_swap). Even when you have no windows, event -polling needs to be done in order to receive monitor and joystick connection -events. - -There are three functions for processing pending events. @ref glfwPollEvents, -processes only those events that have already been received and then returns -immediately. - -@code -glfwPollEvents(); -@endcode - -This is the best choice when rendering continuously, like most games do. - -If you only need to update the contents of the window when you receive new -input, @ref glfwWaitEvents is a better choice. - -@code -glfwWaitEvents(); -@endcode - -It puts the thread to sleep until at least one event has been received and then -processes all received events. This saves a great deal of CPU cycles and is -useful for, for example, editing tools. - -If you want to wait for events but have UI elements or other tasks that need -periodic updates, @ref glfwWaitEventsTimeout lets you specify a timeout. - -@code -glfwWaitEventsTimeout(0.7); -@endcode - -It puts the thread to sleep until at least one event has been received, or until -the specified number of seconds have elapsed. It then processes any received -events. - -If the main thread is sleeping in @ref glfwWaitEvents, you can wake it from -another thread by posting an empty event to the event queue with @ref -glfwPostEmptyEvent. - -@code -glfwPostEmptyEvent(); -@endcode - -Do not assume that callbacks will _only_ be called in response to the above -functions. While it is necessary to process events in one or more of the ways -above, window systems that require GLFW to register callbacks of its own can -pass events to GLFW in response to many window system function calls. GLFW will -pass those events on to the application callbacks before returning. - -For example, on Windows the system function that @ref glfwSetWindowSize is -implemented with will send window size events directly to the event callback -that every window has and that GLFW implements for its windows. If you have set -a [window size callback](@ref window_size) GLFW will call it in turn with the -new size before everything returns back out of the @ref glfwSetWindowSize call. - - -@section input_keyboard Keyboard input - -GLFW divides keyboard input into two categories; key events and character -events. Key events relate to actual physical keyboard keys, whereas character -events relate to the Unicode code points generated by pressing some of them. - -Keys and characters do not map 1:1. A single key press may produce several -characters, and a single character may require several keys to produce. This -may not be the case on your machine, but your users are likely not all using the -same keyboard layout, input method or even operating system as you. - - -@subsection input_key Key input - -If you wish to be notified when a physical key is pressed or released or when it -repeats, set a key callback. - -@code -glfwSetKeyCallback(window, key_callback); -@endcode - -The callback function receives the [keyboard key](@ref keys), platform-specific -scancode, key action and [modifier bits](@ref mods). - -@code -void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_E && action == GLFW_PRESS) - activate_airship(); -} -@endcode - -The action is one of `GLFW_PRESS`, `GLFW_REPEAT` or `GLFW_RELEASE`. The key -will be `GLFW_KEY_UNKNOWN` if GLFW lacks a key token for it, for example -_E-mail_ and _Play_ keys. - -The scancode is unique for every key, regardless of whether it has a key token. -Scancodes are platform-specific but consistent over time, so keys will have -different scancodes depending on the platform but they are safe to save to disk. -You can query the scancode for any [named key](@ref keys) on the current -platform with @ref glfwGetKeyScancode. - -@code -const int scancode = glfwGetKeyScancode(GLFW_KEY_X); -set_key_mapping(scancode, swap_weapons); -@endcode - -The last reported state for every [named key](@ref keys) is also saved in -per-window state arrays that can be polled with @ref glfwGetKey. - -@code -int state = glfwGetKey(window, GLFW_KEY_E); -if (state == GLFW_PRESS) -{ - activate_airship(); -} -@endcode - -The returned state is one of `GLFW_PRESS` or `GLFW_RELEASE`. - -This function only returns cached key event state. It does not poll the -system for the current physical state of the key. - -@anchor GLFW_STICKY_KEYS -Whenever you poll state, you risk missing the state change you are looking for. -If a pressed key is released again before you poll its state, you will have -missed the key press. The recommended solution for this is to use a -key callback, but there is also the `GLFW_STICKY_KEYS` input mode. - -@code -glfwSetInputMode(window, GLFW_STICKY_KEYS, GLFW_TRUE); -@endcode - -When sticky keys mode is enabled, the pollable state of a key will remain -`GLFW_PRESS` until the state of that key is polled with @ref glfwGetKey. Once -it has been polled, if a key release event had been processed in the meantime, -the state will reset to `GLFW_RELEASE`, otherwise it will remain `GLFW_PRESS`. - -@anchor GLFW_LOCK_KEY_MODS -If you wish to know what the state of the Caps Lock and Num Lock keys was when -input events were generated, set the `GLFW_LOCK_KEY_MODS` input mode. - -@code -glfwSetInputMode(window, GLFW_LOCK_KEY_MODS, GLFW_TRUE); -@endcode - -When this input mode is enabled, any callback that receives -[modifier bits](@ref mods) will have the @ref GLFW_MOD_CAPS_LOCK bit set if Caps -Lock was on when the event occurred and the @ref GLFW_MOD_NUM_LOCK bit set if -Num Lock was on. - -The `GLFW_KEY_LAST` constant holds the highest value of any -[named key](@ref keys). - - -@subsection input_char Text input - -GLFW supports text input in the form of a stream of -[Unicode code points](https://en.wikipedia.org/wiki/Unicode), as produced by the -operating system text input system. Unlike key input, text input obeys keyboard -layouts and modifier keys and supports composing characters using -[dead keys](https://en.wikipedia.org/wiki/Dead_key). Once received, you can -encode the code points into UTF-8 or any other encoding you prefer. - -Because an `unsigned int` is 32 bits long on all platforms supported by GLFW, -you can treat the code point argument as native endian UTF-32. - -If you wish to offer regular text input, set a character callback. - -@code -glfwSetCharCallback(window, character_callback); -@endcode - -The callback function receives Unicode code points for key events that would -have led to regular text input and generally behaves as a standard text field on -that platform. - -@code -void character_callback(GLFWwindow* window, unsigned int codepoint) -{ -} -@endcode - - -@subsection input_key_name Key names - -If you wish to refer to keys by name, you can query the keyboard layout -dependent name of printable keys with @ref glfwGetKeyName. - -@code -const char* key_name = glfwGetKeyName(GLFW_KEY_W, 0); -show_tutorial_hint("Press %s to move forward", key_name); -@endcode - -This function can handle both [keys and scancodes](@ref input_key). If the -specified key is `GLFW_KEY_UNKNOWN` then the scancode is used, otherwise it is -ignored. This matches the behavior of the key callback, meaning the callback -arguments can always be passed unmodified to this function. - - -@section input_mouse Mouse input - -Mouse input comes in many forms, including mouse motion, button presses and -scrolling offsets. The cursor appearance can also be changed, either to -a custom image or a standard cursor shape from the system theme. - - -@subsection cursor_pos Cursor position - -If you wish to be notified when the cursor moves over the window, set a cursor -position callback. - -@code -glfwSetCursorPosCallback(window, cursor_position_callback); -@endcode - -The callback functions receives the cursor position, measured in screen -coordinates but relative to the top-left corner of the window content area. On -platforms that provide it, the full sub-pixel cursor position is passed on. - -@code -static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos) -{ -} -@endcode - -The cursor position is also saved per-window and can be polled with @ref -glfwGetCursorPos. - -@code -double xpos, ypos; -glfwGetCursorPos(window, &xpos, &ypos); -@endcode - - -@subsection cursor_mode Cursor mode - -@anchor GLFW_CURSOR -The `GLFW_CURSOR` input mode provides several cursor modes for special forms of -mouse motion input. By default, the cursor mode is `GLFW_CURSOR_NORMAL`, -meaning the regular arrow cursor (or another cursor set with @ref glfwSetCursor) -is used and cursor motion is not limited. - -If you wish to implement mouse motion based camera controls or other input -schemes that require unlimited mouse movement, set the cursor mode to -`GLFW_CURSOR_DISABLED`. - -@code -glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); -@endcode - -This will hide the cursor and lock it to the specified window. GLFW will then -take care of all the details of cursor re-centering and offset calculation and -providing the application with a virtual cursor position. This virtual position -is provided normally via both the cursor position callback and through polling. - -@note You should not implement your own version of this functionality using -other features of GLFW. It is not supported and will not work as robustly as -`GLFW_CURSOR_DISABLED`. - -If you only wish the cursor to become hidden when it is over a window but still -want it to behave normally, set the cursor mode to `GLFW_CURSOR_HIDDEN`. - -@code -glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); -@endcode - -This mode puts no limit on the motion of the cursor. - -To exit out of either of these special modes, restore the `GLFW_CURSOR_NORMAL` -cursor mode. - -@code -glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); -@endcode - - -@anchor GLFW_RAW_MOUSE_MOTION -@subsection raw_mouse_motion Raw mouse motion - -When the cursor is disabled, raw (unscaled and unaccelerated) mouse motion can -be enabled if available. - -Raw mouse motion is closer to the actual motion of the mouse across a surface. -It is not affected by the scaling and acceleration applied to the motion of the -desktop cursor. That processing is suitable for a cursor while raw motion is -better for controlling for example a 3D camera. Because of this, raw mouse -motion is only provided when the cursor is disabled. - -Call @ref glfwRawMouseMotionSupported to check if the current machine provides -raw motion and set the `GLFW_RAW_MOUSE_MOTION` input mode to enable it. It is -disabled by default. - -@code -if (glfwRawMouseMotionSupported()) - glfwSetInputMode(window, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE); -@endcode - -If supported, raw mouse motion can be enabled or disabled per-window and at any -time but it will only be provided when the cursor is disabled. - - -@subsection cursor_object Cursor objects - -GLFW supports creating both custom and system theme cursor images, encapsulated -as @ref GLFWcursor objects. They are created with @ref glfwCreateCursor or @ref -glfwCreateStandardCursor and destroyed with @ref glfwDestroyCursor, or @ref -glfwTerminate, if any remain. - - -@subsubsection cursor_custom Custom cursor creation - -A custom cursor is created with @ref glfwCreateCursor, which returns a handle to -the created cursor object. For example, this creates a 16x16 white square -cursor with the hot-spot in the upper-left corner: - -@code -unsigned char pixels[16 * 16 * 4]; -memset(pixels, 0xff, sizeof(pixels)); - -GLFWimage image; -image.width = 16; -image.height = 16; -image.pixels = pixels; - -GLFWcursor* cursor = glfwCreateCursor(&image, 0, 0); -@endcode - -If cursor creation fails, `NULL` will be returned, so it is necessary to check -the return value. - -The image data is 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits -per channel with the red channel first. The pixels are arranged canonically as -sequential rows, starting from the top-left corner. - - -@subsubsection cursor_standard Standard cursor creation - -A cursor with a [standard shape](@ref shapes) from the current system cursor -theme can be can be created with @ref glfwCreateStandardCursor. - -@code -GLFWcursor* cursor = glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR); -@endcode - -These cursor objects behave in the exact same way as those created with @ref -glfwCreateCursor except that the system cursor theme provides the actual image. - - -@subsubsection cursor_destruction Cursor destruction - -When a cursor is no longer needed, destroy it with @ref glfwDestroyCursor. - -@code -glfwDestroyCursor(cursor); -@endcode - -Cursor destruction always succeeds. If the cursor is current for any window, -that window will revert to the default cursor. This does not affect the cursor -mode. All remaining cursors are destroyed when @ref glfwTerminate is called. - - -@subsubsection cursor_set Cursor setting - -A cursor can be set as current for a window with @ref glfwSetCursor. - -@code -glfwSetCursor(window, cursor); -@endcode - -Once set, the cursor image will be used as long as the system cursor is over the -content area of the window and the [cursor mode](@ref cursor_mode) is set -to `GLFW_CURSOR_NORMAL`. - -A single cursor may be set for any number of windows. - -To revert to the default cursor, set the cursor of that window to `NULL`. - -@code -glfwSetCursor(window, NULL); -@endcode - -When a cursor is destroyed, any window that has it set will revert to the -default cursor. This does not affect the cursor mode. - - -@subsection cursor_enter Cursor enter/leave events - -If you wish to be notified when the cursor enters or leaves the content area of -a window, set a cursor enter/leave callback. - -@code -glfwSetCursorEnterCallback(window, cursor_enter_callback); -@endcode - -The callback function receives the new classification of the cursor. - -@code -void cursor_enter_callback(GLFWwindow* window, int entered) -{ - if (entered) - { - // The cursor entered the content area of the window - } - else - { - // The cursor left the content area of the window - } -} -@endcode - -You can query whether the cursor is currently inside the content area of the -window with the [GLFW_HOVERED](@ref GLFW_HOVERED_attrib) window attribute. - -@code -if (glfwGetWindowAttrib(window, GLFW_HOVERED)) -{ - highlight_interface(); -} -@endcode - - -@subsection input_mouse_button Mouse button input - -If you wish to be notified when a mouse button is pressed or released, set -a mouse button callback. - -@code -glfwSetMouseButtonCallback(window, mouse_button_callback); -@endcode - -The callback function receives the [mouse button](@ref buttons), button action -and [modifier bits](@ref mods). - -@code -void mouse_button_callback(GLFWwindow* window, int button, int action, int mods) -{ - if (button == GLFW_MOUSE_BUTTON_RIGHT && action == GLFW_PRESS) - popup_menu(); -} -@endcode - -The action is one of `GLFW_PRESS` or `GLFW_RELEASE`. - -Mouse button states for [named buttons](@ref buttons) are also saved in -per-window state arrays that can be polled with @ref glfwGetMouseButton. - -@code -int state = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT); -if (state == GLFW_PRESS) -{ - upgrade_cow(); -} -@endcode - -The returned state is one of `GLFW_PRESS` or `GLFW_RELEASE`. - -This function only returns cached mouse button event state. It does not poll -the system for the current state of the mouse button. - -@anchor GLFW_STICKY_MOUSE_BUTTONS -Whenever you poll state, you risk missing the state change you are looking for. -If a pressed mouse button is released again before you poll its state, you will have -missed the button press. The recommended solution for this is to use a -mouse button callback, but there is also the `GLFW_STICKY_MOUSE_BUTTONS` -input mode. - -@code -glfwSetInputMode(window, GLFW_STICKY_MOUSE_BUTTONS, GLFW_TRUE); -@endcode - -When sticky mouse buttons mode is enabled, the pollable state of a mouse button -will remain `GLFW_PRESS` until the state of that button is polled with @ref -glfwGetMouseButton. Once it has been polled, if a mouse button release event -had been processed in the meantime, the state will reset to `GLFW_RELEASE`, -otherwise it will remain `GLFW_PRESS`. - -The `GLFW_MOUSE_BUTTON_LAST` constant holds the highest value of any -[named button](@ref buttons). - - -@subsection scrolling Scroll input - -If you wish to be notified when the user scrolls, whether with a mouse wheel or -touchpad gesture, set a scroll callback. - -@code -glfwSetScrollCallback(window, scroll_callback); -@endcode - -The callback function receives two-dimensional scroll offsets. - -@code -void scroll_callback(GLFWwindow* window, double xoffset, double yoffset) -{ -} -@endcode - -A normal mouse wheel, being vertical, provides offsets along the Y-axis. - - -@section joystick Joystick input - -The joystick functions expose connected joysticks and controllers, with both -referred to as joysticks. It supports up to sixteen joysticks, ranging from -`GLFW_JOYSTICK_1`, `GLFW_JOYSTICK_2` up to and including `GLFW_JOYSTICK_16` or -`GLFW_JOYSTICK_LAST`. You can test whether a [joystick](@ref joysticks) is -present with @ref glfwJoystickPresent. - -@code -int present = glfwJoystickPresent(GLFW_JOYSTICK_1); -@endcode - -Each joystick has zero or more axes, zero or more buttons, zero or more hats, -a human-readable name, a user pointer and an SDL compatible GUID. - -When GLFW is initialized, detected joysticks are added to the beginning of -the array. Once a joystick is detected, it keeps its assigned ID until it is -disconnected or the library is terminated, so as joysticks are connected and -disconnected, there may appear gaps in the IDs. - -Joystick axis, button and hat state is updated when polled and does not require -a window to be created or events to be processed. However, if you want joystick -connection and disconnection events reliably delivered to the -[joystick callback](@ref joystick_event) then you must -[process events](@ref events). - -To see all the properties of all connected joysticks in real-time, run the -`joysticks` test program. - - -@subsection joystick_axis Joystick axis states - -The positions of all axes of a joystick are returned by @ref -glfwGetJoystickAxes. See the reference documentation for the lifetime of the -returned array. - -@code -int count; -const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_5, &count); -@endcode - -Each element in the returned array is a value between -1.0 and 1.0. - - -@subsection joystick_button Joystick button states - -The states of all buttons of a joystick are returned by @ref -glfwGetJoystickButtons. See the reference documentation for the lifetime of the -returned array. - -@code -int count; -const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_3, &count); -@endcode - -Each element in the returned array is either `GLFW_PRESS` or `GLFW_RELEASE`. - -For backward compatibility with earlier versions that did not have @ref -glfwGetJoystickHats, the button array by default also includes all hats. See -the reference documentation for @ref glfwGetJoystickButtons for details. - - -@subsection joystick_hat Joystick hat states - -The states of all hats are returned by @ref glfwGetJoystickHats. See the -reference documentation for the lifetime of the returned array. - -@code -int count; -const unsigned char* hats = glfwGetJoystickHats(GLFW_JOYSTICK_7, &count); -@endcode - -Each element in the returned array is one of the following: - -Name | Value ----- | ----- -`GLFW_HAT_CENTERED` | 0 -`GLFW_HAT_UP` | 1 -`GLFW_HAT_RIGHT` | 2 -`GLFW_HAT_DOWN` | 4 -`GLFW_HAT_LEFT` | 8 -`GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` -`GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` -`GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` -`GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` - -The diagonal directions are bitwise combinations of the primary (up, right, down -and left) directions and you can test for these individually by ANDing it with -the corresponding direction. - -@code -if (hats[2] & GLFW_HAT_RIGHT) -{ - // State of hat 2 could be right-up, right or right-down -} -@endcode - -For backward compatibility with earlier versions that did not have @ref -glfwGetJoystickHats, all hats are by default also included in the button array. -See the reference documentation for @ref glfwGetJoystickButtons for details. - - -@subsection joystick_name Joystick name - -The human-readable, UTF-8 encoded name of a joystick is returned by @ref -glfwGetJoystickName. See the reference documentation for the lifetime of the -returned string. - -@code -const char* name = glfwGetJoystickName(GLFW_JOYSTICK_4); -@endcode - -Joystick names are not guaranteed to be unique. Two joysticks of the same model -and make may have the same name. Only the [joystick token](@ref joysticks) is -guaranteed to be unique, and only until that joystick is disconnected. - - -@subsection joystick_userptr Joystick user pointer - -Each joystick has a user pointer that can be set with @ref -glfwSetJoystickUserPointer and queried with @ref glfwGetJoystickUserPointer. -This can be used for any purpose you need and will not be modified by GLFW. The -value will be kept until the joystick is disconnected or until the library is -terminated. - -The initial value of the pointer is `NULL`. - - -@subsection joystick_event Joystick configuration changes - -If you wish to be notified when a joystick is connected or disconnected, set -a joystick callback. - -@code -glfwSetJoystickCallback(joystick_callback); -@endcode - -The callback function receives the ID of the joystick that has been connected -and disconnected and the event that occurred. - -@code -void joystick_callback(int jid, int event) -{ - if (event == GLFW_CONNECTED) - { - // The joystick was connected - } - else if (event == GLFW_DISCONNECTED) - { - // The joystick was disconnected - } -} -@endcode - -For joystick connection and disconnection events to be delivered on all -platforms, you need to call one of the [event processing](@ref events) -functions. Joystick disconnection may also be detected and the callback -called by joystick functions. The function will then return whatever it -returns for a disconnected joystick. - -Only @ref glfwGetJoystickName and @ref glfwGetJoystickUserPointer will return -useful values for a disconnected joystick and only before the monitor callback -returns. - - -@subsection gamepad Gamepad input - -The joystick functions provide unlabeled axes, buttons and hats, with no -indication of where they are located on the device. Their order may also vary -between platforms even with the same device. - -To solve this problem the SDL community crowdsourced the -[SDL_GameControllerDB](https://github.com/gabomdq/SDL_GameControllerDB) project, -a database of mappings from many different devices to an Xbox-like gamepad. - -GLFW supports this mapping format and contains a copy of the mappings -available at the time of release. See @ref gamepad_mapping for how to update -this at runtime. Mappings will be assigned to joysticks automatically any time -a joystick is connected or the mappings are updated. - -You can check whether a joystick is both present and has a gamepad mapping with -@ref glfwJoystickIsGamepad. - -@code -if (glfwJoystickIsGamepad(GLFW_JOYSTICK_2)) -{ - // Use as gamepad -} -@endcode - -If you are only interested in gamepad input you can use this function instead of -@ref glfwJoystickPresent. - -You can query the human-readable name provided by the gamepad mapping with @ref -glfwGetGamepadName. This may or may not be the same as the -[joystick name](@ref joystick_name). - -@code -const char* name = glfwGetGamepadName(GLFW_JOYSTICK_7); -@endcode - -To retrieve the gamepad state of a joystick, call @ref glfwGetGamepadState. - -@code -GLFWgamepadstate state; - -if (glfwGetGamepadState(GLFW_JOYSTICK_3, &state)) -{ - if (state.buttons[GLFW_GAMEPAD_BUTTON_A]) - { - input_jump(); - } - - input_speed(state.axes[GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER]); -} -@endcode - -The @ref GLFWgamepadstate struct has two arrays; one for button states and one -for axis states. The values for each button and axis are the same as for the -@ref glfwGetJoystickButtons and @ref glfwGetJoystickAxes functions, i.e. -`GLFW_PRESS` or `GLFW_RELEASE` for buttons and -1.0 to 1.0 inclusive for axes. - -The sizes of the arrays and the positions within each array are fixed. - -The [button indices](@ref gamepad_buttons) are `GLFW_GAMEPAD_BUTTON_A`, -`GLFW_GAMEPAD_BUTTON_B`, `GLFW_GAMEPAD_BUTTON_X`, `GLFW_GAMEPAD_BUTTON_Y`, -`GLFW_GAMEPAD_BUTTON_LEFT_BUMPER`, `GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER`, -`GLFW_GAMEPAD_BUTTON_BACK`, `GLFW_GAMEPAD_BUTTON_START`, -`GLFW_GAMEPAD_BUTTON_GUIDE`, `GLFW_GAMEPAD_BUTTON_LEFT_THUMB`, -`GLFW_GAMEPAD_BUTTON_RIGHT_THUMB`, `GLFW_GAMEPAD_BUTTON_DPAD_UP`, -`GLFW_GAMEPAD_BUTTON_DPAD_RIGHT`, `GLFW_GAMEPAD_BUTTON_DPAD_DOWN` and -`GLFW_GAMEPAD_BUTTON_DPAD_LEFT`. - -For those who prefer, there are also the `GLFW_GAMEPAD_BUTTON_CROSS`, -`GLFW_GAMEPAD_BUTTON_CIRCLE`, `GLFW_GAMEPAD_BUTTON_SQUARE` and -`GLFW_GAMEPAD_BUTTON_TRIANGLE` aliases for the A, B, X and Y button indices. - -The [axis indices](@ref gamepad_axes) are `GLFW_GAMEPAD_AXIS_LEFT_X`, -`GLFW_GAMEPAD_AXIS_LEFT_Y`, `GLFW_GAMEPAD_AXIS_RIGHT_X`, -`GLFW_GAMEPAD_AXIS_RIGHT_Y`, `GLFW_GAMEPAD_AXIS_LEFT_TRIGGER` and -`GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER`. - -The `GLFW_GAMEPAD_BUTTON_LAST` and `GLFW_GAMEPAD_AXIS_LAST` constants equal -the largest available index for each array. - - -@subsection gamepad_mapping Gamepad mappings - -GLFW contains a copy of the mappings available in -[SDL_GameControllerDB](https://github.com/gabomdq/SDL_GameControllerDB) at the -time of release. Newer ones can be added at runtime with @ref -glfwUpdateGamepadMappings. - -@code -const char* mappings = load_file_contents("game/data/gamecontrollerdb.txt"); - -glfwUpdateGamepadMappings(mappings); -@endcode - -This function supports everything from single lines up to and including the -unmodified contents of the whole `gamecontrollerdb.txt` file. - -Below is a description of the mapping format. Please keep in mind that __this -description is not authoritative__. The format is defined by the SDL and -SDL_GameControllerDB projects and their documentation and code takes precedence. - -Each mapping is a single line of comma-separated values describing the GUID, -name and layout of the gamepad. Lines that do not begin with a hexadecimal -digit are ignored. - -The first value is always the gamepad GUID, a 32 character long hexadecimal -string that typically identifies its make, model, revision and the type of -connection to the computer. When this information is not available, the GUID is -generated using the gamepad name. GLFW uses the SDL 2.0.5+ GUID format but can -convert from the older formats. - -The second value is always the human-readable name of the gamepad. - -All subsequent values are in the form `:` and describe the layout -of the mapping. These fields may not all be present and may occur in any order. - -The button fields are `a`, `b`, `c`, `d`, `back`, `start`, `guide`, `dpup`, -`dpright`, `dpdown`, `dpleft`, `leftshoulder`, `rightshoulder`, `leftstick` and -`rightstick`. - -The axis fields are `leftx`, `lefty`, `rightx`, `righty`, `lefttrigger` and -`righttrigger`. - -The value of an axis or button field can be a joystick button, a joystick axis, -a hat bitmask or empty. Joystick buttons are specified as `bN`, for example -`b2` for the third button. Joystick axes are specified as `aN`, for example -`a7` for the eighth button. Joystick hat bit masks are specified as `hN.N`, for -example `h0.8` for left on the first hat. More than one bit may be set in the -mask. - -Before an axis there may be a `+` or `-` range modifier, for example `+a3` for -the positive half of the fourth axis. This restricts input to only the positive -or negative halves of the joystick axis. After an axis or half-axis there may -be the `~` inversion modifier, for example `a2~` or `-a7~`. This negates the -values of the gamepad axis. - -The hat bit mask match the [hat states](@ref hat_state) in the joystick -functions. - -There is also the special `platform` field that specifies which platform the -mapping is valid for. Possible values are `Windows`, `Mac OS X` and `Linux`. - -Below is an example of what a gamepad mapping might look like. It is the -one built into GLFW for Xbox controllers accessed via the XInput API on Windows. -This example has been broken into several lines to fit on the page, but real -gamepad mappings must be a single line. - -@code{.unparsed} -78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0, -b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8, -rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4, -righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8, -@endcode - -@note GLFW does not yet support the output range and modifiers `+` and `-` that -were recently added to SDL. The input modifiers `+`, `-` and `~` are supported -and described above. - - -@section time Time input - -GLFW provides high-resolution time input, in seconds, with @ref glfwGetTime. - -@code -double seconds = glfwGetTime(); -@endcode - -It returns the number of seconds since the library was initialized with @ref -glfwInit. The platform-specific time sources used typically have micro- or -nanosecond resolution. - -You can modify the base time with @ref glfwSetTime. - -@code -glfwSetTime(4.0); -@endcode - -This sets the time to the specified time, in seconds, and it continues to count -from there. - -You can also access the raw timer used to implement the functions above, -with @ref glfwGetTimerValue. - -@code -uint64_t value = glfwGetTimerValue(); -@endcode - -This value is in 1 / frequency seconds. The frequency of the raw -timer varies depending on the operating system and hardware. You can query the -frequency, in Hz, with @ref glfwGetTimerFrequency. - -@code -uint64_t frequency = glfwGetTimerFrequency(); -@endcode - - -@section clipboard Clipboard input and output - -If the system clipboard contains a UTF-8 encoded string or if it can be -converted to one, you can retrieve it with @ref glfwGetClipboardString. See the -reference documentation for the lifetime of the returned string. - -@code -const char* text = glfwGetClipboardString(NULL); -if (text) -{ - insert_text(text); -} -@endcode - -If the clipboard is empty or if its contents could not be converted, `NULL` is -returned. - -The contents of the system clipboard can be set to a UTF-8 encoded string with -@ref glfwSetClipboardString. - -@code -glfwSetClipboardString(NULL, "A string with words in it"); -@endcode - - -@section path_drop Path drop input - -If you wish to receive the paths of files and/or directories dropped on -a window, set a file drop callback. - -@code -glfwSetDropCallback(window, drop_callback); -@endcode - -The callback function receives an array of paths encoded as UTF-8. - -@code -void drop_callback(GLFWwindow* window, int count, const char** paths) -{ - int i; - for (i = 0; i < count; i++) - handle_dropped_file(paths[i]); -} -@endcode - -The path array and its strings are only valid until the file drop callback -returns, as they may have been generated specifically for that event. You need -to make a deep copy of the array if you want to keep the paths. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/internal.dox b/third_party/penumbra/vendor/glfw/docs/internal.dox deleted file mode 100644 index 685c6d131c9..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/internal.dox +++ /dev/null @@ -1,115 +0,0 @@ -/*! - -@page internals_guide Internal structure - -@tableofcontents - -There are several interfaces inside GLFW. Each interface has its own area of -responsibility and its own naming conventions. - - -@section internals_public Public interface - -The most well-known is the public interface, described in the glfw3.h header -file. This is implemented in source files shared by all platforms and these -files contain no platform-specific code. This code usually ends up calling the -platform and internal interfaces to do the actual work. - -The public interface uses the OpenGL naming conventions except with GLFW and -glfw instead of GL and gl. For struct members, where OpenGL sets no precedent, -it use headless camel case. - -Examples: `glfwCreateWindow`, `GLFWwindow`, `GLFW_RED_BITS` - - -@section internals_native Native interface - -The [native interface](@ref native) is a small set of publicly available -but platform-specific functions, described in the glfw3native.h header file and -used to gain access to the underlying window, context and (on some platforms) -display handles used by the platform interface. - -The function names of the native interface are similar to those of the public -interface, but embeds the name of the interface that the returned handle is -from. - -Examples: `glfwGetX11Window`, `glfwGetWGLContext` - - -@section internals_internal Internal interface - -The internal interface consists of utility functions used by all other -interfaces. It is shared code implemented in the same shared source files as -the public and event interfaces. The internal interface is described in the -internal.h header file. - -The internal interface is in charge of GLFW's global data, which it stores in -a `_GLFWlibrary` struct named `_glfw`. - -The internal interface uses the same style as the public interface, except all -global names have a leading underscore. - -Examples: `_glfwIsValidContextConfig`, `_GLFWwindow`, `_glfw.monitorCount` - - -@section internals_platform Platform interface - -The platform interface implements all platform-specific operations as a service -to the public interface. This includes event processing. The platform -interface is never directly called by application code and never directly calls -application-provided callbacks. It is also prohibited from modifying the -platform-independent part of the internal structs. Instead, it calls the event -interface when events interesting to GLFW are received. - -The platform interface mirrors those parts of the public interface that needs to -perform platform-specific operations on some or all platforms. The are also -named the same except that the glfw function prefix is replaced by -_glfwPlatform. - -Examples: `_glfwPlatformCreateWindow` - -The platform interface also defines structs that contain platform-specific -global and per-object state. Their names mirror those of the internal -interface, except that an interface-specific suffix is added. - -Examples: `_GLFWwindowX11`, `_GLFWcontextWGL` - -These structs are incorporated as members into the internal interface structs -using special macros that name them after the specific interface used. This -prevents shared code from accidentally using these members. - -Examples: `window->win32.handle`, `_glfw.x11.display` - - -@section internals_event Event interface - -The event interface is implemented in the same shared source files as the public -interface and is responsible for delivering the events it receives to the -application, either via callbacks, via window state changes or both. - -The function names of the event interface use a `_glfwInput` prefix and the -ObjectEvent pattern. - -Examples: `_glfwInputWindowFocus`, `_glfwInputCursorPos` - - -@section internals_static Static functions - -Static functions may be used by any interface and have no prefixes or suffixes. -These use headless camel case. - -Examples: `isValidElementForJoystick` - - -@section internals_config Configuration macros - -GLFW uses a number of configuration macros to select at compile time which -interfaces and code paths to use. They are defined in the glfw_config.h header file, -which is generated from the `glfw_config.h.in` file by CMake. - -Configuration macros the same style as tokens in the public interface, except -with a leading underscore. - -Examples: `_GLFW_WIN32`, `_GLFW_BUILD_DLL` - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/intro.dox b/third_party/penumbra/vendor/glfw/docs/intro.dox deleted file mode 100644 index a72b620e1b6..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/intro.dox +++ /dev/null @@ -1,454 +0,0 @@ -/*! - -@page intro_guide Introduction to the API - -@tableofcontents - -This guide introduces the basic concepts of GLFW and describes initialization, -error handling and API guarantees and limitations. For a broad but shallow -tutorial, see @ref quick_guide instead. For details on a specific function in -this category, see the @ref init. - -There are also guides for the other areas of GLFW. - - - @ref window_guide - - @ref context_guide - - @ref vulkan_guide - - @ref monitor_guide - - @ref input_guide - - -@section intro_init Initialization and termination - -Before most GLFW functions may be called, the library must be initialized. -This initialization checks what features are available on the machine, -enumerates monitors and joysticks, initializes the timer and performs any -required platform-specific initialization. - -Only the following functions may be called before the library has been -successfully initialized, and only from the main thread. - - - @ref glfwGetVersion - - @ref glfwGetVersionString - - @ref glfwGetError - - @ref glfwSetErrorCallback - - @ref glfwInitHint - - @ref glfwInit - - @ref glfwTerminate - -Calling any other function before successful initialization will cause a @ref -GLFW_NOT_INITIALIZED error. - - -@subsection intro_init_init Initializing GLFW - -The library is initialized with @ref glfwInit, which returns `GLFW_FALSE` if an -error occurred. - -@code -if (!glfwInit()) -{ - // Handle initialization failure -} -@endcode - -If any part of initialization fails, any parts that succeeded are terminated as -if @ref glfwTerminate had been called. The library only needs to be initialized -once and additional calls to an already initialized library will return -`GLFW_TRUE` immediately. - -Once the library has been successfully initialized, it should be terminated -before the application exits. Modern systems are very good at freeing resources -allocated by programs that exit, but GLFW sometimes has to change global system -settings and these might not be restored without termination. - - -@subsection init_hints Initialization hints - -Initialization hints are set before @ref glfwInit and affect how the library -behaves until termination. Hints are set with @ref glfwInitHint. - -@code -glfwInitHint(GLFW_JOYSTICK_HAT_BUTTONS, GLFW_FALSE); -@endcode - -The values you set hints to are never reset by GLFW, but they only take effect -during initialization. Once GLFW has been initialized, any values you set will -be ignored until the library is terminated and initialized again. - -Some hints are platform specific. These may be set on any platform but they -will only affect their specific platform. Other platforms will ignore them. -Setting these hints requires no platform specific headers or functions. - - -@subsubsection init_hints_shared Shared init hints - -@anchor GLFW_JOYSTICK_HAT_BUTTONS -__GLFW_JOYSTICK_HAT_BUTTONS__ specifies whether to also expose joystick hats as -buttons, for compatibility with earlier versions of GLFW that did not have @ref -glfwGetJoystickHats. Set this with @ref glfwInitHint. - - -@subsubsection init_hints_osx macOS specific init hints - -@anchor GLFW_COCOA_CHDIR_RESOURCES_hint -__GLFW_COCOA_CHDIR_RESOURCES__ specifies whether to set the current directory to -the application to the `Contents/Resources` subdirectory of the application's -bundle, if present. Set this with @ref glfwInitHint. - -@anchor GLFW_COCOA_MENUBAR_hint -__GLFW_COCOA_MENUBAR__ specifies whether to create a basic menu bar, either from -a nib or manually, when the first window is created, which is when AppKit is -initialized. Set this with @ref glfwInitHint. - - -@subsubsection init_hints_values Supported and default values - -Initialization hint | Default value | Supported values -------------------------------- | ------------- | ---------------- -@ref GLFW_JOYSTICK_HAT_BUTTONS | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -@ref GLFW_COCOA_CHDIR_RESOURCES | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -@ref GLFW_COCOA_MENUBAR | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` - - -@subsection intro_init_terminate Terminating GLFW - -Before your application exits, you should terminate the GLFW library if it has -been initialized. This is done with @ref glfwTerminate. - -@code -glfwTerminate(); -@endcode - -This will destroy any remaining window, monitor and cursor objects, restore any -modified gamma ramps, re-enable the screensaver if it had been disabled and free -any other resources allocated by GLFW. - -Once the library is terminated, it is as if it had never been initialized and -you will need to initialize it again before being able to use GLFW. If the -library was not initialized or had already been terminated, it return -immediately. - - -@section error_handling Error handling - -Some GLFW functions have return values that indicate an error, but this is often -not very helpful when trying to figure out what happened or why it occurred. -Other functions have no return value reserved for errors, so error notification -needs a separate channel. Finally, far from all GLFW functions have return -values. - -The last [error code](@ref errors) for the calling thread can be queried at any -time with @ref glfwGetError. - -@code -int code = glfwGetError(NULL); - -if (code != GLFW_NO_ERROR) - handle_error(code); -@endcode - -If no error has occurred since the last call, @ref GLFW_NO_ERROR (zero) is -returned. The error is cleared before the function returns. - -The error code indicates the general category of the error. Some error codes, -such as @ref GLFW_NOT_INITIALIZED has only a single meaning, whereas others like -@ref GLFW_PLATFORM_ERROR are used for many different errors. - -GLFW often has more information about an error than its general category. You -can retrieve a UTF-8 encoded human-readable description along with the error -code. If no error has occurred since the last call, the description is set to -`NULL`. - -@code -const char* description; -int code = glfwGetError(&description); - -if (description) - display_error_message(code, description); -@endcode - -The retrieved description string is only valid until the next error occurs. -This means you must make a copy of it if you want to keep it. - -You can also set an error callback, which will be called each time an error -occurs. It is set with @ref glfwSetErrorCallback. - -@code -glfwSetErrorCallback(error_callback); -@endcode - -The error callback receives the same error code and human-readable description -returned by @ref glfwGetError. - -@code -void error_callback(int code, const char* description) -{ - display_error_message(code, description); -} -@endcode - -The error callback is called after the error is stored, so calling @ref -glfwGetError from within the error callback returns the same values as the -callback argument. - -The description string passed to the callback is only valid until the error -callback returns. This means you must make a copy of it if you want to keep it. - -__Reported errors are never fatal.__ As long as GLFW was successfully -initialized, it will remain initialized and in a safe state until terminated -regardless of how many errors occur. If an error occurs during initialization -that causes @ref glfwInit to fail, any part of the library that was initialized -will be safely terminated. - -Do not rely on a currently invalid call to generate a specific error, as in the -future that same call may generate a different error or become valid. - - -@section coordinate_systems Coordinate systems - -GLFW has two primary coordinate systems: the _virtual screen_ and the window -_content area_ or _content area_. Both use the same unit: _virtual screen -coordinates_, or just _screen coordinates_, which don't necessarily correspond -to pixels. - - - -Both the virtual screen and the content area coordinate systems have the X-axis -pointing to the right and the Y-axis pointing down. - -Window and monitor positions are specified as the position of the upper-left -corners of their content areas relative to the virtual screen, while cursor -positions are specified relative to a window's content area. - -Because the origin of the window's content area coordinate system is also the -point from which the window position is specified, you can translate content -area coordinates to the virtual screen by adding the window position. The -window frame, when present, extends out from the content area but does not -affect the window position. - -Almost all positions and sizes in GLFW are measured in screen coordinates -relative to one of the two origins above. This includes cursor positions, -window positions and sizes, window frame sizes, monitor positions and video mode -resolutions. - -Two exceptions are the [monitor physical size](@ref monitor_size), which is -measured in millimetres, and [framebuffer size](@ref window_fbsize), which is -measured in pixels. - -Pixels and screen coordinates may map 1:1 on your machine, but they won't on -every other machine, for example on a Mac with a Retina display. The ratio -between screen coordinates and pixels may also change at run-time depending on -which monitor the window is currently considered to be on. - - -@section guarantees_limitations Guarantees and limitations - -This section describes the conditions under which GLFW can be expected to -function, barring bugs in the operating system or drivers. Use of GLFW outside -of these limits may work on some platforms, or on some machines, or some of the -time, or on some versions of GLFW, but it may break at any time and this will -not be considered a bug. - - -@subsection lifetime Pointer lifetimes - -GLFW will never free any pointer you provide to it and you must never free any -pointer it provides to you. - -Many GLFW functions return pointers to dynamically allocated structures, strings -or arrays, and some callbacks are provided with strings or arrays. These are -always managed by GLFW and should never be freed by the application. The -lifetime of these pointers is documented for each GLFW function and callback. -If you need to keep this data, you must copy it before its lifetime expires. - -Many GLFW functions accept pointers to structures or strings allocated by the -application. These are never freed by GLFW and are always the responsibility of -the application. If GLFW needs to keep the data in these structures or strings, -it is copied before the function returns. - -Pointer lifetimes are guaranteed not to be shortened in future minor or patch -releases. - - -@subsection reentrancy Reentrancy - -GLFW event processing and object destruction are not reentrant. This means that -the following functions must not be called from any callback function: - - - @ref glfwDestroyWindow - - @ref glfwDestroyCursor - - @ref glfwPollEvents - - @ref glfwWaitEvents - - @ref glfwWaitEventsTimeout - - @ref glfwTerminate - -These functions may be made reentrant in future minor or patch releases, but -functions not on this list will not be made non-reentrant. - - -@subsection thread_safety Thread safety - -Most GLFW functions must only be called from the main thread (the thread that -calls main), but some may be called from any thread once the library has been -initialized. Before initialization the whole library is thread-unsafe. - -The reference documentation for every GLFW function states whether it is limited -to the main thread. - -Initialization, termination, event processing and the creation and -destruction of windows, cursors and OpenGL and OpenGL ES contexts are all -restricted to the main thread due to limitations of one or several platforms. - -Because event processing must be performed on the main thread, all callbacks -except for the error callback will only be called on that thread. The error -callback may be called on any thread, as any GLFW function may generate errors. - -The error code and description may be queried from any thread. - - - @ref glfwGetError - -Empty events may be posted from any thread. - - - @ref glfwPostEmptyEvent - -The window user pointer and close flag may be read and written from any thread, -but this is not synchronized by GLFW. - - - @ref glfwGetWindowUserPointer - - @ref glfwSetWindowUserPointer - - @ref glfwWindowShouldClose - - @ref glfwSetWindowShouldClose - -These functions for working with OpenGL and OpenGL ES contexts may be called -from any thread, but the window object is not synchronized by GLFW. - - - @ref glfwMakeContextCurrent - - @ref glfwGetCurrentContext - - @ref glfwSwapBuffers - - @ref glfwSwapInterval - - @ref glfwExtensionSupported - - @ref glfwGetProcAddress - -The raw timer functions may be called from any thread. - - - @ref glfwGetTimerFrequency - - @ref glfwGetTimerValue - -The regular timer may be used from any thread, but reading and writing the timer -offset is not synchronized by GLFW. - - - @ref glfwGetTime - - @ref glfwSetTime - -Library version information may be queried from any thread. - - - @ref glfwGetVersion - - @ref glfwGetVersionString - -All Vulkan related functions may be called from any thread. - - - @ref glfwVulkanSupported - - @ref glfwGetRequiredInstanceExtensions - - @ref glfwGetInstanceProcAddress - - @ref glfwGetPhysicalDevicePresentationSupport - - @ref glfwCreateWindowSurface - -GLFW uses synchronization objects internally only to manage the per-thread -context and error states. Additional synchronization is left to the -application. - -Functions that may currently be called from any thread will always remain so, -but functions that are currently limited to the main thread may be updated to -allow calls from any thread in future releases. - - -@subsection compatibility Version compatibility - -GLFW uses [Semantic Versioning](https://semver.org/). This guarantees source -and binary backward compatibility with earlier minor versions of the API. This -means that you can drop in a newer version of the library and existing programs -will continue to compile and existing binaries will continue to run. - -Once a function or constant has been added, the signature of that function or -value of that constant will remain unchanged until the next major version of -GLFW. No compatibility of any kind is guaranteed between major versions. - -Undocumented behavior, i.e. behavior that is not described in the documentation, -may change at any time until it is documented. - -If the reference documentation and the implementation differ, the reference -documentation will almost always take precedence and the implementation will be -fixed in the next release. The reference documentation will also take -precedence over anything stated in a guide. - - -@subsection event_order Event order - -The order of arrival of related events is not guaranteed to be consistent -across platforms. The exception is synthetic key and mouse button release -events, which are always delivered after the window defocus event. - - -@section intro_version Version management - -GLFW provides mechanisms for identifying what version of GLFW your application -was compiled against as well as what version it is currently running against. -If you are loading GLFW dynamically (not just linking dynamically), you can use -this to verify that the library binary is compatible with your application. - - -@subsection intro_version_compile Compile-time version - -The compile-time version of GLFW is provided by the GLFW header with the -`GLFW_VERSION_MAJOR`, `GLFW_VERSION_MINOR` and `GLFW_VERSION_REVISION` macros. - -@code -printf("Compiled against GLFW %i.%i.%i\n", - GLFW_VERSION_MAJOR, - GLFW_VERSION_MINOR, - GLFW_VERSION_REVISION); -@endcode - - -@subsection intro_version_runtime Run-time version - -The run-time version can be retrieved with @ref glfwGetVersion, a function that -may be called regardless of whether GLFW is initialized. - -@code -int major, minor, revision; -glfwGetVersion(&major, &minor, &revision); - -printf("Running against GLFW %i.%i.%i\n", major, minor, revision); -@endcode - - -@subsection intro_version_string Version string - -GLFW 3 also provides a compile-time generated version string that describes the -version, platform, compiler and any platform-specific compile-time options. -This is primarily intended for submitting bug reports, to allow developers to -see which code paths are enabled in a binary. - -The version string is returned by @ref glfwGetVersionString, a function that may -be called regardless of whether GLFW is initialized. - -__Do not use the version string__ to parse the GLFW library version. The @ref -glfwGetVersion function already provides the version of the running library -binary. - -The format of the string is as follows: - - The version of GLFW - - The name of the window system API - - The name of the context creation API - - Any additional options or APIs - -For example, when compiling GLFW 3.0 with MinGW using the Win32 and WGL -back ends, the version string may look something like this: - -@code -3.0.0 Win32 WGL MinGW -@endcode - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/main.dox b/third_party/penumbra/vendor/glfw/docs/main.dox deleted file mode 100644 index bd563d98843..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/main.dox +++ /dev/null @@ -1,46 +0,0 @@ -/*! - -@mainpage notitle - -@section main_intro Introduction - -GLFW is a free, Open Source, multi-platform library for OpenGL, OpenGL ES and -Vulkan application development. It provides a simple, platform-independent API -for creating windows, contexts and surfaces, reading input, handling events, etc. - -@ref news_33 list new features, caveats and deprecations. - -@ref quick_guide is a guide for users new to GLFW. It takes you through how to -write a small but complete program. - -There are guides for each section of the API: - - - @ref intro_guide – initialization, error handling and high-level design - - @ref window_guide – creating and working with windows and framebuffers - - @ref context_guide – working with OpenGL and OpenGL ES contexts - - @ref vulkan_guide - working with Vulkan objects and extensions - - @ref monitor_guide – enumerating and working with monitors and video modes - - @ref input_guide – receiving events, polling and processing input - -Once you have written a program, see @ref compile_guide and @ref build_guide. - -The [reference documentation](modules.html) provides more detailed information -about specific functions. - -@ref moving_guide explains what has changed and how to update existing code to -use the new API. - -There is a section on @ref guarantees_limitations for pointer lifetimes, -reentrancy, thread safety, event order and backward and forward compatibility. - -The [FAQ](https://www.glfw.org/faq.html) answers many common questions about the -design, implementation and use of GLFW. - -Finally, @ref compat_guide explains what APIs, standards and protocols GLFW uses -and what happens when they are not present on a given machine. - -This documentation was generated with Doxygen. The sources for it are available -in both the [source distribution](https://www.glfw.org/download.html) and -[GitHub repository](https://github.com/glfw/glfw). - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/monitor.dox b/third_party/penumbra/vendor/glfw/docs/monitor.dox deleted file mode 100644 index 86eb4540b08..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/monitor.dox +++ /dev/null @@ -1,268 +0,0 @@ -/*! - -@page monitor_guide Monitor guide - -@tableofcontents - -This guide introduces the monitor related functions of GLFW. For details on -a specific function in this category, see the @ref monitor. There are also -guides for the other areas of GLFW. - - - @ref intro_guide - - @ref window_guide - - @ref context_guide - - @ref vulkan_guide - - @ref input_guide - - -@section monitor_object Monitor objects - -A monitor object represents a currently connected monitor and is represented as -a pointer to the [opaque](https://en.wikipedia.org/wiki/Opaque_data_type) type -@ref GLFWmonitor. Monitor objects cannot be created or destroyed by the -application and retain their addresses until the monitors they represent are -disconnected or until the library is [terminated](@ref intro_init_terminate). - -Each monitor has a current video mode, a list of supported video modes, -a virtual position, a human-readable name, an estimated physical size and -a gamma ramp. One of the monitors is the primary monitor. - -The virtual position of a monitor is in -[screen coordinates](@ref coordinate_systems) and, together with the current -video mode, describes the viewports that the connected monitors provide into the -virtual desktop that spans them. - -To see how GLFW views your monitor setup and its available video modes, run the -`monitors` test program. - - -@subsection monitor_monitors Retrieving monitors - -The primary monitor is returned by @ref glfwGetPrimaryMonitor. It is the user's -preferred monitor and is usually the one with global UI elements like task bar -or menu bar. - -@code -GLFWmonitor* primary = glfwGetPrimaryMonitor(); -@endcode - -You can retrieve all currently connected monitors with @ref glfwGetMonitors. -See the reference documentation for the lifetime of the returned array. - -@code -int count; -GLFWmonitor** monitors = glfwGetMonitors(&count); -@endcode - -The primary monitor is always the first monitor in the returned array, but other -monitors may be moved to a different index when a monitor is connected or -disconnected. - - -@subsection monitor_event Monitor configuration changes - -If you wish to be notified when a monitor is connected or disconnected, set -a monitor callback. - -@code -glfwSetMonitorCallback(monitor_callback); -@endcode - -The callback function receives the handle for the monitor that has been -connected or disconnected and the event that occurred. - -@code -void monitor_callback(GLFWmonitor* monitor, int event) -{ - if (event == GLFW_CONNECTED) - { - // The monitor was connected - } - else if (event == GLFW_DISCONNECTED) - { - // The monitor was disconnected - } -} -@endcode - -If a monitor is disconnected, all windows that are full screen on it will be -switched to windowed mode before the callback is called. Only @ref -glfwGetMonitorName and @ref glfwGetMonitorUserPointer will return useful values -for a disconnected monitor and only before the monitor callback returns. - - -@section monitor_properties Monitor properties - -Each monitor has a current video mode, a list of supported video modes, -a virtual position, a content scale, a human-readable name, a user pointer, an -estimated physical size and a gamma ramp. - - -@subsection monitor_modes Video modes - -GLFW generally does a good job selecting a suitable video mode when you create -a full screen window, change its video mode or make a windowed one full -screen, but it is sometimes useful to know exactly which video modes are -supported. - -Video modes are represented as @ref GLFWvidmode structures. You can get an -array of the video modes supported by a monitor with @ref glfwGetVideoModes. -See the reference documentation for the lifetime of the returned array. - -@code -int count; -GLFWvidmode* modes = glfwGetVideoModes(monitor, &count); -@endcode - -To get the current video mode of a monitor call @ref glfwGetVideoMode. See the -reference documentation for the lifetime of the returned pointer. - -@code -const GLFWvidmode* mode = glfwGetVideoMode(monitor); -@endcode - -The resolution of a video mode is specified in -[screen coordinates](@ref coordinate_systems), not pixels. - - -@subsection monitor_size Physical size - -The physical size of a monitor in millimetres, or an estimation of it, can be -retrieved with @ref glfwGetMonitorPhysicalSize. This has no relation to its -current _resolution_, i.e. the width and height of its current -[video mode](@ref monitor_modes). - -@code -int width_mm, height_mm; -glfwGetMonitorPhysicalSize(monitor, &width_mm, &height_mm); -@endcode - -While this can be used to calculate the raw DPI of a monitor, this is often not -useful. Instead use the [monitor content scale](@ref monitor_scale) and -[window content scale](@ref window_scale) to scale your content. - - -@subsection monitor_scale Content scale - -The content scale for a monitor can be retrieved with @ref -glfwGetMonitorContentScale. - -@code -float xscale, yscale; -glfwGetMonitorContentScale(monitor, &xscale, &yscale); -@endcode - -The content scale is the ratio between the current DPI and the platform's -default DPI. This is especially important for text and any UI elements. If the -pixel dimensions of your UI scaled by this look appropriate on your machine then -it should appear at a reasonable size on other machines regardless of their DPI -and scaling settings. This relies on the system DPI and scaling settings being -somewhat correct. - -The content scale may depend on both the monitor resolution and pixel density -and on user settings. It may be very different from the raw DPI calculated from -the physical size and current resolution. - - -@subsection monitor_pos Virtual position - -The position of the monitor on the virtual desktop, in -[screen coordinates](@ref coordinate_systems), can be retrieved with @ref -glfwGetMonitorPos. - -@code -int xpos, ypos; -glfwGetMonitorPos(monitor, &xpos, &ypos); -@endcode - - -@subsection monitor_workarea Work area - -The area of a monitor not occupied by global task bars or menu bars is the work -area. This is specified in [screen coordinates](@ref coordinate_systems) and -can be retrieved with @ref glfwGetMonitorWorkarea. - -@code -int xpos, ypos, width, height; -glfwGetMonitorWorkarea(monitor, &xpos, &ypos, &width, &height); -@endcode - - -@subsection monitor_name Human-readable name - -The human-readable, UTF-8 encoded name of a monitor is returned by @ref -glfwGetMonitorName. See the reference documentation for the lifetime of the -returned string. - -@code -const char* name = glfwGetMonitorName(monitor); -@endcode - -Monitor names are not guaranteed to be unique. Two monitors of the same model -and make may have the same name. Only the monitor handle is guaranteed to be -unique, and only until that monitor is disconnected. - - -@subsection monitor_userptr User pointer - -Each monitor has a user pointer that can be set with @ref -glfwSetMonitorUserPointer and queried with @ref glfwGetMonitorUserPointer. This -can be used for any purpose you need and will not be modified by GLFW. The -value will be kept until the monitor is disconnected or until the library is -terminated. - -The initial value of the pointer is `NULL`. - - -@subsection monitor_gamma Gamma ramp - -The gamma ramp of a monitor can be set with @ref glfwSetGammaRamp, which accepts -a monitor handle and a pointer to a @ref GLFWgammaramp structure. - -@code -GLFWgammaramp ramp; -unsigned short red[256], green[256], blue[256]; - -ramp.size = 256; -ramp.red = red; -ramp.green = green; -ramp.blue = blue; - -for (i = 0; i < ramp.size; i++) -{ - // Fill out gamma ramp arrays as desired -} - -glfwSetGammaRamp(monitor, &ramp); -@endcode - -The gamma ramp data is copied before the function returns, so there is no need -to keep it around once the ramp has been set. - -It is recommended that your gamma ramp have the same size as the current gamma -ramp for that monitor. - -The current gamma ramp for a monitor is returned by @ref glfwGetGammaRamp. See -the reference documentation for the lifetime of the returned structure. - -@code -const GLFWgammaramp* ramp = glfwGetGammaRamp(monitor); -@endcode - -If you wish to set a regular gamma ramp, you can have GLFW calculate it for you -from the desired exponent with @ref glfwSetGamma, which in turn calls @ref -glfwSetGammaRamp with the resulting ramp. - -@code -glfwSetGamma(monitor, 1.0); -@endcode - -To experiment with gamma correction via the @ref glfwSetGamma function, run the -`gamma` test program. - -@note The software controlled gamma ramp is applied _in addition_ to the -hardware gamma correction, which today is usually an approximation of sRGB -gamma. This means that setting a perfectly linear ramp, or gamma 1.0, will -produce the default (usually sRGB-like) behavior. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/moving.dox b/third_party/penumbra/vendor/glfw/docs/moving.dox deleted file mode 100644 index 85ba0a70c07..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/moving.dox +++ /dev/null @@ -1,513 +0,0 @@ -/*! - -@page moving_guide Moving from GLFW 2 to 3 - -@tableofcontents - -This is a transition guide for moving from GLFW 2 to 3. It describes what has -changed or been removed, but does _not_ include -[new features](@ref news) unless they are required when moving an existing code -base onto the new API. For example, the new multi-monitor functions are -required to create full screen windows with GLFW 3. - - -@section moving_removed Changed and removed features - -@subsection moving_renamed_files Renamed library and header file - -The GLFW 3 header is named @ref glfw3.h and moved to the `GLFW` directory, to -avoid collisions with the headers of other major versions. Similarly, the GLFW -3 library is named `glfw3,` except when it's installed as a shared library on -Unix-like systems, where it uses the -[soname](https://en.wikipedia.org/wiki/soname) `libglfw.so.3`. - -@par Old syntax -@code -#include -@endcode - -@par New syntax -@code -#include -@endcode - - -@subsection moving_threads Removal of threading functions - -The threading functions have been removed, including the per-thread sleep -function. They were fairly primitive, under-used, poorly integrated and took -time away from the focus of GLFW (i.e. context, input and window). There are -better threading libraries available and native threading support is available -in both [C++11](https://en.cppreference.com/w/cpp/thread) and -[C11](https://en.cppreference.com/w/c/thread), both of which are gaining -traction. - -If you wish to use the C++11 or C11 facilities but your compiler doesn't yet -support them, see the -[TinyThread++](https://gitorious.org/tinythread/tinythreadpp) and -[TinyCThread](https://github.com/tinycthread/tinycthread) projects created by -the original author of GLFW. These libraries implement a usable subset of the -threading APIs in C++11 and C11, and in fact some GLFW 3 test programs use -TinyCThread. - -However, GLFW 3 has better support for _use from multiple threads_ than GLFW -2 had. Contexts can be made current on any thread, although only a single -thread at a time, and the documentation explicitly states which functions may be -used from any thread and which must only be used from the main thread. - -@par Removed functions -`glfwSleep`, `glfwCreateThread`, `glfwDestroyThread`, `glfwWaitThread`, -`glfwGetThreadID`, `glfwCreateMutex`, `glfwDestroyMutex`, `glfwLockMutex`, -`glfwUnlockMutex`, `glfwCreateCond`, `glfwDestroyCond`, `glfwWaitCond`, -`glfwSignalCond`, `glfwBroadcastCond` and `glfwGetNumberOfProcessors`. - -@par Removed types -`GLFWthreadfun` - - -@subsection moving_image Removal of image and texture loading - -The image and texture loading functions have been removed. They only supported -the Targa image format, making them mostly useful for beginner level examples. -To become of sufficiently high quality to warrant keeping them in GLFW 3, they -would need not only to support other formats, but also modern extensions to -OpenGL texturing. This would either add a number of external -dependencies (libjpeg, libpng, etc.), or force GLFW to ship with inline versions -of these libraries. - -As there already are libraries doing this, it is unnecessary both to duplicate -the work and to tie the duplicate to GLFW. The resulting library would also be -platform-independent, as both OpenGL and stdio are available wherever GLFW is. - -@par Removed functions -`glfwReadImage`, `glfwReadMemoryImage`, `glfwFreeImage`, `glfwLoadTexture2D`, -`glfwLoadMemoryTexture2D` and `glfwLoadTextureImage2D`. - - -@subsection moving_stdcall Removal of GLFWCALL macro - -The `GLFWCALL` macro, which made callback functions use -[__stdcall](https://msdn.microsoft.com/en-us/library/zxk0tw93.aspx) on Windows, -has been removed. GLFW is written in C, not Pascal. Removing this macro means -there's one less thing for application programmers to remember, i.e. the -requirement to mark all callback functions with `GLFWCALL`. It also simplifies -the creation of DLLs and DLL link libraries, as there's no need to explicitly -disable `@n` entry point suffixes. - -@par Old syntax -@code -void GLFWCALL callback_function(...); -@endcode - -@par New syntax -@code -void callback_function(...); -@endcode - - -@subsection moving_window_handles Window handle parameters - -Because GLFW 3 supports multiple windows, window handle parameters have been -added to all window-related GLFW functions and callbacks. The handle of -a newly created window is returned by @ref glfwCreateWindow (formerly -`glfwOpenWindow`). Window handles are pointers to the -[opaque](https://en.wikipedia.org/wiki/Opaque_data_type) type @ref GLFWwindow. - -@par Old syntax -@code -glfwSetWindowTitle("New Window Title"); -@endcode - -@par New syntax -@code -glfwSetWindowTitle(window, "New Window Title"); -@endcode - - -@subsection moving_monitor Explicit monitor selection - -GLFW 3 provides support for multiple monitors. To request a full screen mode window, -instead of passing `GLFW_FULLSCREEN` you specify which monitor you wish the -window to use. The @ref glfwGetPrimaryMonitor function returns the monitor that -GLFW 2 would have selected, but there are many other -[monitor functions](@ref monitor_guide). Monitor handles are pointers to the -[opaque](https://en.wikipedia.org/wiki/Opaque_data_type) type @ref GLFWmonitor. - -@par Old basic full screen -@code -glfwOpenWindow(640, 480, 8, 8, 8, 0, 24, 0, GLFW_FULLSCREEN); -@endcode - -@par New basic full screen -@code -window = glfwCreateWindow(640, 480, "My Window", glfwGetPrimaryMonitor(), NULL); -@endcode - -@note The framebuffer bit depth parameters of `glfwOpenWindow` have been turned -into [window hints](@ref window_hints), but as they have been given -[sane defaults](@ref window_hints_values) you rarely need to set these hints. - - -@subsection moving_autopoll Removal of automatic event polling - -GLFW 3 does not automatically poll for events in @ref glfwSwapBuffers, meaning -you need to call @ref glfwPollEvents or @ref glfwWaitEvents yourself. Unlike -buffer swap, which acts on a single window, the event processing functions act -on all windows at once. - -@par Old basic main loop -@code -while (...) -{ - // Process input - // Render output - glfwSwapBuffers(); -} -@endcode - -@par New basic main loop -@code -while (...) -{ - // Process input - // Render output - glfwSwapBuffers(window); - glfwPollEvents(); -} -@endcode - - -@subsection moving_context Explicit context management - -Each GLFW 3 window has its own OpenGL context and only you, the application -programmer, can know which context should be current on which thread at any -given time. Therefore, GLFW 3 leaves that decision to you. - -This means that you need to call @ref glfwMakeContextCurrent after creating -a window before you can call any OpenGL functions. - - -@subsection moving_hidpi Separation of window and framebuffer sizes - -Window positions and sizes now use screen coordinates, which may not be the same -as pixels on machines with high-DPI monitors. This is important as OpenGL uses -pixels, not screen coordinates. For example, the rectangle specified with -`glViewport` needs to use pixels. Therefore, framebuffer size functions have -been added. You can retrieve the size of the framebuffer of a window with @ref -glfwGetFramebufferSize function. A framebuffer size callback has also been -added, which can be set with @ref glfwSetFramebufferSizeCallback. - -@par Old basic viewport setup -@code -glfwGetWindowSize(&width, &height); -glViewport(0, 0, width, height); -@endcode - -@par New basic viewport setup -@code -glfwGetFramebufferSize(window, &width, &height); -glViewport(0, 0, width, height); -@endcode - - -@subsection moving_window_close Window closing changes - -The `GLFW_OPENED` window parameter has been removed. As long as the window has -not been destroyed, whether through @ref glfwDestroyWindow or @ref -glfwTerminate, the window is "open". - -A user attempting to close a window is now just an event like any other. Unlike -GLFW 2, windows and contexts created with GLFW 3 will never be destroyed unless -you choose them to be. Each window now has a close flag that is set to -`GLFW_TRUE` when the user attempts to close that window. By default, nothing else -happens and the window stays visible. It is then up to you to either destroy -the window, take some other action or ignore the request. - -You can query the close flag at any time with @ref glfwWindowShouldClose and set -it at any time with @ref glfwSetWindowShouldClose. - -@par Old basic main loop -@code -while (glfwGetWindowParam(GLFW_OPENED)) -{ - ... -} -@endcode - -@par New basic main loop -@code -while (!glfwWindowShouldClose(window)) -{ - ... -} -@endcode - -The close callback no longer returns a value. Instead, it is called after the -close flag has been set so it can override its value, if it chooses to, before -event processing completes. You may however not call @ref glfwDestroyWindow -from the close callback (or any other window related callback). - -@par Old syntax -@code -int GLFWCALL window_close_callback(void); -@endcode - -@par New syntax -@code -void window_close_callback(GLFWwindow* window); -@endcode - -@note GLFW never clears the close flag to `GLFW_FALSE`, meaning you can use it -for other reasons to close the window as well, for example the user choosing -Quit from an in-game menu. - - -@subsection moving_hints Persistent window hints - -The `glfwOpenWindowHint` function has been renamed to @ref glfwWindowHint. - -Window hints are no longer reset to their default values on window creation, but -instead retain their values until modified by @ref glfwWindowHint or @ref -glfwDefaultWindowHints, or until the library is terminated and re-initialized. - - -@subsection moving_video_modes Video mode enumeration - -Video mode enumeration is now per-monitor. The @ref glfwGetVideoModes function -now returns all available modes for a specific monitor instead of requiring you -to guess how large an array you need. The `glfwGetDesktopMode` function, which -had poorly defined behavior, has been replaced by @ref glfwGetVideoMode, which -returns the current mode of a monitor. - - -@subsection moving_char_up Removal of character actions - -The action parameter of the [character callback](@ref GLFWcharfun) has been -removed. This was an artefact of the origin of GLFW, i.e. being developed in -English by a Swede. However, many keyboard layouts require more than one key to -produce characters with diacritical marks. Even the Swedish keyboard layout -requires this for uncommon cases like ü. - -@par Old syntax -@code -void GLFWCALL character_callback(int character, int action); -@endcode - -@par New syntax -@code -void character_callback(GLFWwindow* window, int character); -@endcode - - -@subsection moving_cursorpos Cursor position changes - -The `glfwGetMousePos` function has been renamed to @ref glfwGetCursorPos, -`glfwSetMousePos` to @ref glfwSetCursorPos and `glfwSetMousePosCallback` to @ref -glfwSetCursorPosCallback. - -The cursor position is now `double` instead of `int`, both for the direct -functions and for the callback. Some platforms can provide sub-pixel cursor -movement and this data is now passed on to the application where available. On -platforms where this is not provided, the decimal part is zero. - -GLFW 3 only allows you to position the cursor within a window using @ref -glfwSetCursorPos (formerly `glfwSetMousePos`) when that window is active. -Unless the window is active, the function fails silently. - - -@subsection moving_wheel Wheel position replaced by scroll offsets - -The `glfwGetMouseWheel` function has been removed. Scrolling is the input of -offsets and has no absolute position. The mouse wheel callback has been -replaced by a [scroll callback](@ref GLFWscrollfun) that receives -two-dimensional floating point scroll offsets. This allows you to receive -precise scroll data from for example modern touchpads. - -@par Old syntax -@code -void GLFWCALL mouse_wheel_callback(int position); -@endcode - -@par New syntax -@code -void scroll_callback(GLFWwindow* window, double xoffset, double yoffset); -@endcode - -@par Removed functions -`glfwGetMouseWheel` - - -@subsection moving_repeat Key repeat action - -The `GLFW_KEY_REPEAT` enable has been removed and key repeat is always enabled -for both keys and characters. A new key action, `GLFW_REPEAT`, has been added -to allow the [key callback](@ref GLFWkeyfun) to distinguish an initial key press -from a repeat. Note that @ref glfwGetKey still returns only `GLFW_PRESS` or -`GLFW_RELEASE`. - - -@subsection moving_keys Physical key input - -GLFW 3 key tokens map to physical keys, unlike in GLFW 2 where they mapped to -the values generated by the current keyboard layout. The tokens are named -according to the values they would have using the standard US layout, but this -is only a convenience, as most programmers are assumed to know that layout. -This means that (for example) `GLFW_KEY_LEFT_BRACKET` is always a single key and -is the same key in the same place regardless of what keyboard layouts the users -of your program has. - -The key input facility was never meant for text input, although using it that -way worked slightly better in GLFW 2. If you were using it to input text, you -should be using the character callback instead, on both GLFW 2 and 3. This will -give you the characters being input, as opposed to the keys being pressed. - -GLFW 3 has key tokens for all keys on a standard 105 key keyboard, so instead of -having to remember whether to check for `'a'` or `'A'`, you now check for -`GLFW_KEY_A`. - - -@subsection moving_joystick Joystick function changes - -The `glfwGetJoystickPos` function has been renamed to @ref glfwGetJoystickAxes. - -The `glfwGetJoystickParam` function and the `GLFW_PRESENT`, `GLFW_AXES` and -`GLFW_BUTTONS` tokens have been replaced by the @ref glfwJoystickPresent -function as well as axis and button counts returned by the @ref -glfwGetJoystickAxes and @ref glfwGetJoystickButtons functions. - - -@subsection moving_mbcs Win32 MBCS support - -The Win32 port of GLFW 3 will not compile in -[MBCS mode](https://msdn.microsoft.com/en-us/library/5z097dxa.aspx). -However, because the use of the Unicode version of the Win32 API doesn't affect -the process as a whole, but only those windows created using it, it's perfectly -possible to call MBCS functions from other parts of the same application. -Therefore, even if an application using GLFW has MBCS mode code, there's no need -for GLFW itself to support it. - - -@subsection moving_windows Support for versions of Windows older than XP - -All explicit support for version of Windows older than XP has been removed. -There is no code that actively prevents GLFW 3 from running on these earlier -versions, but it uses Win32 functions that those versions lack. - -Windows XP was released in 2001, and by now (January 2015) it has not only -replaced almost all earlier versions of Windows, but is itself rapidly being -replaced by Windows 7 and 8. The MSDN library doesn't even provide -documentation for version older than Windows 2000, making it difficult to -maintain compatibility with these versions even if it was deemed worth the -effort. - -The Win32 API has also not stood still, and GLFW 3 uses many functions only -present on Windows XP or later. Even supporting an OS as new as XP (new -from the perspective of GLFW 2, which still supports Windows 95) requires -runtime checking for a number of functions that are present only on modern -version of Windows. - - -@subsection moving_syskeys Capture of system-wide hotkeys - -The ability to disable and capture system-wide hotkeys like Alt+Tab has been -removed. Modern applications, whether they're games, scientific visualisations -or something else, are nowadays expected to be good desktop citizens and allow -these hotkeys to function even when running in full screen mode. - - -@subsection moving_terminate Automatic termination - -GLFW 3 does not register @ref glfwTerminate with `atexit` at initialization, -because `exit` calls registered functions from the calling thread and while it -is permitted to call `exit` from any thread, @ref glfwTerminate must only be -called from the main thread. - -To release all resources allocated by GLFW, you should call @ref glfwTerminate -yourself, from the main thread, before the program terminates. Note that this -destroys all windows not already destroyed with @ref glfwDestroyWindow, -invalidating any window handles you may still have. - - -@subsection moving_glu GLU header inclusion - -GLFW 3 does not by default include the GLU header and GLU itself has been -deprecated by [Khronos](https://en.wikipedia.org/wiki/Khronos_Group). __New -projects should not use GLU__, but if you need it for legacy code that -has been moved to GLFW 3, you can request that the GLFW header includes it by -defining @ref GLFW_INCLUDE_GLU before the inclusion of the GLFW header. - -@par Old syntax -@code -#include -@endcode - -@par New syntax -@code -#define GLFW_INCLUDE_GLU -#include -@endcode - -There are many libraries that offer replacements for the functionality offered -by GLU. For the matrix helper functions, see math libraries like -[GLM](https://github.com/g-truc/glm) (for C++), -[linmath.h](https://github.com/datenwolf/linmath.h) (for C) and others. For the -tessellation functions, see for example -[libtess2](https://github.com/memononen/libtess2). - - -@section moving_tables Name change tables - - -@subsection moving_renamed_functions Renamed functions - -| GLFW 2 | GLFW 3 | Notes | -| --------------------------- | ----------------------------- | ----- | -| `glfwOpenWindow` | @ref glfwCreateWindow | All channel bit depths are now hints -| `glfwCloseWindow` | @ref glfwDestroyWindow | | -| `glfwOpenWindowHint` | @ref glfwWindowHint | Now accepts all `GLFW_*_BITS` tokens | -| `glfwEnable` | @ref glfwSetInputMode | | -| `glfwDisable` | @ref glfwSetInputMode | | -| `glfwGetMousePos` | @ref glfwGetCursorPos | | -| `glfwSetMousePos` | @ref glfwSetCursorPos | | -| `glfwSetMousePosCallback` | @ref glfwSetCursorPosCallback | | -| `glfwSetMouseWheelCallback` | @ref glfwSetScrollCallback | Accepts two-dimensional scroll offsets as doubles | -| `glfwGetJoystickPos` | @ref glfwGetJoystickAxes | | -| `glfwGetWindowParam` | @ref glfwGetWindowAttrib | | -| `glfwGetGLVersion` | @ref glfwGetWindowAttrib | Use `GLFW_CONTEXT_VERSION_MAJOR`, `GLFW_CONTEXT_VERSION_MINOR` and `GLFW_CONTEXT_REVISION` | -| `glfwGetDesktopMode` | @ref glfwGetVideoMode | Returns the current mode of a monitor | -| `glfwGetJoystickParam` | @ref glfwJoystickPresent | The axis and button counts are provided by @ref glfwGetJoystickAxes and @ref glfwGetJoystickButtons | - - -@subsection moving_renamed_types Renamed types - -| GLFW 2 | GLFW 3 | Notes | -| ------------------- | --------------------- | | -| `GLFWmousewheelfun` | @ref GLFWscrollfun | | -| `GLFWmouseposfun` | @ref GLFWcursorposfun | | - - -@subsection moving_renamed_tokens Renamed tokens - -| GLFW 2 | GLFW 3 | Notes | -| --------------------------- | ---------------------------- | ----- | -| `GLFW_OPENGL_VERSION_MAJOR` | `GLFW_CONTEXT_VERSION_MAJOR` | Renamed as it applies to OpenGL ES as well | -| `GLFW_OPENGL_VERSION_MINOR` | `GLFW_CONTEXT_VERSION_MINOR` | Renamed as it applies to OpenGL ES as well | -| `GLFW_FSAA_SAMPLES` | `GLFW_SAMPLES` | Renamed to match the OpenGL API | -| `GLFW_ACTIVE` | `GLFW_FOCUSED` | Renamed to match the window focus callback | -| `GLFW_WINDOW_NO_RESIZE` | `GLFW_RESIZABLE` | The default has been inverted | -| `GLFW_MOUSE_CURSOR` | `GLFW_CURSOR` | Used with @ref glfwSetInputMode | -| `GLFW_KEY_ESC` | `GLFW_KEY_ESCAPE` | | -| `GLFW_KEY_DEL` | `GLFW_KEY_DELETE` | | -| `GLFW_KEY_PAGEUP` | `GLFW_KEY_PAGE_UP` | | -| `GLFW_KEY_PAGEDOWN` | `GLFW_KEY_PAGE_DOWN` | | -| `GLFW_KEY_KP_NUM_LOCK` | `GLFW_KEY_NUM_LOCK` | | -| `GLFW_KEY_LCTRL` | `GLFW_KEY_LEFT_CONTROL` | | -| `GLFW_KEY_LSHIFT` | `GLFW_KEY_LEFT_SHIFT` | | -| `GLFW_KEY_LALT` | `GLFW_KEY_LEFT_ALT` | | -| `GLFW_KEY_LSUPER` | `GLFW_KEY_LEFT_SUPER` | | -| `GLFW_KEY_RCTRL` | `GLFW_KEY_RIGHT_CONTROL` | | -| `GLFW_KEY_RSHIFT` | `GLFW_KEY_RIGHT_SHIFT` | | -| `GLFW_KEY_RALT` | `GLFW_KEY_RIGHT_ALT` | | -| `GLFW_KEY_RSUPER` | `GLFW_KEY_RIGHT_SUPER` | | - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/news.dox b/third_party/penumbra/vendor/glfw/docs/news.dox deleted file mode 100644 index da97215c8ee..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/news.dox +++ /dev/null @@ -1,856 +0,0 @@ -/*! - -@page news Release notes - -@tableofcontents - - -@section news_33 Release notes for version 3.3 - -These are the release notes for version 3.3. For a more detailed view including -all fixed bugs see the [version history](https://www.glfw.org/changelog.html). - -Please review the caveats, deprecations and removals if your project was written -against an earlier version of GLFW 3. - - -@subsection features_33 New features in version 3.3 - -@subsubsection gamepad_33 Gamepad input via SDL_GameControllerDB - -GLFW can now remap game controllers to a standard Xbox-like layout using -a built-in copy of SDL_GameControllerDB. Call @ref glfwJoystickIsGamepad to -check if a joystick has a mapping, @ref glfwGetGamepadState to retrieve its -input state, @ref glfwUpdateGamepadMappings to add newer mappings and @ref -glfwGetGamepadName and @ref glfwGetJoystickGUID for mapping related information. - -For more information see @ref gamepad. - - -@subsubsection moltenvk_33 Support for Vulkan on macOS via MoltenVK - -GLFW now supports [MoltenVK](https://moltengl.com/moltenvk/), a Vulkan -implementation on top of the Metal API, and its `VK_MVK_macos_surface` window -surface creation extension. MoltenVK is included in the [macOS Vulkan -SDK](https://vulkan.lunarg.com/). - -For more information see @ref vulkan_guide. - - -@subsubsection content_scale_33 Content scale queries for DPI-aware rendering - -GLFW now provides content scales for windows and monitors, i.e. the ratio -between their current DPI and the platform's default DPI, with @ref -glfwGetWindowContentScale and @ref glfwGetMonitorContentScale. - -Changes of the content scale of a window can be received with the window content -scale callback, set with @ref glfwSetWindowContentScaleCallback. - -The @ref GLFW_SCALE_TO_MONITOR window hint enables automatic resizing of a -window by the content scale of the monitor it is placed, on platforms like -Windows where this is necessary. This takes effect both on creation and when -the window is moved between monitors. It is related to but different from -[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint). - -For more information see @ref window_scale. - - -@subsubsection setwindowattrib_33 Support for updating window attributes - -GLFW now supports changing the [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), -[GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), -[GLFW_FLOATING](@ref GLFW_FLOATING_attrib), -[GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and -[GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib) attributes for existing -windows with @ref glfwSetWindowAttrib. - -For more information see @ref window_attribs. - - -@subsubsection raw_motion_33 Support for raw mouse motion - -GLFW now supports raw (unscaled and unaccelerated) mouse motion in disabled -cursor mode with the [GLFW_RAW_MOUSE_MOTION](@ref GLFW_RAW_MOUSE_MOTION) input -mode. Raw mouse motion input is not yet implemented on macOS. Call @ref -glfwRawMouseMotionSupported to check if GLFW can provide raw mouse motion on the -current system. - -For more information see @ref raw_mouse_motion. - - -@subsubsection joysticks_33 Joystick hats - -GLFW can now return the state of hats (i.e. POVs or D-pads) of a joystick with -@ref glfwGetJoystickHats. For compatibility, hats are also exposed as buttons. -This can be disabled with the @ref GLFW_JOYSTICK_HAT_BUTTONS initialization -hint. - -For more information see @ref joystick_hat. - - -@subsubsection geterror_33 Error query - -GLFW now supports querying the last error code for the calling thread and its -human-readable description with @ref glfwGetError. This can be used instead of -or together with the error callback. - -For more information see @ref error_handling. - - -@subsubsection init_hints_33 Support for initialization hints - -GLFW now supports setting library initialization hints with @ref glfwInitHint. -These must be set before initialization to take effect. Some of these hints are -platform specific but are safe to set on any platform. - -For more information see @ref init_hints. - - -@subsubsection attention_33 User attention request - -GLFW now supports requesting user attention with @ref -glfwRequestWindowAttention. Where possible this calls attention to the -specified window. On platforms like macOS it calls attention to the whole -application. - -For more information see @ref window_attention. - - -@subsubsection maximize_33 Window maximization callback - -GLFW now supports notifying the application that the window has been maximized -@ref glfwSetWindowMaximizeCallback. This is called both when the window was -maximized by the user and when it was done with @ref glfwMaximizeWindow. - -For more information see @ref window_maximize. - - -@subsubsection workarea_33 Query for the monitor work area - -GLFW now supports querying the work area of a monitor, i.e. the area not -occupied by task bars or global menu bars, with @ref glfwGetMonitorWorkarea. On -platforms that lack this concept, the whole area of the monitor is returned. - -For more information see @ref monitor_workarea. - - -@subsubsection transparency_33 Transparent windows and framebuffers - -GLFW now supports the creation of windows with transparent framebuffers on -systems with desktop compositing enabled with the @ref -GLFW_TRANSPARENT_FRAMEBUFFER window hint and attribute. This hint must be set -before window creation and leaves any window decorations opaque. - -GLFW now also supports whole window transparency with @ref glfwGetWindowOpacity -and @ref glfwSetWindowOpacity. This value controls the opacity of the whole -window including decorations and unlike framebuffer transparency can be changed -at any time after window creation. - -For more information see @ref window_transparency. - - -@subsubsection key_scancode_33 Query for the scancode of a key - -GLFW now supports querying the platform dependent scancode of any physical key -with @ref glfwGetKeyScancode. - -For more information see @ref input_key. - - -@subsubsection center_cursor_33 Cursor centering window hint - -GLFW now supports controlling whether the cursor is centered over newly created -full screen windows with the [GLFW_CENTER_CURSOR](@ref GLFW_CENTER_CURSOR_hint) -window hint. It is enabled by default. - - -@subsubsection cursor_hover_33 Mouse cursor hover window attribute - -GLFW now supports polling whether the cursor is hovering over the window content -area with the [GLFW_HOVERED](@ref GLFW_HOVERED_attrib) window attribute. This -attribute corresponds to the [cursor enter/leave](@ref cursor_enter) event. - - -@subsubsection focusonshow_33 Window hint and attribute for input focus on show - -GLFW now has the [GLFW_FOCUS_ON_SHOW](@ref GLFW_DECORATED_hint) window hint and -attribute for controlling whether a window gets input focus when shown. It is -enabled by default. It applies both when creating an visible window with @ref -glfwCreateWindow and when showing it with @ref glfwShowWindow. - -This is a workaround for GLFW 3.0 lacking @ref glfwFocusWindow and will be -corrected in the next major version. - -For more information see @ref window_hide. - - -@subsubsection device_userptr_33 Monitor and joystick user pointers - -GLFW now supports setting and querying user pointers for connected monitors and -joysticks with @ref glfwSetMonitorUserPointer, @ref glfwGetMonitorUserPointer, -@ref glfwSetJoystickUserPointer and @ref glfwGetJoystickUserPointer. - -For more information see @ref monitor_userptr and @ref joystick_userptr. - - -@subsubsection macos_nib_33 macOS menu bar from nib file - -GLFW will now load a `MainMenu.nib` file if found in the `Contents/Resources` -directory of the application bundle, as a way to replace the GLFW menu bar -without recompiling GLFW. This behavior can be disabled with the -[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint) initialization hint. - - -@subsubsection glext_33 Support for more context creation extensions - -The context hint @ref GLFW_SRGB_CAPABLE now supports OpenGL ES via -`WGL_EXT_colorspace`, the context hint @ref GLFW_CONTEXT_NO_ERROR now supports -`WGL_ARB_create_context_no_error` and `GLX_ARB_create_context_no_error`, the -context hint @ref GLFW_CONTEXT_RELEASE_BEHAVIOR now supports -`EGL_KHR_context_flush_control` and @ref glfwGetProcAddress now supports -`EGL_KHR_get_all_proc_addresses`. - - -@subsubsection osmesa_33 OSMesa off-screen context creation support - -GLFW now supports creating off-screen OpenGL contexts using -[OSMesa](https://www.mesa3d.org/osmesa.html) by setting -[GLFW_CONTEXT_CREATION_API](@ref GLFW_CONTEXT_CREATION_API_hint) to -`GLFW_OSMESA_CONTEXT_API`. Native access function have been added to retrieve -the OSMesa color and depth buffers. - -There is also a new null backend that uses OSMesa as its native context -creation API, intended for automated testing. This backend does not provide -input. - - -@subsection caveats_33 Caveats for version 3.3 - -@subsubsection joystick_layout_33 Layout of joysticks have changed - -The way joystick elements are arranged have changed to match SDL2 in order to -support SDL_GameControllerDB mappings. The layout of joysticks may -change again if required for compatibility with SDL2. If you need a known and -stable layout for game controllers, see if you can switch to @ref gamepad. - -Existing code that depends on a specific joystick layout will likely have to be -updated. - - -@subsubsection wait_events_33 No window required to wait for events - -The @ref glfwWaitEvents and @ref glfwWaitEventsTimeout functions no longer need -a window to be created to wait for events. Before version 3.3 these functions -would return immediately if there were no user-created windows. On platforms -where only windows can receive events, an internal helper window is used. - -Existing code that depends on the earlier behavior will likely have to be -updated. - - -@subsubsection gamma_ramp_size_33 Gamma ramp size of 256 may be rejected - -The documentation for versions before 3.3 stated that a gamma ramp size of 256 -would always be accepted. This was never the case on X11 and could lead to -artifacts on macOS. The @ref glfwSetGamma function has been updated to always -generate a ramp of the correct size. - -Existing code that hardcodes a size of 256 should be updated to use the size of -the current ramp of a monitor when setting a new ramp for that monitor. - - -@subsubsection xinput_deadzone_33 Windows XInput deadzone removed - -GLFW no longer applies any deadzone to the input state received from the XInput -API. This was never done for any other platform joystick API so this change -makes the behavior more consistent but you will need to apply your own deadzone -if desired. - - -@subsubsection x11_clipboard_33 X11 clipboard transfer limits - -GLFW now supports reading clipboard text via the `INCR` method, which removes -the limit on how much text can be read with @ref glfwGetClipboardString. -However, writing via this method is not yet supported, so you may not be able to -write a very large string with @ref glfwSetClipboardString even if you read it -from the clipboard earlier. - -The exact size limit for writing to the clipboard is negotiated with each -receiving application but is at least several tens of kilobytes. Note that only -the read limit has changed. Any string that could be written before still can -be. - - -@subsubsection x11_linking_33 X11 extension libraries are loaded dynamically - -GLFW now loads all X11 extension libraries at initialization. The only X11 -library you need to link against is `libX11`. The header files for the -extension libraries are still required for compilation. - -Existing projects and makefiles that link GLFW directly against the extension -libraries should still build correctly but will add these libraries as load-time -dependencies. - - -@subsubsection cmake_version_33 CMake 3.0 or later is required - -The minimum CMake version has been raised from 2.8.12 to 3.0. This is only -a requirement of the GLFW CMake files. The GLFW source files do not depend on -CMake. - - -@subsection deprecations_33 Deprecations in version 3.3 - -@subsubsection charmods_callback_33 Character with modifiers callback - -The character with modifiers callback set with @ref glfwSetCharModsCallback has -been deprecated and should if possible not be used. - -Existing code should still work but further bug fixes will likely not be made. -The callback will be removed in the next major version. - - -@subsubsection clipboard_window_33 Window parameter to clipboard functions - -The window parameter of the clipboard functions @ref glfwGetClipboardString and -@ref glfwSetClipboardString has been deprecated and is no longer used on any -platform. On platforms where the clipboard must be owned by a specific window, -an internal helper window is used. - -Existing code should still work unless it depends on a specific window owning -the clipboard. New code may pass `NULL` as the window argument. The parameter -will be removed in a future release. - - -@subsection removals_33 Removals in 3.3 - -@subsubsection macos_options_33 macOS specific CMake options and macros - -The `GLFW_USE_RETINA`, `GLFW_USE_CHDIR` and `GLFW_USE_MENUBAR` CMake options and -the `_GLFW_USE_RETINA`, `_GLFW_USE_CHDIR` and `_GLFW_USE_MENUBAR` compile-time -macros have been removed. - -These options and macros are replaced by the window hint -[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint) -and the init hints -[GLFW_COCOA_CHDIR_RESOURCES](@ref GLFW_COCOA_CHDIR_RESOURCES_hint) and -[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint). - -Existing projects and makefiles that set these options or define these macros -during compilation of GLFW will still build but it will have no effect and the -default behaviors will be used. - - -@subsubsection vulkan_sdk_33 LunarG Vulkan SDK dependency - -The GLFW test programs that previously depended on the LunarG Vulkan SDK now -instead uses a Vulkan loader generated by -[glad2](https://github.com/Dav1dde/glad). This means the GLFW CMake files no -longer look for the Vulkan SDK. - -Existing CMake projects that depended on the Vulkan SDK cache variables from -GLFW will need to call `find_package(Vulkan)` themselves. CMake 3.7 and later -already comes with a -[Vulkan find module](https://cmake.org/cmake/help/latest/module/FindVulkan.html) -similar to the one GLFW previously included. - - -@subsubsection lib_suffix_33 CMake option LIB_SUFFIX - -The `LIB_SUFFIX` CMake option has been removed. GLFW now uses the -GNUInstallDirs CMake package to handle platform specific details like the -library directory suffix and the `LIB_SUFFIX` CMake option has been removed. - -Existing projects and makefiles that set the `LIB_SUFFIX` option will use the -suffix chosen by the GNUInstallDirs package and the option will be ignored. - - -@subsubsection mir_removed_33 Mir support - -The experimental Mir support has been completely removed as the Mir project has -implemented support for the Wayland protocol and is recommending that -applications use that instead. - -Existing projects and makefiles that select Mir when compiling GLFW will fail. -Use Wayland or X11 instead. - - -@subsection symbols_33 New symbols in version 3.3 - -@subsubsection functions_33 New functions in version 3.3 - - - @ref glfwInitHint - - @ref glfwGetError - - @ref glfwGetMonitorWorkarea - - @ref glfwGetMonitorContentScale - - @ref glfwGetMonitorUserPointer - - @ref glfwSetMonitorUserPointer - - @ref glfwWindowHintString - - @ref glfwGetWindowContentScale - - @ref glfwGetWindowOpacity - - @ref glfwSetWindowOpacity - - @ref glfwRequestWindowAttention - - @ref glfwSetWindowAttrib - - @ref glfwSetWindowMaximizeCallback - - @ref glfwSetWindowContentScaleCallback - - @ref glfwRawMouseMotionSupported - - @ref glfwGetKeyScancode - - @ref glfwGetJoystickHats - - @ref glfwGetJoystickGUID - - @ref glfwGetJoystickUserPointer - - @ref glfwSetJoystickUserPointer - - @ref glfwJoystickIsGamepad - - @ref glfwUpdateGamepadMappings - - @ref glfwGetGamepadName - - @ref glfwGetGamepadState - - -@subsubsection types_33 New types in version 3.3 - - - @ref GLFWwindowmaximizefun - - @ref GLFWwindowcontentscalefun - - @ref GLFWgamepadstate - - -@subsubsection constants_33 New constants in version 3.3 - - - @ref GLFW_NO_ERROR - - @ref GLFW_JOYSTICK_HAT_BUTTONS - - @ref GLFW_COCOA_CHDIR_RESOURCES - - @ref GLFW_COCOA_MENUBAR - - @ref GLFW_CENTER_CURSOR - - @ref GLFW_TRANSPARENT_FRAMEBUFFER - - @ref GLFW_HOVERED - - @ref GLFW_FOCUS_ON_SHOW - - @ref GLFW_SCALE_TO_MONITOR - - @ref GLFW_COCOA_RETINA_FRAMEBUFFER - - @ref GLFW_COCOA_FRAME_NAME - - @ref GLFW_COCOA_GRAPHICS_SWITCHING - - @ref GLFW_X11_CLASS_NAME - - @ref GLFW_X11_INSTANCE_NAME - - @ref GLFW_OSMESA_CONTEXT_API - - @ref GLFW_HAT_CENTERED - - @ref GLFW_HAT_UP - - @ref GLFW_HAT_RIGHT - - @ref GLFW_HAT_DOWN - - @ref GLFW_HAT_LEFT - - @ref GLFW_HAT_RIGHT_UP - - @ref GLFW_HAT_RIGHT_DOWN - - @ref GLFW_HAT_LEFT_UP - - @ref GLFW_HAT_LEFT_DOWN - - @ref GLFW_MOD_CAPS_LOCK - - @ref GLFW_MOD_NUM_LOCK - - @ref GLFW_LOCK_KEY_MODS - - @ref GLFW_RAW_MOUSE_MOTION - - @ref GLFW_GAMEPAD_BUTTON_A - - @ref GLFW_GAMEPAD_BUTTON_B - - @ref GLFW_GAMEPAD_BUTTON_X - - @ref GLFW_GAMEPAD_BUTTON_Y - - @ref GLFW_GAMEPAD_BUTTON_LEFT_BUMPER - - @ref GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER - - @ref GLFW_GAMEPAD_BUTTON_BACK - - @ref GLFW_GAMEPAD_BUTTON_START - - @ref GLFW_GAMEPAD_BUTTON_GUIDE - - @ref GLFW_GAMEPAD_BUTTON_LEFT_THUMB - - @ref GLFW_GAMEPAD_BUTTON_RIGHT_THUMB - - @ref GLFW_GAMEPAD_BUTTON_DPAD_UP - - @ref GLFW_GAMEPAD_BUTTON_DPAD_RIGHT - - @ref GLFW_GAMEPAD_BUTTON_DPAD_DOWN - - @ref GLFW_GAMEPAD_BUTTON_DPAD_LEFT - - @ref GLFW_GAMEPAD_BUTTON_LAST - - @ref GLFW_GAMEPAD_BUTTON_CROSS - - @ref GLFW_GAMEPAD_BUTTON_CIRCLE - - @ref GLFW_GAMEPAD_BUTTON_SQUARE - - @ref GLFW_GAMEPAD_BUTTON_TRIANGLE - - @ref GLFW_GAMEPAD_AXIS_LEFT_X - - @ref GLFW_GAMEPAD_AXIS_LEFT_Y - - @ref GLFW_GAMEPAD_AXIS_RIGHT_X - - @ref GLFW_GAMEPAD_AXIS_RIGHT_Y - - @ref GLFW_GAMEPAD_AXIS_LEFT_TRIGGER - - @ref GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER - - @ref GLFW_GAMEPAD_AXIS_LAST - - -@section news_32 Release notes for 3.2 - -These are the release notes for version 3.2. For a more detailed view including -all fixed bugs see the [version history](https://www.glfw.org/changelog.html). - - -@subsection features_32 New features in version 3.2 - -@subsubsection news_32_vulkan Support for Vulkan - -GLFW now supports basic integration with Vulkan with @ref glfwVulkanSupported, -@ref glfwGetRequiredInstanceExtensions, @ref glfwGetInstanceProcAddress, @ref -glfwGetPhysicalDevicePresentationSupport and @ref glfwCreateWindowSurface. -Vulkan header inclusion can be selected with -@ref GLFW_INCLUDE_VULKAN. - - -@subsubsection news_32_setwindowmonitor Window mode switching - -GLFW now supports switching between windowed and full screen modes and updating -the monitor and desired resolution and refresh rate of full screen windows with -@ref glfwSetWindowMonitor. - - -@subsubsection news_32_maximize Window maxmimization support - -GLFW now supports window maximization with @ref glfwMaximizeWindow and the -@ref GLFW_MAXIMIZED window hint and attribute. - - -@subsubsection news_32_focus Window input focus control - -GLFW now supports giving windows input focus with @ref glfwFocusWindow. - - -@subsubsection news_32_sizelimits Window size limit support - -GLFW now supports setting both absolute and relative window size limits with -@ref glfwSetWindowSizeLimits and @ref glfwSetWindowAspectRatio. - - -@subsubsection news_32_keyname Localized key names - -GLFW now supports querying the localized name of printable keys with @ref -glfwGetKeyName, either by key token or by scancode. - - -@subsubsection news_32_waittimeout Wait for events with timeout - -GLFW now supports waiting for events for a set amount of time with @ref -glfwWaitEventsTimeout. - - -@subsubsection news_32_icon Window icon support - -GLFW now supports setting the icon of windows with @ref glfwSetWindowIcon. - - -@subsubsection news_32_timer Raw timer access - -GLFW now supports raw timer values with @ref glfwGetTimerValue and @ref -glfwGetTimerFrequency. - - -@subsubsection news_32_joystick Joystick connection callback - -GLFW now supports notifying when a joystick has been connected or disconnected -with @ref glfwSetJoystickCallback. - - -@subsubsection news_32_noapi Context-less windows - -GLFW now supports creating windows without a OpenGL or OpenGL ES context by -setting the [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_NO_API`. - - -@subsubsection news_32_contextapi Run-time context creation API selection - -GLFW now supports selecting and querying the context creation API at run-time -with the @ref GLFW_CONTEXT_CREATION_API hint and attribute. - - -@subsubsection news_32_noerror Error-free context creation - -GLFW now supports creating and querying OpenGL and OpenGL ES contexts that do -not emit errors with the @ref GLFW_CONTEXT_NO_ERROR hint, provided the machine -supports the `GL_KHR_no_error` extension. - - -@subsubsection news_32_cmake CMake config-file package support - -GLFW now supports being used as a -[config-file package](@ref build_link_cmake_package) from other projects for -easy linking with the library and its dependencies. - - -@section news_31 Release notes for 3.1 - -These are the release notes for version 3.1. For a more detailed view including -all fixed bugs see the [version history](https://www.glfw.org/changelog.html). - - -@subsection features_31 New features in version 3.1 - -@subsubsection news_31_cursor Custom mouse cursor images - -GLFW now supports creating and setting both custom cursor images and standard -cursor shapes. They are created with @ref glfwCreateCursor or @ref -glfwCreateStandardCursor, set with @ref glfwSetCursor and destroyed with @ref -glfwDestroyCursor. - -@see @ref cursor_object - - -@subsubsection news_31_drop Path drop event - -GLFW now provides a callback for receiving the paths of files and directories -dropped onto GLFW windows. The callback is set with @ref glfwSetDropCallback. - -@see @ref path_drop - - -@subsubsection news_31_emptyevent Main thread wake-up - -GLFW now provides the @ref glfwPostEmptyEvent function for posting an empty -event from another thread to the main thread event queue, causing @ref -glfwWaitEvents to return. - -@see @ref events - - -@subsubsection news_31_framesize Window frame size query - -GLFW now supports querying the size, on each side, of the frame around the -content area of a window, with @ref glfwGetWindowFrameSize. - -@see [Window size](@ref window_size) - - -@subsubsection news_31_autoiconify Simultaneous multi-monitor rendering - -GLFW now supports disabling auto-iconification of full screen windows with -the [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_hint) window hint. This is -intended for people building multi-monitor installations, where you need windows -to stay in full screen despite losing input focus. - - -@subsubsection news_31_floating Floating windows - -GLFW now supports floating windows, also called topmost or always on top, for -easier debugging with the @ref GLFW_FLOATING window hint and attribute. - - -@subsubsection news_31_focused Initially unfocused windows - -GLFW now supports preventing a windowed mode window from gaining input focus on -creation, with the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) window hint. - - -@subsubsection news_31_direct Direct access for window attributes and cursor position - -GLFW now queries the window input focus, visibility and iconification attributes -and the cursor position directly instead of returning cached data. - - -@subsubsection news_31_charmods Character with modifiers callback - -GLFW now provides a callback for character events with modifier key bits. The -callback is set with @ref glfwSetCharModsCallback. Unlike the regular character -callback, this will report character events that will not result in a character -being input, for example if the Control key is held down. - -@see @ref input_char - - -@subsubsection news_31_single Single buffered framebuffers - -GLFW now supports the creation of single buffered windows, with the @ref -GLFW_DOUBLEBUFFER hint. - - -@subsubsection news_31_glext Macro for including extension header - -GLFW now includes the extension header appropriate for the chosen OpenGL or -OpenGL ES header when @ref GLFW_INCLUDE_GLEXT is defined. GLFW does not provide -these headers. They must be provided by your development environment or your -OpenGL or OpenGL ES SDK. - - -@subsubsection news_31_release Context release behaviors - -GLFW now supports controlling and querying whether the pipeline is flushed when -a context is made non-current, with the @ref GLFW_CONTEXT_RELEASE_BEHAVIOR hint -and attribute, provided the machine supports the `GL_KHR_context_flush_control` -extension. - - -@subsubsection news_31_wayland (Experimental) Wayland support - -GLFW now has an _experimental_ Wayland display protocol backend that can be -selected on Linux with a CMake option. - - -@subsubsection news_31_mir (Experimental) Mir support - -GLFW now has an _experimental_ Mir display server backend that can be selected -on Linux with a CMake option. - - -@section news_30 Release notes for 3.0 - -These are the release notes for version 3.0. For a more detailed view including -all fixed bugs see the [version history](https://www.glfw.org/changelog.html). - - -@subsection features_30 New features in version 3.0 - -@subsubsection news_30_cmake CMake build system - -GLFW now uses the CMake build system instead of the various makefiles and -project files used by earlier versions. CMake is available for all platforms -supported by GLFW, is present in most package systems and can generate -makefiles and/or project files for most popular development environments. - -For more information on how to use CMake, see the -[CMake manual](https://cmake.org/cmake/help/documentation.html). - - -@subsubsection news_30_multiwnd Multi-window support - -GLFW now supports the creation of multiple windows, each with their own OpenGL -or OpenGL ES context, and all window functions now take a window handle. Event -callbacks are now per-window and are provided with the handle of the window that -received the event. The @ref glfwMakeContextCurrent function has been added to -select which context is current on a given thread. - - -@subsubsection news_30_multimon Multi-monitor support - -GLFW now explicitly supports multiple monitors. They can be enumerated with -@ref glfwGetMonitors, queried with @ref glfwGetVideoModes, @ref -glfwGetMonitorPos, @ref glfwGetMonitorName and @ref glfwGetMonitorPhysicalSize, -and specified at window creation to make the newly created window full screen on -that specific monitor. - - -@subsubsection news_30_unicode Unicode support - -All string arguments to GLFW functions and all strings returned by GLFW now use -the UTF-8 encoding. This includes the window title, error string, clipboard -text, monitor and joystick names as well as the extension function arguments (as -ASCII is a subset of UTF-8). - - -@subsubsection news_30_clipboard Clipboard text I/O - -GLFW now supports reading and writing plain text to and from the system -clipboard, with the @ref glfwGetClipboardString and @ref glfwSetClipboardString -functions. - - -@subsubsection news_30_gamma Gamma ramp support - -GLFW now supports setting and reading back the gamma ramp of monitors, with the -@ref glfwGetGammaRamp and @ref glfwSetGammaRamp functions. There is also @ref -glfwSetGamma, which generates a ramp from a gamma value and then sets it. - - -@subsubsection news_30_gles OpenGL ES support - -GLFW now supports the creation of OpenGL ES contexts, by setting the -[GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_OPENGL_ES_API`, where -creation of such contexts are supported. Note that GLFW _does not implement_ -OpenGL ES, so your driver must provide support in a way usable by GLFW. Modern -Nvidia and Intel drivers support creation of OpenGL ES context using the GLX and -WGL APIs, while AMD provides an EGL implementation instead. - - -@subsubsection news_30_egl (Experimental) EGL support - -GLFW now has an experimental EGL context creation back end that can be selected -through CMake options. - - -@subsubsection news_30_hidpi High-DPI support - -GLFW now supports high-DPI monitors on both Windows and macOS, giving windows -full resolution framebuffers where other UI elements are scaled up. To achieve -this, @ref glfwGetFramebufferSize and @ref glfwSetFramebufferSizeCallback have -been added. These work with pixels, while the rest of the GLFW API works with -screen coordinates. This is important as OpenGL uses pixels, not screen -coordinates. - - -@subsubsection news_30_error Error callback - -GLFW now has an error callback, which can provide your application with much -more detailed diagnostics than was previously possible. The callback is passed -an error code and a description string. - - -@subsubsection news_30_wndptr Per-window user pointer - -Each window now has a user-defined pointer, retrieved with @ref -glfwGetWindowUserPointer and set with @ref glfwSetWindowUserPointer, to make it -easier to integrate GLFW into C++ code. - - -@subsubsection news_30_iconifyfun Window iconification callback - -Each window now has a callback for iconification and restoration events, -which is set with @ref glfwSetWindowIconifyCallback. - - -@subsubsection news_30_wndposfun Window position callback - -Each window now has a callback for position events, which is set with @ref -glfwSetWindowPosCallback. - - -@subsubsection news_30_wndpos Window position query - -The position of a window can now be retrieved using @ref glfwGetWindowPos. - - -@subsubsection news_30_focusfun Window focus callback - -Each windows now has a callback for focus events, which is set with @ref -glfwSetWindowFocusCallback. - - -@subsubsection news_30_enterleave Cursor enter/leave callback - -Each window now has a callback for when the mouse cursor enters or leaves its -content area, which is set with @ref glfwSetCursorEnterCallback. - - -@subsubsection news_30_wndtitle Initial window title - -The title of a window is now specified at creation time, as one of the arguments -to @ref glfwCreateWindow. - - -@subsubsection news_30_hidden Hidden windows - -Windows can now be hidden with @ref glfwHideWindow, shown using @ref -glfwShowWindow and created initially hidden with the @ref GLFW_VISIBLE window -hint and attribute. This allows for off-screen rendering in a way compatible -with most drivers, as well as moving a window to a specific position before -showing it. - - -@subsubsection news_30_undecorated Undecorated windows - -Windowed mode windows can now be created without decorations, e.g. things like -a frame, a title bar, with the @ref GLFW_DECORATED window hint and attribute. -This allows for the creation of things like splash screens. - - -@subsubsection news_30_keymods Modifier key bit masks - -[Modifier key bit mask](@ref mods) parameters have been added to the -[mouse button](@ref GLFWmousebuttonfun) and [key](@ref GLFWkeyfun) callbacks. - - -@subsubsection news_30_scancode Platform-specific scancodes - -A scancode parameter has been added to the [key callback](@ref GLFWkeyfun). Keys -that don't have a [key token](@ref keys) still get passed on with the key -parameter set to `GLFW_KEY_UNKNOWN`. These scancodes will vary between machines -and are intended to be used for key bindings. - - -@subsubsection news_30_jsname Joystick names - -The name of a joystick can now be retrieved using @ref glfwGetJoystickName. - - -@subsubsection news_30_doxygen Doxygen documentation - -You are reading it. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/quick.dox b/third_party/penumbra/vendor/glfw/docs/quick.dox deleted file mode 100644 index 73070f4a9ee..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/quick.dox +++ /dev/null @@ -1,362 +0,0 @@ -/*! - -@page quick_guide Getting started - -@tableofcontents - -This guide takes you through writing a simple application using GLFW 3. The -application will create a window and OpenGL context, render a rotating triangle -and exit when the user closes the window or presses _Escape_. This guide will -introduce a few of the most commonly used functions, but there are many more. - -This guide assumes no experience with earlier versions of GLFW. If you -have used GLFW 2 in the past, read @ref moving_guide, as some functions -behave differently in GLFW 3. - - -@section quick_steps Step by step - -@subsection quick_include Including the GLFW header - -In the source files of your application where you use OpenGL or GLFW, you need -to include the GLFW 3 header file. - -@code -#include -@endcode - -This defines all the constants, types and function prototypes of the GLFW API. -It also includes the OpenGL header from your development environment and -defines all the constants and types necessary for it to work on your platform -without including any platform-specific headers. - -In other words: - -- Do _not_ include the OpenGL header yourself, as GLFW does this for you in - a platform-independent way -- Do _not_ include `windows.h` or other platform-specific headers unless - you plan on using those APIs yourself -- If you _do_ need to include such headers, include them _before_ the GLFW - header and it will detect this - -On some platforms supported by GLFW the OpenGL header and link library only -expose older versions of OpenGL. The most extreme case is Windows, which only -exposes OpenGL 1.2. The easiest way to work around this is to use an -[extension loader library](@ref context_glext_auto). - -If you are using such a library then you should include its header _before_ the -GLFW header. This lets it replace the OpenGL header included by GLFW without -conflicts. This example uses -[glad2](https://github.com/Dav1dde/glad), but the same rule applies to all such -libraries. - -@code -#include -#include -@endcode - - -@subsection quick_init_term Initializing and terminating GLFW - -Before you can use most GLFW functions, the library must be initialized. On -successful initialization, `GLFW_TRUE` is returned. If an error occurred, -`GLFW_FALSE` is returned. - -@code -if (!glfwInit()) -{ - // Initialization failed -} -@endcode - -Note that `GLFW_TRUE` and `GLFW_FALSE` are and will always be one and zero. - -When you are done using GLFW, typically just before the application exits, you -need to terminate GLFW. - -@code -glfwTerminate(); -@endcode - -This destroys any remaining windows and releases any other resources allocated by -GLFW. After this call, you must initialize GLFW again before using any GLFW -functions that require it. - - -@subsection quick_capture_error Setting an error callback - -Most events are reported through callbacks, whether it's a key being pressed, -a GLFW window being moved, or an error occurring. Callbacks are C functions (or -C++ static methods) that are called by GLFW with arguments describing the event. - -In case a GLFW function fails, an error is reported to the GLFW error callback. -You can receive these reports with an error callback. This function must have -the signature below but may do anything permitted in other callbacks. - -@code -void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} -@endcode - -Callback functions must be set, so GLFW knows to call them. The function to set -the error callback is one of the few GLFW functions that may be called before -initialization, which lets you be notified of errors both during and after -initialization. - -@code -glfwSetErrorCallback(error_callback); -@endcode - - -@subsection quick_create_window Creating a window and context - -The window and its OpenGL context are created with a single call to @ref -glfwCreateWindow, which returns a handle to the created combined window and -context object - -@code -GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL); -if (!window) -{ - // Window or OpenGL context creation failed -} -@endcode - -This creates a 640 by 480 windowed mode window with an OpenGL context. If -window or OpenGL context creation fails, `NULL` will be returned. You should -always check the return value. While window creation rarely fails, context -creation depends on properly installed drivers and may fail even on machines -with the necessary hardware. - -By default, the OpenGL context GLFW creates may have any version. You can -require a minimum OpenGL version by setting the `GLFW_CONTEXT_VERSION_MAJOR` and -`GLFW_CONTEXT_VERSION_MINOR` hints _before_ creation. If the required minimum -version is not supported on the machine, context (and window) creation fails. - -@code -glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); -glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); -GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL); -if (!window) -{ - // Window or context creation failed -} -@endcode - -The window handle is passed to all window related functions and is provided to -along to all window related callbacks, so they can tell which window received -the event. - -When a window and context is no longer needed, destroy it. - -@code -glfwDestroyWindow(window); -@endcode - -Once this function is called, no more events will be delivered for that window -and its handle becomes invalid. - - -@subsection quick_context_current Making the OpenGL context current - -Before you can use the OpenGL API, you must have a current OpenGL context. - -@code -glfwMakeContextCurrent(window); -@endcode - -The context will remain current until you make another context current or until -the window owning the current context is destroyed. - -If you are using an [extension loader library](@ref context_glext_auto) to -access modern OpenGL then this is when to initialize it, as the loader needs -a current context to load from. This example uses -[glad](https://github.com/Dav1dde/glad), but the same rule applies to all such -libraries. - -@code -gladLoadGL(glfwGetProcAddress); -@endcode - - -@subsection quick_window_close Checking the window close flag - -Each window has a flag indicating whether the window should be closed. - -When the user attempts to close the window, either by pressing the close widget -in the title bar or using a key combination like Alt+F4, this flag is set to 1. -Note that __the window isn't actually closed__, so you are expected to monitor -this flag and either destroy the window or give some kind of feedback to the -user. - -@code -while (!glfwWindowShouldClose(window)) -{ - // Keep running -} -@endcode - -You can be notified when the user is attempting to close the window by setting -a close callback with @ref glfwSetWindowCloseCallback. The callback will be -called immediately after the close flag has been set. - -You can also set it yourself with @ref glfwSetWindowShouldClose. This can be -useful if you want to interpret other kinds of input as closing the window, like -for example pressing the _Escape_ key. - - -@subsection quick_key_input Receiving input events - -Each window has a large number of callbacks that can be set to receive all the -various kinds of events. To receive key press and release events, create a key -callback function. - -@code -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} -@endcode - -The key callback, like other window related callbacks, are set per-window. - -@code -glfwSetKeyCallback(window, key_callback); -@endcode - -In order for event callbacks to be called when events occur, you need to process -events as described below. - - -@subsection quick_render Rendering with OpenGL - -Once you have a current OpenGL context, you can use OpenGL normally. In this -tutorial, a multi-colored rotating triangle will be rendered. The framebuffer -size needs to be retrieved for `glViewport`. - -@code -int width, height; -glfwGetFramebufferSize(window, &width, &height); -glViewport(0, 0, width, height); -@endcode - -You can also set a framebuffer size callback using @ref -glfwSetFramebufferSizeCallback and be notified when the size changes. - -Actual rendering with OpenGL is outside the scope of this tutorial, but there -are [many](https://open.gl/) [excellent](https://learnopengl.com/) -[tutorial](http://openglbook.com/) [sites](http://ogldev.atspace.co.uk/) that -teach modern OpenGL. Some of them use GLFW to create the context and window -while others use GLUT or SDL, but remember that OpenGL itself always works the -same. - - -@subsection quick_timer Reading the timer - -To create smooth animation, a time source is needed. GLFW provides a timer that -returns the number of seconds since initialization. The time source used is the -most accurate on each platform and generally has micro- or nanosecond -resolution. - -@code -double time = glfwGetTime(); -@endcode - - -@subsection quick_swap_buffers Swapping buffers - -GLFW windows by default use double buffering. That means that each window has -two rendering buffers; a front buffer and a back buffer. The front buffer is -the one being displayed and the back buffer the one you render to. - -When the entire frame has been rendered, the buffers need to be swapped with one -another, so the back buffer becomes the front buffer and vice versa. - -@code -glfwSwapBuffers(window); -@endcode - -The swap interval indicates how many frames to wait until swapping the buffers, -commonly known as _vsync_. By default, the swap interval is zero, meaning -buffer swapping will occur immediately. On fast machines, many of those frames -will never be seen, as the screen is still only updated typically 60-75 times -per second, so this wastes a lot of CPU and GPU cycles. - -Also, because the buffers will be swapped in the middle the screen update, -leading to [screen tearing](https://en.wikipedia.org/wiki/Screen_tearing). - -For these reasons, applications will typically want to set the swap interval to -one. It can be set to higher values, but this is usually not recommended, -because of the input latency it leads to. - -@code -glfwSwapInterval(1); -@endcode - -This function acts on the current context and will fail unless a context is -current. - - -@subsection quick_process_events Processing events - -GLFW needs to communicate regularly with the window system both in order to -receive events and to show that the application hasn't locked up. Event -processing must be done regularly while you have visible windows and is normally -done each frame after buffer swapping. - -There are two methods for processing pending events; polling and waiting. This -example will use event polling, which processes only those events that have -already been received and then returns immediately. - -@code -glfwPollEvents(); -@endcode - -This is the best choice when rendering continually, like most games do. If -instead you only need to update your rendering once you have received new input, -@ref glfwWaitEvents is a better choice. It waits until at least one event has -been received, putting the thread to sleep in the meantime, and then processes -all received events. This saves a great deal of CPU cycles and is useful for, -for example, many kinds of editing tools. - - -@section quick_example Putting it together - -Now that you know how to initialize GLFW, create a window and poll for -keyboard input, it's possible to create a simple program. - -This program creates a 640 by 480 windowed mode window and starts a loop that -clears the screen, renders a triangle and processes events until the user either -presses _Escape_ or closes the window. - -@snippet simple.c code - -The program above can be found in the -[source package](https://www.glfw.org/download.html) as `examples/simple.c` -and is compiled along with all other examples when you build GLFW. If you -built GLFW from the source package then you already have this as `simple.exe` on -Windows, `simple` on Linux or `simple.app` on macOS. - -This tutorial used only a few of the many functions GLFW provides. There are -guides for each of the areas covered by GLFW. Each guide will introduce all the -functions for that category. - - - @ref intro_guide - - @ref window_guide - - @ref context_guide - - @ref monitor_guide - - @ref input_guide - -You can access reference documentation for any GLFW function by clicking it and -the reference for each function links to related functions and guide sections. - -The tutorial ends here. Once you have written a program that uses GLFW, you -will need to compile and link it. How to do that depends on the development -environment you are using and is best explained by the documentation for that -environment. To learn about the details that are specific to GLFW, see -@ref build_guide. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/spaces.svg b/third_party/penumbra/vendor/glfw/docs/spaces.svg deleted file mode 100644 index 5b326460924..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/spaces.svg +++ /dev/null @@ -1,877 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/third_party/penumbra/vendor/glfw/docs/vulkan.dox b/third_party/penumbra/vendor/glfw/docs/vulkan.dox deleted file mode 100644 index dc158d6dafd..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/vulkan.dox +++ /dev/null @@ -1,230 +0,0 @@ -/*! - -@page vulkan_guide Vulkan guide - -@tableofcontents - -This guide is intended to fill the gaps between the [Vulkan -documentation](https://www.khronos.org/vulkan/) and the rest of the GLFW -documentation and is not a replacement for either. It assumes some familiarity -with Vulkan concepts like loaders, devices, queues and surfaces and leaves it to -the Vulkan documentation to explain the details of Vulkan functions. - -To develop for Vulkan you should download the [LunarG Vulkan -SDK](https://vulkan.lunarg.com/) for your platform. Apart from headers and link -libraries, they also provide the validation layers necessary for development. - -For details on a specific function in this category, see the @ref vulkan. There -are also guides for the other areas of the GLFW API. - - - @ref intro_guide - - @ref window_guide - - @ref context_guide - - @ref monitor_guide - - @ref input_guide - - -@section vulkan_loader Linking against the Vulkan loader - -By default, GLFW will look for the Vulkan loader on demand at runtime via its -standard name (`vulkan-1.dll` on Windows, `libvulkan.so.1` on Linux and other -Unix-like systems and `libvulkan.1.dylib` on macOS). This means that GLFW does -not need to be linked against the loader. However, it also means that if you -are using the static library form of the Vulkan loader GLFW will either fail to -find it or (worse) use the wrong one. - -The @ref GLFW_VULKAN_STATIC CMake option makes GLFW call the Vulkan loader -directly instead of dynamically loading it at runtime. Not linking against the -Vulkan loader will then be a compile-time error. - -@macos Because the Vulkan loader and ICD are not installed globally on macOS, -you need to set up the application bundle according to the LunarG SDK -documentation. This is explained in more detail in the -[SDK documentation for macOS](https://vulkan.lunarg.com/doc/sdk/latest/mac/getting_started.html). - - -@section vulkan_include Including the Vulkan and GLFW header files - -To include the Vulkan header, define @ref GLFW_INCLUDE_VULKAN before including -the GLFW header. - -@code -#define GLFW_INCLUDE_VULKAN -#include -@endcode - -If you instead want to include the Vulkan header from a custom location or use -your own custom Vulkan header then do this before the GLFW header. - -@code -#include -#include -@endcode - -Unless a Vulkan header is included, either by the GLFW header or above it, any -GLFW functions that take or return Vulkan types will not be declared. - -The `VK_USE_PLATFORM_*_KHR` macros do not need to be defined for the Vulkan part -of GLFW to work. Define them only if you are using these extensions directly. - - -@section vulkan_support Querying for Vulkan support - -If you are linking directly against the Vulkan loader then you can skip this -section. The canonical desktop loader library exports all Vulkan core and -Khronos extension functions, allowing them to be called directly. - -If you are loading the Vulkan loader dynamically instead of linking directly -against it, you can check for the availability of a loader and ICD with @ref -glfwVulkanSupported. - -@code -if (glfwVulkanSupported()) -{ - // Vulkan is available, at least for compute -} -@endcode - -This function returns `GLFW_TRUE` if the Vulkan loader and any minimally -functional ICD was found. - -If if one or both were not found, calling any other Vulkan related GLFW function -will generate a @ref GLFW_API_UNAVAILABLE error. - - -@subsection vulkan_proc Querying Vulkan function pointers - -To load any Vulkan core or extension function from the found loader, call @ref -glfwGetInstanceProcAddress. To load functions needed for instance creation, -pass `NULL` as the instance. - -@code -PFN_vkCreateInstance pfnCreateInstance = (PFN_vkCreateInstance) - glfwGetInstanceProcAddress(NULL, "vkCreateInstance"); -@endcode - -Once you have created an instance, you can load from it all other Vulkan core -functions and functions from any instance extensions you enabled. - -@code -PFN_vkCreateDevice pfnCreateDevice = (PFN_vkCreateDevice) - glfwGetInstanceProcAddress(instance, "vkCreateDevice"); -@endcode - -This function in turn calls `vkGetInstanceProcAddr`. If that fails, the -function falls back to a platform-specific query of the Vulkan loader (i.e. -`dlsym` or `GetProcAddress`). If that also fails, the function returns `NULL`. -For more information about `vkGetInstanceProcAddr`, see the Vulkan -documentation. - -Vulkan also provides `vkGetDeviceProcAddr` for loading device-specific versions -of Vulkan function. This function can be retrieved from an instance with @ref -glfwGetInstanceProcAddress. - -@code -PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr) - glfwGetInstanceProcAddress(instance, "vkGetDeviceProcAddr"); -@endcode - -Device-specific functions may execute a little bit faster, due to not having to -dispatch internally based on the device passed to them. For more information -about `vkGetDeviceProcAddr`, see the Vulkan documentation. - - -@section vulkan_ext Querying required Vulkan extensions - -To do anything useful with Vulkan you need to create an instance. If you want -to use Vulkan to render to a window, you must enable the instance extensions -GLFW requires to create Vulkan surfaces. - -To query the instance extensions required, call @ref -glfwGetRequiredInstanceExtensions. - -@code -uint32_t count; -const char** extensions = glfwGetRequiredInstanceExtensions(&count); -@endcode - -These extensions must all be enabled when creating instances that are going to -be passed to @ref glfwGetPhysicalDevicePresentationSupport and @ref -glfwCreateWindowSurface. The set of extensions will vary depending on platform -and may also vary depending on graphics drivers and other factors. - -If it fails it will return `NULL` and GLFW will not be able to create Vulkan -window surfaces. You can still use Vulkan for off-screen rendering and compute -work. - -If successful the returned array will always include `VK_KHR_surface`, so if -you don't require any additional extensions you can pass this list directly to -the `VkInstanceCreateInfo` struct. - -@code -VkInstanceCreateInfo ici; - -memset(&ici, 0, sizeof(ici)); -ici.enabledExtensionCount = count; -ici.ppEnabledExtensionNames = extensions; -... -@endcode - -Additional extensions may be required by future versions of GLFW. You should -check whether any extensions you wish to enable are already in the returned -array, as it is an error to specify an extension more than once in the -`VkInstanceCreateInfo` struct. - - -@section vulkan_present Querying for Vulkan presentation support - -Not every queue family of every Vulkan device can present images to surfaces. -To check whether a specific queue family of a physical device supports image -presentation without first having to create a window and surface, call @ref -glfwGetPhysicalDevicePresentationSupport. - -@code -if (glfwGetPhysicalDevicePresentationSupport(instance, physical_device, queue_family_index)) -{ - // Queue family supports image presentation -} -@endcode - -The `VK_KHR_surface` extension additionally provides the -`vkGetPhysicalDeviceSurfaceSupportKHR` function, which performs the same test on -an existing Vulkan surface. - - -@section vulkan_window Creating the window - -Unless you will be using OpenGL or OpenGL ES with the same window as Vulkan, -there is no need to create a context. You can disable context creation with the -[GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint. - -@code -glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); -GLFWwindow* window = glfwCreateWindow(640, 480, "Window Title", NULL, NULL); -@endcode - -See @ref context_less for more information. - - -@section vulkan_surface Creating a Vulkan window surface - -You can create a Vulkan surface (as defined by the `VK_KHR_surface` extension) -for a GLFW window with @ref glfwCreateWindowSurface. - -@code -VkSurfaceKHR surface; -VkResult err = glfwCreateWindowSurface(instance, window, NULL, &surface); -if (err) -{ - // Window surface creation failed -} -@endcode - -If an OpenGL or OpenGL ES context was created on the window, the context has -ownership of the presentation on the window and a Vulkan surface cannot be -created. - -It is your responsibility to destroy the surface. GLFW does not destroy it for -you. Call `vkDestroySurfaceKHR` function from the same extension to destroy it. - -*/ diff --git a/third_party/penumbra/vendor/glfw/docs/window.dox b/third_party/penumbra/vendor/glfw/docs/window.dox deleted file mode 100644 index 6109fbf55aa..00000000000 --- a/third_party/penumbra/vendor/glfw/docs/window.dox +++ /dev/null @@ -1,1434 +0,0 @@ -/*! - -@page window_guide Window guide - -@tableofcontents - -This guide introduces the window related functions of GLFW. For details on -a specific function in this category, see the @ref window. There are also -guides for the other areas of GLFW. - - - @ref intro_guide - - @ref context_guide - - @ref vulkan_guide - - @ref monitor_guide - - @ref input_guide - - -@section window_object Window objects - -The @ref GLFWwindow object encapsulates both a window and a context. They are -created with @ref glfwCreateWindow and destroyed with @ref glfwDestroyWindow, or -@ref glfwTerminate, if any remain. As the window and context are inseparably -linked, the object pointer is used as both a context and window handle. - -To see the event stream provided to the various window related callbacks, run -the `events` test program. - - -@subsection window_creation Window creation - -A window and its OpenGL or OpenGL ES context are created with @ref -glfwCreateWindow, which returns a handle to the created window object. For -example, this creates a 640 by 480 windowed mode window: - -@code -GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL); -@endcode - -If window creation fails, `NULL` will be returned, so it is necessary to check -the return value. - -The window handle is passed to all window related functions and is provided to -along with all input events, so event handlers can tell which window received -the event. - - -@subsubsection window_full_screen Full screen windows - -To create a full screen window, you need to specify which monitor the window -should use. In most cases, the user's primary monitor is a good choice. -For more information about retrieving monitors, see @ref monitor_monitors. - -@code -GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", glfwGetPrimaryMonitor(), NULL); -@endcode - -Full screen windows cover the entire display area of a monitor, have no border -or decorations. - -Windowed mode windows can be made full screen by setting a monitor with @ref -glfwSetWindowMonitor, and full screen ones can be made windowed by unsetting it -with the same function. - -Each field of the @ref GLFWvidmode structure corresponds to a function parameter -or window hint and combine to form the _desired video mode_ for that window. -The supported video mode most closely matching the desired video mode will be -set for the chosen monitor as long as the window has input focus. For more -information about retrieving video modes, see @ref monitor_modes. - -Video mode field | Corresponds to ----------------- | -------------- -GLFWvidmode.width | `width` parameter of @ref glfwCreateWindow -GLFWvidmode.height | `height` parameter of @ref glfwCreateWindow -GLFWvidmode.redBits | @ref GLFW_RED_BITS hint -GLFWvidmode.greenBits | @ref GLFW_GREEN_BITS hint -GLFWvidmode.blueBits | @ref GLFW_BLUE_BITS hint -GLFWvidmode.refreshRate | @ref GLFW_REFRESH_RATE hint - -Once you have a full screen window, you can change its resolution, refresh rate -and monitor with @ref glfwSetWindowMonitor. If you only need change its -resolution you can also call @ref glfwSetWindowSize. In all cases, the new -video mode will be selected the same way as the video mode chosen by @ref -glfwCreateWindow. If the window has an OpenGL or OpenGL ES context, it will be -unaffected. - -By default, the original video mode of the monitor will be restored and the -window iconified if it loses input focus, to allow the user to switch back to -the desktop. This behavior can be disabled with the -[GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_hint) window hint, for example if you -wish to simultaneously cover multiple monitors with full screen windows. - -If a monitor is disconnected, all windows that are full screen on that monitor -will be switched to windowed mode. See @ref monitor_event for more information. - - -@subsubsection window_windowed_full_screen "Windowed full screen" windows - -If the closest match for the desired video mode is the current one, the video -mode will not be changed, making window creation faster and application -switching much smoother. This is sometimes called _windowed full screen_ or -_borderless full screen_ window and counts as a full screen window. To create -such a window, request the current video mode. - -@code -const GLFWvidmode* mode = glfwGetVideoMode(monitor); - -glfwWindowHint(GLFW_RED_BITS, mode->redBits); -glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); -glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); -glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - -GLFWwindow* window = glfwCreateWindow(mode->width, mode->height, "My Title", monitor, NULL); -@endcode - -This also works for windowed mode windows that are made full screen. - -@code -const GLFWvidmode* mode = glfwGetVideoMode(monitor); - -glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); -@endcode - -Note that @ref glfwGetVideoMode returns the _current_ video mode of a monitor, -so if you already have a full screen window on that monitor that you want to -make windowed full screen, you need to have saved the desktop resolution before. - - -@subsection window_destruction Window destruction - -When a window is no longer needed, destroy it with @ref glfwDestroyWindow. - -@code -glfwDestroyWindow(window); -@endcode - -Window destruction always succeeds. Before the actual destruction, all -callbacks are removed so no further events will be delivered for the window. -All windows remaining when @ref glfwTerminate is called are destroyed as well. - -When a full screen window is destroyed, the original video mode of its monitor -is restored, but the gamma ramp is left untouched. - - -@subsection window_hints Window creation hints - -There are a number of hints that can be set before the creation of a window and -context. Some affect the window itself, others affect the framebuffer or -context. These hints are set to their default values each time the library is -initialized with @ref glfwInit. Integer value hints can be set individually -with @ref glfwWindowHint and string value hints with @ref glfwWindowHintString. -You can reset all at once to their defaults with @ref glfwDefaultWindowHints. - -Some hints are platform specific. These are always valid to set on any -platform but they will only affect their specific platform. Other platforms -will ignore them. Setting these hints requires no platform specific headers or -calls. - -@note Window hints need to be set before the creation of the window and context -you wish to have the specified attributes. They function as additional -arguments to @ref glfwCreateWindow. - - -@subsubsection window_hints_hard Hard and soft constraints - -Some window hints are hard constraints. These must match the available -capabilities _exactly_ for window and context creation to succeed. Hints -that are not hard constraints are matched as closely as possible, but the -resulting context and framebuffer may differ from what these hints requested. - -The following hints are always hard constraints: -- @ref GLFW_STEREO -- @ref GLFW_DOUBLEBUFFER -- [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) -- [GLFW_CONTEXT_CREATION_API](@ref GLFW_CONTEXT_CREATION_API_hint) - -The following additional hints are hard constraints when requesting an OpenGL -context, but are ignored when requesting an OpenGL ES context: -- [GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) -- [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) - - -@subsubsection window_hints_wnd Window related hints - -@anchor GLFW_RESIZABLE_hint -__GLFW_RESIZABLE__ specifies whether the windowed mode window will be resizable -_by the user_. The window will still be resizable using the @ref -glfwSetWindowSize function. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. -This hint is ignored for full screen and undecorated windows. - -@anchor GLFW_VISIBLE_hint -__GLFW_VISIBLE__ specifies whether the windowed mode window will be initially -visible. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This hint is -ignored for full screen windows. - -@anchor GLFW_DECORATED_hint -__GLFW_DECORATED__ specifies whether the windowed mode window will have window -decorations such as a border, a close widget, etc. An undecorated window will -not be resizable by the user but will still allow the user to generate close -events on some platforms. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. -This hint is ignored for full screen windows. - -@anchor GLFW_FOCUSED_hint -__GLFW_FOCUSED__ specifies whether the windowed mode window will be given input -focus when created. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This -hint is ignored for full screen and initially hidden windows. - -@anchor GLFW_AUTO_ICONIFY_hint -__GLFW_AUTO_ICONIFY__ specifies whether the full screen window will -automatically iconify and restore the previous video mode on input focus loss. -Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This hint is ignored for -windowed mode windows. - -@anchor GLFW_FLOATING_hint -__GLFW_FLOATING__ specifies whether the windowed mode window will be floating -above other regular windows, also called topmost or always-on-top. This is -intended primarily for debugging purposes and cannot be used to implement proper -full screen windows. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This -hint is ignored for full screen windows. - -@anchor GLFW_MAXIMIZED_hint -__GLFW_MAXIMIZED__ specifies whether the windowed mode window will be maximized -when created. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This hint is -ignored for full screen windows. - -@anchor GLFW_CENTER_CURSOR_hint -__GLFW_CENTER_CURSOR__ specifies whether the cursor should be centered over -newly created full screen windows. Possible values are `GLFW_TRUE` and -`GLFW_FALSE`. This hint is ignored for windowed mode windows. - -@anchor GLFW_TRANSPARENT_FRAMEBUFFER_hint -__GLFW_TRANSPARENT_FRAMEBUFFER__ specifies whether the window framebuffer will -be transparent. If enabled and supported by the system, the window framebuffer -alpha channel will be used to combine the framebuffer with the background. This -does not affect window decorations. Possible values are `GLFW_TRUE` and -`GLFW_FALSE`. - -@par -@win32 GLFW sets a color key for the window to work around repainting issues -with a transparent framebuffer. The chosen color value is RGB 255,0,255 -(magenta). This will make pixels with that exact color fully transparent -regardless of their alpha values. If this is a problem, make these pixels any -other color before buffer swap. - -@anchor GLFW_FOCUS_ON_SHOW_hint -__GLFW_FOCUS_ON_SHOW__ specifies whether the window will be given input -focus when @ref glfwShowWindow is called. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. - -@anchor GLFW_SCALE_TO_MONITOR -__GLFW_SCALE_TO_MONITOR__ specified whether the window content area should be -resized based on the [monitor content scale](@ref monitor_scale) of any monitor -it is placed on. This includes the initial placement when the window is -created. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. - -This hint only has an effect on platforms where screen coordinates and pixels -always map 1:1 such as Windows and X11. On platforms like macOS the resolution -of the framebuffer is changed independently of the window size. - - -@subsubsection window_hints_fb Framebuffer related hints - -@anchor GLFW_RED_BITS -@anchor GLFW_GREEN_BITS -@anchor GLFW_BLUE_BITS -@anchor GLFW_ALPHA_BITS -@anchor GLFW_DEPTH_BITS -@anchor GLFW_STENCIL_BITS -__GLFW_RED_BITS__, __GLFW_GREEN_BITS__, __GLFW_BLUE_BITS__, __GLFW_ALPHA_BITS__, -__GLFW_DEPTH_BITS__ and __GLFW_STENCIL_BITS__ specify the desired bit depths of -the various components of the default framebuffer. A value of `GLFW_DONT_CARE` -means the application has no preference. - -@anchor GLFW_ACCUM_RED_BITS -@anchor GLFW_ACCUM_GREEN_BITS -@anchor GLFW_ACCUM_BLUE_BITS -@anchor GLFW_ACCUM_ALPHA_BITS -__GLFW_ACCUM_RED_BITS__, __GLFW_ACCUM_GREEN_BITS__, __GLFW_ACCUM_BLUE_BITS__ and -__GLFW_ACCUM_ALPHA_BITS__ specify the desired bit depths of the various -components of the accumulation buffer. A value of `GLFW_DONT_CARE` means the -application has no preference. - -@par -Accumulation buffers are a legacy OpenGL feature and should not be used in new -code. - -@anchor GLFW_AUX_BUFFERS -__GLFW_AUX_BUFFERS__ specifies the desired number of auxiliary buffers. A value -of `GLFW_DONT_CARE` means the application has no preference. - -@par -Auxiliary buffers are a legacy OpenGL feature and should not be used in new -code. - -@anchor GLFW_STEREO -__GLFW_STEREO__ specifies whether to use OpenGL stereoscopic rendering. -Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This is a hard constraint. - -@anchor GLFW_SAMPLES -__GLFW_SAMPLES__ specifies the desired number of samples to use for -multisampling. Zero disables multisampling. A value of `GLFW_DONT_CARE` means -the application has no preference. - -@anchor GLFW_SRGB_CAPABLE -__GLFW_SRGB_CAPABLE__ specifies whether the framebuffer should be sRGB capable. -Possible values are `GLFW_TRUE` and `GLFW_FALSE`. - -@par -__OpenGL:__ If enabled and supported by the system, the `GL_FRAMEBUFFER_SRGB` -enable will control sRGB rendering. By default, sRGB rendering will be -disabled. - -@par -__OpenGL ES:__ If enabled and supported by the system, the context will always -have sRGB rendering enabled. - -@anchor GLFW_DOUBLEBUFFER -__GLFW_DOUBLEBUFFER__ specifies whether the framebuffer should be double -buffered. You nearly always want to use double buffering. This is a hard -constraint. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. - - -@subsubsection window_hints_mtr Monitor related hints - -@anchor GLFW_REFRESH_RATE -__GLFW_REFRESH_RATE__ specifies the desired refresh rate for full screen -windows. A value of `GLFW_DONT_CARE` means the highest available refresh rate -will be used. This hint is ignored for windowed mode windows. - - -@subsubsection window_hints_ctx Context related hints - -@anchor GLFW_CLIENT_API_hint -__GLFW_CLIENT_API__ specifies which client API to create the context for. -Possible values are `GLFW_OPENGL_API`, `GLFW_OPENGL_ES_API` and `GLFW_NO_API`. -This is a hard constraint. - -@anchor GLFW_CONTEXT_CREATION_API_hint -__GLFW_CONTEXT_CREATION_API__ specifies which context creation API to use to -create the context. Possible values are `GLFW_NATIVE_CONTEXT_API`, -`GLFW_EGL_CONTEXT_API` and `GLFW_OSMESA_CONTEXT_API`. This is a hard -constraint. If no client API is requested, this hint is ignored. - -@par -@macos The EGL API is not available on this platform and requests to use it -will fail. - -@par -__Wayland:__ The EGL API _is_ the native context creation API, so this hint -will have no effect. - -@par -__OSMesa:__ As its name implies, an OpenGL context created with OSMesa does not -update the window contents when its buffers are swapped. Use OpenGL functions -or the OSMesa native access functions @ref glfwGetOSMesaColorBuffer and @ref -glfwGetOSMesaDepthBuffer to retrieve the framebuffer contents. - -@note An OpenGL extension loader library that assumes it knows which context -creation API is used on a given platform may fail if you change this hint. This -can be resolved by having it load via @ref glfwGetProcAddress, which always uses -the selected API. - -@bug On some Linux systems, creating contexts via both the native and EGL APIs -in a single process will cause the application to segfault. Stick to one API or -the other on Linux for now. - -@anchor GLFW_CONTEXT_VERSION_MAJOR_hint -@anchor GLFW_CONTEXT_VERSION_MINOR_hint -__GLFW_CONTEXT_VERSION_MAJOR__ and __GLFW_CONTEXT_VERSION_MINOR__ specify the -client API version that the created context must be compatible with. The exact -behavior of these hints depend on the requested client API. - -@note Do not confuse these hints with `GLFW_VERSION_MAJOR` and -`GLFW_VERSION_MINOR`, which provide the API version of the GLFW header. - -@par -__OpenGL:__ These hints are not hard constraints, but creation will fail if the -OpenGL version of the created context is less than the one requested. It is -therefore perfectly safe to use the default of version 1.0 for legacy code and -you will still get backwards-compatible contexts of version 3.0 and above when -available. - -@par -While there is no way to ask the driver for a context of the highest supported -version, GLFW will attempt to provide this when you ask for a version 1.0 -context, which is the default for these hints. - -@par -__OpenGL ES:__ These hints are not hard constraints, but creation will fail if -the OpenGL ES version of the created context is less than the one requested. -Additionally, OpenGL ES 1.x cannot be returned if 2.0 or later was requested, -and vice versa. This is because OpenGL ES 3.x is backward compatible with 2.0, -but OpenGL ES 2.0 is not backward compatible with 1.x. - -@note @macos The OS only supports forward-compatible core profile contexts for -OpenGL versions 3.2 and later. Before creating an OpenGL context of version -3.2 or later you must set the -[GLFW_OPENGL_FORWARD_COMPAT](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) and -[GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) hints accordingly. OpenGL -3.0 and 3.1 contexts are not supported at all on macOS. - -@anchor GLFW_OPENGL_FORWARD_COMPAT_hint -__GLFW_OPENGL_FORWARD_COMPAT__ specifies whether the OpenGL context should be -forward-compatible, i.e. one where all functionality deprecated in the requested -version of OpenGL is removed. This must only be used if the requested OpenGL -version is 3.0 or above. If OpenGL ES is requested, this hint is ignored. - -@par -Forward-compatibility is described in detail in the -[OpenGL Reference Manual](https://www.opengl.org/registry/). - -@anchor GLFW_OPENGL_DEBUG_CONTEXT_hint -__GLFW_OPENGL_DEBUG_CONTEXT__ specifies whether to create a debug OpenGL -context, which may have additional error and performance issue reporting -functionality. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. If OpenGL ES -is requested, this hint is ignored. - -@anchor GLFW_OPENGL_PROFILE_hint -__GLFW_OPENGL_PROFILE__ specifies which OpenGL profile to create the context -for. Possible values are one of `GLFW_OPENGL_CORE_PROFILE` or -`GLFW_OPENGL_COMPAT_PROFILE`, or `GLFW_OPENGL_ANY_PROFILE` to not request -a specific profile. If requesting an OpenGL version below 3.2, -`GLFW_OPENGL_ANY_PROFILE` must be used. If OpenGL ES is requested, this hint -is ignored. - -@par -OpenGL profiles are described in detail in the -[OpenGL Reference Manual](https://www.opengl.org/registry/). - -@anchor GLFW_CONTEXT_ROBUSTNESS_hint -__GLFW_CONTEXT_ROBUSTNESS__ specifies the robustness strategy to be used by the -context. This can be one of `GLFW_NO_RESET_NOTIFICATION` or -`GLFW_LOSE_CONTEXT_ON_RESET`, or `GLFW_NO_ROBUSTNESS` to not request -a robustness strategy. - -@anchor GLFW_CONTEXT_RELEASE_BEHAVIOR_hint -__GLFW_CONTEXT_RELEASE_BEHAVIOR__ specifies the release behavior to be -used by the context. Possible values are one of `GLFW_ANY_RELEASE_BEHAVIOR`, -`GLFW_RELEASE_BEHAVIOR_FLUSH` or `GLFW_RELEASE_BEHAVIOR_NONE`. If the -behavior is `GLFW_ANY_RELEASE_BEHAVIOR`, the default behavior of the context -creation API will be used. If the behavior is `GLFW_RELEASE_BEHAVIOR_FLUSH`, -the pipeline will be flushed whenever the context is released from being the -current one. If the behavior is `GLFW_RELEASE_BEHAVIOR_NONE`, the pipeline will -not be flushed on release. - -@par -Context release behaviors are described in detail by the -[GL_KHR_context_flush_control](https://www.opengl.org/registry/specs/KHR/context_flush_control.txt) -extension. - -@anchor GLFW_CONTEXT_NO_ERROR_hint -__GLFW_CONTEXT_NO_ERROR__ specifies whether errors should be generated by the -context. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. If enabled, -situations that would have generated errors instead cause undefined behavior. - -@par -The no error mode for OpenGL and OpenGL ES is described in detail by the -[GL_KHR_no_error](https://www.opengl.org/registry/specs/KHR/no_error.txt) -extension. - - -@subsubsection window_hints_osx macOS specific window hints - -@anchor GLFW_COCOA_RETINA_FRAMEBUFFER_hint -__GLFW_COCOA_RETINA_FRAMEBUFFER__ specifies whether to use full resolution -framebuffers on Retina displays. Possible values are `GLFW_TRUE` and -`GLFW_FALSE`. This is ignored on other platforms. - -@anchor GLFW_COCOA_FRAME_NAME_hint -__GLFW_COCOA_FRAME_NAME__ specifies the UTF-8 encoded name to use for autosaving -the window frame, or if empty disables frame autosaving for the window. This is -ignored on other platforms. This is set with @ref glfwWindowHintString. - -@anchor GLFW_COCOA_GRAPHICS_SWITCHING_hint -__GLFW_COCOA_GRAPHICS_SWITCHING__ specifies whether to in Automatic Graphics -Switching, i.e. to allow the system to choose the integrated GPU for the OpenGL -context and move it between GPUs if necessary or whether to force it to always -run on the discrete GPU. This only affects systems with both integrated and -discrete GPUs. Possible values are `GLFW_TRUE` and `GLFW_FALSE`. This is -ignored on other platforms. - -@par -Simpler programs and tools may want to enable this to save power, while games -and other applications performing advanced rendering will want to leave it -disabled. - -@par -A bundled application that wishes to participate in Automatic Graphics Switching -should also declare this in its `Info.plist` by setting the -`NSSupportsAutomaticGraphicsSwitching` key to `true`. - - -@subsubsection window_hints_x11 X11 specific window hints - -@anchor GLFW_X11_CLASS_NAME_hint -@anchor GLFW_X11_INSTANCE_NAME_hint -__GLFW_X11_CLASS_NAME__ and __GLFW_X11_INSTANCE_NAME__ specifies the desired -ASCII encoded class and instance parts of the ICCCM `WM_CLASS` window property. -These are set with @ref glfwWindowHintString. - - -@subsubsection window_hints_values Supported and default values - -Window hint | Default value | Supported values ------------------------------ | --------------------------- | ---------------- -GLFW_RESIZABLE | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_VISIBLE | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_DECORATED | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_FOCUSED | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_AUTO_ICONIFY | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_FLOATING | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_MAXIMIZED | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_CENTER_CURSOR | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_TRANSPARENT_FRAMEBUFFER | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_FOCUS_ON_SHOW | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_SCALE_TO_MONITOR | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_RED_BITS | 8 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_GREEN_BITS | 8 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_BLUE_BITS | 8 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_ALPHA_BITS | 8 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_DEPTH_BITS | 24 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_STENCIL_BITS | 8 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_ACCUM_RED_BITS | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_ACCUM_GREEN_BITS | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_ACCUM_BLUE_BITS | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_ACCUM_ALPHA_BITS | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_AUX_BUFFERS | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_SAMPLES | 0 | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_REFRESH_RATE | `GLFW_DONT_CARE` | 0 to `INT_MAX` or `GLFW_DONT_CARE` -GLFW_STEREO | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_SRGB_CAPABLE | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_DOUBLEBUFFER | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_CLIENT_API | `GLFW_OPENGL_API` | `GLFW_OPENGL_API`, `GLFW_OPENGL_ES_API` or `GLFW_NO_API` -GLFW_CONTEXT_CREATION_API | `GLFW_NATIVE_CONTEXT_API` | `GLFW_NATIVE_CONTEXT_API`, `GLFW_EGL_CONTEXT_API` or `GLFW_OSMESA_CONTEXT_API` -GLFW_CONTEXT_VERSION_MAJOR | 1 | Any valid major version number of the chosen client API -GLFW_CONTEXT_VERSION_MINOR | 0 | Any valid minor version number of the chosen client API -GLFW_CONTEXT_ROBUSTNESS | `GLFW_NO_ROBUSTNESS` | `GLFW_NO_ROBUSTNESS`, `GLFW_NO_RESET_NOTIFICATION` or `GLFW_LOSE_CONTEXT_ON_RESET` -GLFW_CONTEXT_RELEASE_BEHAVIOR | `GLFW_ANY_RELEASE_BEHAVIOR` | `GLFW_ANY_RELEASE_BEHAVIOR`, `GLFW_RELEASE_BEHAVIOR_FLUSH` or `GLFW_RELEASE_BEHAVIOR_NONE` -GLFW_OPENGL_FORWARD_COMPAT | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_OPENGL_DEBUG_CONTEXT | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_OPENGL_PROFILE | `GLFW_OPENGL_ANY_PROFILE` | `GLFW_OPENGL_ANY_PROFILE`, `GLFW_OPENGL_COMPAT_PROFILE` or `GLFW_OPENGL_CORE_PROFILE` -GLFW_COCOA_RETINA_FRAMEBUFFER | `GLFW_TRUE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_COCOA_FRAME_NAME | `""` | A UTF-8 encoded frame autosave name -GLFW_COCOA_GRAPHICS_SWITCHING | `GLFW_FALSE` | `GLFW_TRUE` or `GLFW_FALSE` -GLFW_X11_CLASS_NAME | `""` | An ASCII encoded `WM_CLASS` class name -GLFW_X11_INSTANCE_NAME | `""` | An ASCII encoded `WM_CLASS` instance name - - -@section window_events Window event processing - -See @ref events. - - -@section window_properties Window properties and events - -@subsection window_userptr User pointer - -Each window has a user pointer that can be set with @ref -glfwSetWindowUserPointer and queried with @ref glfwGetWindowUserPointer. This -can be used for any purpose you need and will not be modified by GLFW throughout -the life-time of the window. - -The initial value of the pointer is `NULL`. - - -@subsection window_close Window closing and close flag - -When the user attempts to close the window, for example by clicking the close -widget or using a key chord like Alt+F4, the _close flag_ of the window is set. -The window is however not actually destroyed and, unless you watch for this -state change, nothing further happens. - -The current state of the close flag is returned by @ref glfwWindowShouldClose -and can be set or cleared directly with @ref glfwSetWindowShouldClose. A common -pattern is to use the close flag as a main loop condition. - -@code -while (!glfwWindowShouldClose(window)) -{ - render(window); - - glfwSwapBuffers(window); - glfwPollEvents(); -} -@endcode - -If you wish to be notified when the user attempts to close a window, set a close -callback. - -@code -glfwSetWindowCloseCallback(window, window_close_callback); -@endcode - -The callback function is called directly _after_ the close flag has been set. -It can be used for example to filter close requests and clear the close flag -again unless certain conditions are met. - -@code -void window_close_callback(GLFWwindow* window) -{ - if (!time_to_close) - glfwSetWindowShouldClose(window, GLFW_FALSE); -} -@endcode - - -@subsection window_size Window size - -The size of a window can be changed with @ref glfwSetWindowSize. For windowed -mode windows, this sets the size, in -[screen coordinates](@ref coordinate_systems) of the _content area_ or _content -area_ of the window. The window system may impose limits on window size. - -@code -glfwSetWindowSize(window, 640, 480); -@endcode - -For full screen windows, the specified size becomes the new resolution of the -window's desired video mode. The video mode most closely matching the new -desired video mode is set immediately. The window is resized to fit the -resolution of the set video mode. - -If you wish to be notified when a window is resized, whether by the user, the -system or your own code, set a size callback. - -@code -glfwSetWindowSizeCallback(window, window_size_callback); -@endcode - -The callback function receives the new size, in screen coordinates, of the -content area of the window when the window is resized. - -@code -void window_size_callback(GLFWwindow* window, int width, int height) -{ -} -@endcode - -There is also @ref glfwGetWindowSize for directly retrieving the current size of -a window. - -@code -int width, height; -glfwGetWindowSize(window, &width, &height); -@endcode - -@note Do not pass the window size to `glViewport` or other pixel-based OpenGL -calls. The window size is in screen coordinates, not pixels. Use the -[framebuffer size](@ref window_fbsize), which is in pixels, for pixel-based -calls. - -The above functions work with the size of the content area, but decorated -windows typically have title bars and window frames around this rectangle. You -can retrieve the extents of these with @ref glfwGetWindowFrameSize. - -@code -int left, top, right, bottom; -glfwGetWindowFrameSize(window, &left, &top, &right, &bottom); -@endcode - -The returned values are the distances, in screen coordinates, from the edges of -the content area to the corresponding edges of the full window. As they are -distances and not coordinates, they are always zero or positive. - - -@subsection window_fbsize Framebuffer size - -While the size of a window is measured in screen coordinates, OpenGL works with -pixels. The size you pass into `glViewport`, for example, should be in pixels. -On some machines screen coordinates and pixels are the same, but on others they -will not be. There is a second set of functions to retrieve the size, in -pixels, of the framebuffer of a window. - -If you wish to be notified when the framebuffer of a window is resized, whether -by the user or the system, set a size callback. - -@code -glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); -@endcode - -The callback function receives the new size of the framebuffer when it is -resized, which can for example be used to update the OpenGL viewport. - -@code -void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - glViewport(0, 0, width, height); -} -@endcode - -There is also @ref glfwGetFramebufferSize for directly retrieving the current -size of the framebuffer of a window. - -@code -int width, height; -glfwGetFramebufferSize(window, &width, &height); -glViewport(0, 0, width, height); -@endcode - -The size of a framebuffer may change independently of the size of a window, for -example if the window is dragged between a regular monitor and a high-DPI one. - - -@subsection window_scale Window content scale - -The content scale for a window can be retrieved with @ref -glfwGetWindowContentScale. - -@code -float xscale, yscale; -glfwGetWindowContentScale(window, &xscale, &yscale); -@endcode - -The content scale is the ratio between the current DPI and the platform's -default DPI. This is especially important for text and any UI elements. If the -pixel dimensions of your UI scaled by this look appropriate on your machine then -it should appear at a reasonable size on other machines regardless of their DPI -and scaling settings. This relies on the system DPI and scaling settings being -somewhat correct. - -On systems where each monitors can have its own content scale, the window -content scale will depend on which monitor the system considers the window to be -on. - -If you wish to be notified when the content scale of a window changes, whether -because of a system setting change or because it was moved to a monitor with -a different scale, set a content scale callback. - -@code -glfwSetWindowContentScaleCallback(window, window_content_scale_callback); -@endcode - -The callback function receives the new content scale of the window. - -@code -void window_content_scale_callback(GLFWwindow* window, float xscale, float yscale) -{ - set_interface_scale(xscale, yscale); -} -@endcode - -On platforms where pixels and screen coordinates always map 1:1, the window -will need to be resized to appear the same size when it is moved to a monitor -with a different content scale. To have this done automatically both when the -window is created and when its content scale later changes, set the @ref -GLFW_SCALE_TO_MONITOR window hint. - - -@subsection window_sizelimits Window size limits - -The minimum and maximum size of the content area of a windowed mode window can -be enforced with @ref glfwSetWindowSizeLimits. The user may resize the window -to any size and aspect ratio within the specified limits, unless the aspect -ratio is also set. - -@code -glfwSetWindowSizeLimits(window, 200, 200, 400, 400); -@endcode - -To specify only a minimum size or only a maximum one, set the other pair to -`GLFW_DONT_CARE`. - -@code -glfwSetWindowSizeLimits(window, 640, 480, GLFW_DONT_CARE, GLFW_DONT_CARE); -@endcode - -To disable size limits for a window, set them all to `GLFW_DONT_CARE`. - -The aspect ratio of the content area of a windowed mode window can be enforced -with @ref glfwSetWindowAspectRatio. The user may resize the window freely -unless size limits are also set, but the size will be constrained to maintain -the aspect ratio. - -@code -glfwSetWindowAspectRatio(window, 16, 9); -@endcode - -The aspect ratio is specified as a numerator and denominator, corresponding to -the width and height, respectively. If you want a window to maintain its -current aspect ratio, use its current size as the ratio. - -@code -int width, height; -glfwGetWindowSize(window, &width, &height); -glfwSetWindowAspectRatio(window, width, height); -@endcode - -To disable the aspect ratio limit for a window, set both terms to -`GLFW_DONT_CARE`. - -You can have both size limits and aspect ratio set for a window, but the results -are undefined if they conflict. - - -@subsection window_pos Window position - -The position of a windowed-mode window can be changed with @ref -glfwSetWindowPos. This moves the window so that the upper-left corner of its -content area has the specified [screen coordinates](@ref coordinate_systems). -The window system may put limitations on window placement. - -@code -glfwSetWindowPos(window, 100, 100); -@endcode - -If you wish to be notified when a window is moved, whether by the user, the -system or your own code, set a position callback. - -@code -glfwSetWindowPosCallback(window, window_pos_callback); -@endcode - -The callback function receives the new position, in screen coordinates, of the -upper-left corner of the content area when the window is moved. - -@code -void window_pos_callback(GLFWwindow* window, int xpos, int ypos) -{ -} -@endcode - -There is also @ref glfwGetWindowPos for directly retrieving the current position -of the content area of the window. - -@code -int xpos, ypos; -glfwGetWindowPos(window, &xpos, &ypos); -@endcode - - -@subsection window_title Window title - -All GLFW windows have a title, although undecorated or full screen windows may -not display it or only display it in a task bar or similar interface. You can -set a UTF-8 encoded window title with @ref glfwSetWindowTitle. - -@code -glfwSetWindowTitle(window, "My Window"); -@endcode - -The specified string is copied before the function returns, so there is no need -to keep it around. - -As long as your source file is encoded as UTF-8, you can use any Unicode -characters directly in the source. - -@code -glfwSetWindowTitle(window, "ラストエグザイル"); -@endcode - -If you are using C++11 or C11, you can use a UTF-8 string literal. - -@code -glfwSetWindowTitle(window, u8"This is always a UTF-8 string"); -@endcode - - -@subsection window_icon Window icon - -Decorated windows have icons on some platforms. You can set this icon by -specifying a list of candidate images with @ref glfwSetWindowIcon. - -@code -GLFWimage images[2]; -images[0] = load_icon("my_icon.png"); -images[1] = load_icon("my_icon_small.png"); - -glfwSetWindowIcon(window, 2, images); -@endcode - -The image data is 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits -per channel with the red channel first. The pixels are arranged canonically as -sequential rows, starting from the top-left corner. - -To revert to the default window icon, pass in an empty image array. - -@code -glfwSetWindowIcon(window, 0, NULL); -@endcode - - -@subsection window_monitor Window monitor - -Full screen windows are associated with a specific monitor. You can get the -handle for this monitor with @ref glfwGetWindowMonitor. - -@code -GLFWmonitor* monitor = glfwGetWindowMonitor(window); -@endcode - -This monitor handle is one of those returned by @ref glfwGetMonitors. - -For windowed mode windows, this function returns `NULL`. This is how to tell -full screen windows from windowed mode windows. - -You can move windows between monitors or between full screen and windowed mode -with @ref glfwSetWindowMonitor. When making a window full screen on the same or -on a different monitor, specify the desired monitor, resolution and refresh -rate. The position arguments are ignored. - -@code -const GLFWvidmode* mode = glfwGetVideoMode(monitor); - -glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); -@endcode - -When making the window windowed, specify the desired position and size. The -refresh rate argument is ignored. - -@code -glfwSetWindowMonitor(window, NULL, xpos, ypos, width, height, 0); -@endcode - -This restores any previous window settings such as whether it is decorated, -floating, resizable, has size or aspect ratio limits, etc.. To restore a window -that was originally windowed to its original size and position, save these -before making it full screen and then pass them in as above. - - -@subsection window_iconify Window iconification - -Windows can be iconified (i.e. minimized) with @ref glfwIconifyWindow. - -@code -glfwIconifyWindow(window); -@endcode - -When a full screen window is iconified, the original video mode of its monitor -is restored until the user or application restores the window. - -Iconified windows can be restored with @ref glfwRestoreWindow. This function -also restores windows from maximization. - -@code -glfwRestoreWindow(window); -@endcode - -When a full screen window is restored, the desired video mode is restored to its -monitor as well. - -If you wish to be notified when a window is iconified or restored, whether by -the user, system or your own code, set an iconify callback. - -@code -glfwSetWindowIconifyCallback(window, window_iconify_callback); -@endcode - -The callback function receives changes in the iconification state of the window. - -@code -void window_iconify_callback(GLFWwindow* window, int iconified) -{ - if (iconified) - { - // The window was iconified - } - else - { - // The window was restored - } -} -@endcode - -You can also get the current iconification state with @ref glfwGetWindowAttrib. - -@code -int iconified = glfwGetWindowAttrib(window, GLFW_ICONIFIED); -@endcode - - -@subsection window_maximize Window maximization - -Windows can be maximized (i.e. zoomed) with @ref glfwMaximizeWindow. - -@code -glfwMaximizeWindow(window); -@endcode - -Full screen windows cannot be maximized and passing a full screen window to this -function does nothing. - -Maximized windows can be restored with @ref glfwRestoreWindow. This function -also restores windows from iconification. - -@code -glfwRestoreWindow(window); -@endcode - -If you wish to be notified when a window is maximized or restored, whether by -the user, system or your own code, set a maximize callback. - -@code -glfwSetWindowMaximizeCallback(window, window_maximize_callback); -@endcode - -The callback function receives changes in the maximization state of the window. - -@code -void window_maximize_callback(GLFWwindow* window, int maximized) -{ - if (maximized) - { - // The window was maximized - } - else - { - // The window was restored - } -} -@endcode - -You can also get the current maximization state with @ref glfwGetWindowAttrib. - -@code -int maximized = glfwGetWindowAttrib(window, GLFW_MAXIMIZED); -@endcode - -By default, newly created windows are not maximized. You can change this -behavior by setting the [GLFW_MAXIMIZED](@ref GLFW_MAXIMIZED_hint) window hint -before creating the window. - -@code -glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE); -@endcode - - -@subsection window_hide Window visibility - -Windowed mode windows can be hidden with @ref glfwHideWindow. - -@code -glfwHideWindow(window); -@endcode - -This makes the window completely invisible to the user, including removing it -from the task bar, dock or window list. Full screen windows cannot be hidden -and calling @ref glfwHideWindow on a full screen window does nothing. - -Hidden windows can be shown with @ref glfwShowWindow. - -@code -glfwShowWindow(window); -@endcode - -By default, this function will also set the input focus to that window. Set -the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint to change -this behavior for all newly created windows, or change the behavior for an -existing window with @ref glfwSetWindowAttrib. - -You can also get the current visibility state with @ref glfwGetWindowAttrib. - -@code -int visible = glfwGetWindowAttrib(window, GLFW_VISIBLE); -@endcode - -By default, newly created windows are visible. You can change this behavior by -setting the [GLFW_VISIBLE](@ref GLFW_VISIBLE_hint) window hint before creating -the window. - -@code -glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); -@endcode - -Windows created hidden are completely invisible to the user until shown. This -can be useful if you need to set up your window further before showing it, for -example moving it to a specific location. - - -@subsection window_focus Window input focus - -Windows can be given input focus and brought to the front with @ref -glfwFocusWindow. - -@code -glfwFocusWindow(window); -@endcode - -Keep in mind that it can be very disruptive to the user when a window is forced -to the top. For a less disruptive way of getting the user's attention, see -[attention requests](@ref window_attention). - -If you wish to be notified when a window gains or loses input focus, whether by -the user, system or your own code, set a focus callback. - -@code -glfwSetWindowFocusCallback(window, window_focus_callback); -@endcode - -The callback function receives changes in the input focus state of the window. - -@code -void window_focus_callback(GLFWwindow* window, int focused) -{ - if (focused) - { - // The window gained input focus - } - else - { - // The window lost input focus - } -} -@endcode - -You can also get the current input focus state with @ref glfwGetWindowAttrib. - -@code -int focused = glfwGetWindowAttrib(window, GLFW_FOCUSED); -@endcode - -By default, newly created windows are given input focus. You can change this -behavior by setting the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) window hint -before creating the window. - -@code -glfwWindowHint(GLFW_FOCUSED, GLFW_FALSE); -@endcode - - -@subsection window_attention Window attention request - -If you wish to notify the user of an event without interrupting, you can request -attention with @ref glfwRequestWindowAttention. - -@code -glfwRequestWindowAttention(window); -@endcode - -The system will highlight the specified window, or on platforms where this is -not supported, the application as a whole. Once the user has given it -attention, the system will automatically end the request. - - -@subsection window_refresh Window damage and refresh - -If you wish to be notified when the contents of a window is damaged and needs -to be refreshed, set a window refresh callback. - -@code -glfwSetWindowRefreshCallback(m_handle, window_refresh_callback); -@endcode - -The callback function is called when the contents of the window needs to be -refreshed. - -@code -void window_refresh_callback(GLFWwindow* window) -{ - draw_editor_ui(window); - glfwSwapBuffers(window); -} -@endcode - -@note On compositing window systems such as Aero, Compiz or Aqua, where the -window contents are saved off-screen, this callback might only be called when -the window or framebuffer is resized. - - -@subsection window_transparency Window transparency - -GLFW supports two kinds of transparency for windows; framebuffer transparency -and whole window transparency. A single window may not use both methods. The -results of doing this are undefined. - -Both methods require the platform to support it and not every version of every -platform GLFW supports does this, so there are mechanisms to check whether the -window really is transparent. - -Window framebuffers can be made transparent on a per-pixel per-frame basis with -the [GLFW_TRANSPARENT_FRAMEBUFFER](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) -window hint. - -@code -glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); -@endcode - -If supported by the system, the window content area will be composited with the -background using the framebuffer per-pixel alpha channel. This requires desktop -compositing to be enabled on the system. It does not affect window decorations. - -You can check whether the window framebuffer was successfully made transparent -with the -[GLFW_TRANSPARENT_FRAMEBUFFER](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib) -window attribute. - -@code -if (glfwGetWindowAttrib(window, GLFW_TRANSPARENT_FRAMEBUFFER)) -{ - // window framebuffer is currently transparent -} -@endcode - -GLFW comes with an example that enabled framebuffer transparency called `gears`. - -The opacity of the whole window, including any decorations, can be set with @ref -glfwSetWindowOpacity. - -@code -glfwSetWindowOpacity(window, 0.5f); -@endcode - -The opacity (or alpha) value is a positive finite number between zero and one, -where 0 (zero) is fully transparent and 1 (one) is fully opaque. The initial -opacity value for newly created windows is 1. - -The current opacity of a window can be queried with @ref glfwGetWindowOpacity. - -@code -float opacity = glfwGetWindowOpacity(window); -@endcode - -If the system does not support whole window transparency, this function always -returns one. - -GLFW comes with a test program that lets you control whole window transparency -at run-time called `opacity`. - - -@subsection window_attribs Window attributes - -Windows have a number of attributes that can be returned using @ref -glfwGetWindowAttrib. Some reflect state that may change as a result of user -interaction, (e.g. whether it has input focus), while others reflect inherent -properties of the window (e.g. what kind of border it has). Some are related to -the window and others to its OpenGL or OpenGL ES context. - -@code -if (glfwGetWindowAttrib(window, GLFW_FOCUSED)) -{ - // window has input focus -} -@endcode - -The [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), -[GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), -[GLFW_FLOATING](@ref GLFW_FLOATING_attrib), -[GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and -[GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib) window attributes can be -changed with @ref glfwSetWindowAttrib. - -@code -glfwSetWindowAttrib(window, GLFW_RESIZABLE, GLFW_FALSE); -@endcode - - - -@subsubsection window_attribs_wnd Window related attributes - -@anchor GLFW_FOCUSED_attrib -__GLFW_FOCUSED__ indicates whether the specified window has input focus. See -@ref window_focus for details. - -@anchor GLFW_ICONIFIED_attrib -__GLFW_ICONIFIED__ indicates whether the specified window is iconified. -See @ref window_iconify for details. - -@anchor GLFW_MAXIMIZED_attrib -__GLFW_MAXIMIZED__ indicates whether the specified window is maximized. See -@ref window_maximize for details. - -@anchor GLFW_HOVERED_attrib -__GLFW_HOVERED__ indicates whether the cursor is currently directly over the -content area of the window, with no other windows between. See @ref -cursor_enter for details. - -@anchor GLFW_VISIBLE_attrib -__GLFW_VISIBLE__ indicates whether the specified window is visible. See @ref -window_hide for details. - -@anchor GLFW_RESIZABLE_attrib -__GLFW_RESIZABLE__ indicates whether the specified window is resizable _by the -user_. This can be set before creation with the -[GLFW_RESIZABLE](@ref GLFW_RESIZABLE_hint) window hint or after with @ref -glfwSetWindowAttrib. - -@anchor GLFW_DECORATED_attrib -__GLFW_DECORATED__ indicates whether the specified window has decorations such -as a border, a close widget, etc. This can be set before creation with the -[GLFW_DECORATED](@ref GLFW_DECORATED_hint) window hint or after with @ref -glfwSetWindowAttrib. - -@anchor GLFW_AUTO_ICONIFY_attrib -__GLFW_AUTO_ICONIFY__ indicates whether the specified full screen window is -iconified on focus loss, a close widget, etc. This can be set before creation -with the [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_hint) window hint or after -with @ref glfwSetWindowAttrib. - -@anchor GLFW_FLOATING_attrib -__GLFW_FLOATING__ indicates whether the specified window is floating, also -called topmost or always-on-top. This can be set before creation with the -[GLFW_FLOATING](@ref GLFW_FLOATING_hint) window hint or after with @ref -glfwSetWindowAttrib. - -@anchor GLFW_TRANSPARENT_FRAMEBUFFER_attrib -__GLFW_TRANSPARENT_FRAMEBUFFER__ indicates whether the specified window has -a transparent framebuffer, i.e. the window contents is composited with the -background using the window framebuffer alpha channel. See @ref -window_transparency for details. - -@anchor GLFW_FOCUS_ON_SHOW_attrib -__GLFW_FOCUS_ON_SHOW__ specifies whether the window will be given input -focus when @ref glfwShowWindow is called. This can be set before creation -with the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint or -after with @ref glfwSetWindowAttrib. - -@subsubsection window_attribs_ctx Context related attributes - -@anchor GLFW_CLIENT_API_attrib -__GLFW_CLIENT_API__ indicates the client API provided by the window's context; -either `GLFW_OPENGL_API`, `GLFW_OPENGL_ES_API` or `GLFW_NO_API`. - -@anchor GLFW_CONTEXT_CREATION_API_attrib -__GLFW_CONTEXT_CREATION_API__ indicates the context creation API used to create -the window's context; either `GLFW_NATIVE_CONTEXT_API`, `GLFW_EGL_CONTEXT_API` -or `GLFW_OSMESA_CONTEXT_API`. - -@anchor GLFW_CONTEXT_VERSION_MAJOR_attrib -@anchor GLFW_CONTEXT_VERSION_MINOR_attrib -@anchor GLFW_CONTEXT_REVISION_attrib -__GLFW_CONTEXT_VERSION_MAJOR__, __GLFW_CONTEXT_VERSION_MINOR__ and -__GLFW_CONTEXT_REVISION__ indicate the client API version of the window's -context. - -@note Do not confuse these attributes with `GLFW_VERSION_MAJOR`, -`GLFW_VERSION_MINOR` and `GLFW_VERSION_REVISION` which provide the API version -of the GLFW header. - -@anchor GLFW_OPENGL_FORWARD_COMPAT_attrib -__GLFW_OPENGL_FORWARD_COMPAT__ is `GLFW_TRUE` if the window's context is an -OpenGL forward-compatible one, or `GLFW_FALSE` otherwise. - -@anchor GLFW_OPENGL_DEBUG_CONTEXT_attrib -__GLFW_OPENGL_DEBUG_CONTEXT__ is `GLFW_TRUE` if the window's context is an -OpenGL debug context, or `GLFW_FALSE` otherwise. - -@anchor GLFW_OPENGL_PROFILE_attrib -__GLFW_OPENGL_PROFILE__ indicates the OpenGL profile used by the context. This -is `GLFW_OPENGL_CORE_PROFILE` or `GLFW_OPENGL_COMPAT_PROFILE` if the context -uses a known profile, or `GLFW_OPENGL_ANY_PROFILE` if the OpenGL profile is -unknown or the context is an OpenGL ES context. Note that the returned profile -may not match the profile bits of the context flags, as GLFW will try other -means of detecting the profile when no bits are set. - -@anchor GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib -__GLFW_CONTEXT_RELEASE_BEHAVIOR__ indicates the release used by the context. -Possible values are one of `GLFW_ANY_RELEASE_BEHAVIOR`, -`GLFW_RELEASE_BEHAVIOR_FLUSH` or `GLFW_RELEASE_BEHAVIOR_NONE`. If the -behavior is `GLFW_ANY_RELEASE_BEHAVIOR`, the default behavior of the context -creation API will be used. If the behavior is `GLFW_RELEASE_BEHAVIOR_FLUSH`, -the pipeline will be flushed whenever the context is released from being the -current one. If the behavior is `GLFW_RELEASE_BEHAVIOR_NONE`, the pipeline will -not be flushed on release. - -@anchor GLFW_CONTEXT_NO_ERROR_attrib -__GLFW_CONTEXT_NO_ERROR__ indicates whether errors are generated by the context. -Possible values are `GLFW_TRUE` and `GLFW_FALSE`. If enabled, situations that -would have generated errors instead cause undefined behavior. - -@anchor GLFW_CONTEXT_ROBUSTNESS_attrib -__GLFW_CONTEXT_ROBUSTNESS__ indicates the robustness strategy used by the -context. This is `GLFW_LOSE_CONTEXT_ON_RESET` or `GLFW_NO_RESET_NOTIFICATION` -if the window's context supports robustness, or `GLFW_NO_ROBUSTNESS` otherwise. - - -@subsubsection window_attribs_fb Framebuffer related attributes - -GLFW does not expose attributes of the default framebuffer (i.e. the framebuffer -attached to the window) as these can be queried directly with either OpenGL, -OpenGL ES or Vulkan. - -If you are using version 3.0 or later of OpenGL or OpenGL ES, the -`glGetFramebufferAttachmentParameteriv` function can be used to retrieve the -number of bits for the red, green, blue, alpha, depth and stencil buffer -channels. Otherwise, the `glGetIntegerv` function can be used. - -The number of MSAA samples are always retrieved with `glGetIntegerv`. For -contexts supporting framebuffer objects, the number of samples of the currently -bound framebuffer is returned. - -Attribute | glGetIntegerv | glGetFramebufferAttachmentParameteriv ------------- | ----------------- | ------------------------------------- -Red bits | `GL_RED_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE` -Green bits | `GL_GREEN_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE` -Blue bits | `GL_BLUE_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE` -Alpha bits | `GL_ALPHA_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE` -Depth bits | `GL_DEPTH_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE` -Stencil bits | `GL_STENCIL_BITS` | `GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE` -MSAA samples | `GL_SAMPLES` | _Not provided by this function_ - -When calling `glGetFramebufferAttachmentParameteriv`, the red, green, blue and -alpha sizes are queried from the `GL_BACK_LEFT`, while the depth and stencil -sizes are queried from the `GL_DEPTH` and `GL_STENCIL` attachments, -respectively. - - -@section buffer_swap Buffer swapping - -GLFW windows are by default double buffered. That means that you have two -rendering buffers; a front buffer and a back buffer. The front buffer is -the one being displayed and the back buffer the one you render to. - -When the entire frame has been rendered, it is time to swap the back and the -front buffers in order to display what has been rendered and begin rendering -a new frame. This is done with @ref glfwSwapBuffers. - -@code -glfwSwapBuffers(window); -@endcode - -Sometimes it can be useful to select when the buffer swap will occur. With the -function @ref glfwSwapInterval it is possible to select the minimum number of -monitor refreshes the driver should wait from the time @ref glfwSwapBuffers was -called before swapping the buffers: - -@code -glfwSwapInterval(1); -@endcode - -If the interval is zero, the swap will take place immediately when @ref -glfwSwapBuffers is called without waiting for a refresh. Otherwise at least -interval retraces will pass between each buffer swap. Using a swap interval of -zero can be useful for benchmarking purposes, when it is not desirable to -measure the time it takes to wait for the vertical retrace. However, a swap -interval of one lets you avoid tearing. - -Note that this may not work on all machines, as some drivers have -user-controlled settings that override any swap interval the application -requests. - -A context that supports either the `WGL_EXT_swap_control_tear` or the -`GLX_EXT_swap_control_tear` extension also accepts _negative_ swap intervals, -which allows the driver to swap immediately even if a frame arrives a little bit -late. This trades the risk of visible tears for greater framerate stability. -You can check for these extensions with @ref glfwExtensionSupported. - -*/ diff --git a/third_party/penumbra/vendor/glfw/examples/CMakeLists.txt b/third_party/penumbra/vendor/glfw/examples/CMakeLists.txt deleted file mode 100644 index a884e6bc1d2..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ - -link_libraries(glfw) - -include_directories("${GLFW_SOURCE_DIR}/deps") - -if (MATH_LIBRARY) - link_libraries("${MATH_LIBRARY}") -endif() - -if (MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif() - -if (WIN32) - set(ICON glfw.rc) -elseif (APPLE) - set(ICON glfw.icns) -endif() - -if (${CMAKE_VERSION} VERSION_EQUAL "3.1.0" OR - ${CMAKE_VERSION} VERSION_GREATER "3.1.0") - set(CMAKE_C_STANDARD 99) -else() - # Remove this fallback when removing support for CMake version less than 3.1 - add_compile_options("$<$:-std=c99>" - "$<$:-std=c99>" - "$<$:-std=c99>") - -endif() - -set(GLAD_GL "${GLFW_SOURCE_DIR}/deps/glad/gl.h" - "${GLFW_SOURCE_DIR}/deps/glad_gl.c") -set(GETOPT "${GLFW_SOURCE_DIR}/deps/getopt.h" - "${GLFW_SOURCE_DIR}/deps/getopt.c") -set(TINYCTHREAD "${GLFW_SOURCE_DIR}/deps/tinycthread.h" - "${GLFW_SOURCE_DIR}/deps/tinycthread.c") - -add_executable(boing WIN32 MACOSX_BUNDLE boing.c ${ICON} ${GLAD_GL}) -add_executable(gears WIN32 MACOSX_BUNDLE gears.c ${ICON} ${GLAD_GL}) -add_executable(heightmap WIN32 MACOSX_BUNDLE heightmap.c ${ICON} ${GLAD_GL}) -add_executable(offscreen offscreen.c ${ICON} ${GLAD_GL}) -add_executable(particles WIN32 MACOSX_BUNDLE particles.c ${ICON} ${TINYCTHREAD} ${GETOPT} ${GLAD_GL}) -add_executable(sharing WIN32 MACOSX_BUNDLE sharing.c ${ICON} ${GLAD_GL}) -add_executable(simple WIN32 MACOSX_BUNDLE simple.c ${ICON} ${GLAD_GL}) -add_executable(splitview WIN32 MACOSX_BUNDLE splitview.c ${ICON} ${GLAD_GL}) -add_executable(wave WIN32 MACOSX_BUNDLE wave.c ${ICON} ${GLAD_GL}) - -target_link_libraries(particles "${CMAKE_THREAD_LIBS_INIT}") -if (RT_LIBRARY) - target_link_libraries(particles "${RT_LIBRARY}") -endif() - -set(GUI_ONLY_BINARIES boing gears heightmap particles sharing simple splitview - wave) -set(CONSOLE_BINARIES offscreen) - -set_target_properties(${GUI_ONLY_BINARIES} ${CONSOLE_BINARIES} PROPERTIES - FOLDER "GLFW3/Examples") - -if (GLFW_USE_OSMESA) - target_compile_definitions(offscreen PRIVATE USE_NATIVE_OSMESA) -endif() - -if (MSVC) - # Tell MSVC to use main instead of WinMain for Windows subsystem executables - set_target_properties(${GUI_ONLY_BINARIES} PROPERTIES - LINK_FLAGS "/ENTRY:mainCRTStartup") -endif() - -if (APPLE) - set_target_properties(boing PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Boing") - set_target_properties(gears PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Gears") - set_target_properties(heightmap PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Heightmap") - set_target_properties(particles PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Particles") - set_target_properties(sharing PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Sharing") - set_target_properties(simple PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Simple") - set_target_properties(splitview PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "SplitView") - set_target_properties(wave PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Wave") - - set_source_files_properties(glfw.icns PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources") - set_target_properties(${GUI_ONLY_BINARIES} PROPERTIES - MACOSX_BUNDLE_SHORT_VERSION_STRING ${GLFW_VERSION} - MACOSX_BUNDLE_LONG_VERSION_STRING ${GLFW_VERSION} - MACOSX_BUNDLE_ICON_FILE glfw.icns - MACOSX_BUNDLE_INFO_PLIST "${GLFW_SOURCE_DIR}/CMake/MacOSXBundleInfo.plist.in") -endif() - diff --git a/third_party/penumbra/vendor/glfw/examples/boing.c b/third_party/penumbra/vendor/glfw/examples/boing.c deleted file mode 100644 index ca389086a1a..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/boing.c +++ /dev/null @@ -1,679 +0,0 @@ -/***************************************************************************** - * Title: GLBoing - * Desc: Tribute to Amiga Boing. - * Author: Jim Brooks - * Original Amiga authors were R.J. Mical and Dale Luck. - * GLFW conversion by Marcus Geelnard - * Notes: - 360' = 2*PI [radian] - * - * - Distances between objects are created by doing a relative - * Z translations. - * - * - Although OpenGL enticingly supports alpha-blending, - * the shadow of the original Boing didn't affect the color - * of the grid. - * - * - [Marcus] Changed timing scheme from interval driven to frame- - * time based animation steps (which results in much smoother - * movement) - * - * History of Amiga Boing: - * - * Boing was demonstrated on the prototype Amiga (codenamed "Lorraine") in - * 1985. According to legend, it was written ad-hoc in one night by - * R. J. Mical and Dale Luck. Because the bouncing ball animation was so fast - * and smooth, attendees did not believe the Amiga prototype was really doing - * the rendering. Suspecting a trick, they began looking around the booth for - * a hidden computer or VCR. - *****************************************************************************/ - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include - -#include -#define GLFW_INCLUDE_NONE -#include - -#include - - -/***************************************************************************** - * Various declarations and macros - *****************************************************************************/ - -/* Prototypes */ -void init( void ); -void display( void ); -void reshape( GLFWwindow* window, int w, int h ); -void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods ); -void mouse_button_callback( GLFWwindow* window, int button, int action, int mods ); -void cursor_position_callback( GLFWwindow* window, double x, double y ); -void DrawBoingBall( void ); -void BounceBall( double dt ); -void DrawBoingBallBand( GLfloat long_lo, GLfloat long_hi ); -void DrawGrid( void ); - -#define RADIUS 70.f -#define STEP_LONGITUDE 22.5f /* 22.5 makes 8 bands like original Boing */ -#define STEP_LATITUDE 22.5f - -#define DIST_BALL (RADIUS * 2.f + RADIUS * 0.1f) - -#define VIEW_SCENE_DIST (DIST_BALL * 3.f + 200.f)/* distance from viewer to middle of boing area */ -#define GRID_SIZE (RADIUS * 4.5f) /* length (width) of grid */ -#define BOUNCE_HEIGHT (RADIUS * 2.1f) -#define BOUNCE_WIDTH (RADIUS * 2.1f) - -#define SHADOW_OFFSET_X -20.f -#define SHADOW_OFFSET_Y 10.f -#define SHADOW_OFFSET_Z 0.f - -#define WALL_L_OFFSET 0.f -#define WALL_R_OFFSET 5.f - -/* Animation speed (50.0 mimics the original GLUT demo speed) */ -#define ANIMATION_SPEED 50.f - -/* Maximum allowed delta time per physics iteration */ -#define MAX_DELTA_T 0.02f - -/* Draw ball, or its shadow */ -typedef enum { DRAW_BALL, DRAW_BALL_SHADOW } DRAW_BALL_ENUM; - -/* Vertex type */ -typedef struct {float x; float y; float z;} vertex_t; - -/* Global vars */ -int windowed_xpos, windowed_ypos, windowed_width, windowed_height; -int width, height; -GLfloat deg_rot_y = 0.f; -GLfloat deg_rot_y_inc = 2.f; -int override_pos = GLFW_FALSE; -GLfloat cursor_x = 0.f; -GLfloat cursor_y = 0.f; -GLfloat ball_x = -RADIUS; -GLfloat ball_y = -RADIUS; -GLfloat ball_x_inc = 1.f; -GLfloat ball_y_inc = 2.f; -DRAW_BALL_ENUM drawBallHow; -double t; -double t_old = 0.f; -double dt; - -/* Random number generator */ -#ifndef RAND_MAX - #define RAND_MAX 4095 -#endif - - -/***************************************************************************** - * Truncate a degree. - *****************************************************************************/ -GLfloat TruncateDeg( GLfloat deg ) -{ - if ( deg >= 360.f ) - return (deg - 360.f); - else - return deg; -} - -/***************************************************************************** - * Convert a degree (360-based) into a radian. - * 360' = 2 * PI - *****************************************************************************/ -double deg2rad( double deg ) -{ - return deg / 360 * (2 * M_PI); -} - -/***************************************************************************** - * 360' sin(). - *****************************************************************************/ -double sin_deg( double deg ) -{ - return sin( deg2rad( deg ) ); -} - -/***************************************************************************** - * 360' cos(). - *****************************************************************************/ -double cos_deg( double deg ) -{ - return cos( deg2rad( deg ) ); -} - -/***************************************************************************** - * Compute a cross product (for a normal vector). - * - * c = a x b - *****************************************************************************/ -void CrossProduct( vertex_t a, vertex_t b, vertex_t c, vertex_t *n ) -{ - GLfloat u1, u2, u3; - GLfloat v1, v2, v3; - - u1 = b.x - a.x; - u2 = b.y - a.y; - u3 = b.y - a.z; - - v1 = c.x - a.x; - v2 = c.y - a.y; - v3 = c.z - a.z; - - n->x = u2 * v3 - v2 * u3; - n->y = u3 * v1 - v3 * u1; - n->z = u1 * v2 - v1 * u2; -} - - -#define BOING_DEBUG 0 - - -/***************************************************************************** - * init() - *****************************************************************************/ -void init( void ) -{ - /* - * Clear background. - */ - glClearColor( 0.55f, 0.55f, 0.55f, 0.f ); - - glShadeModel( GL_FLAT ); -} - - -/***************************************************************************** - * display() - *****************************************************************************/ -void display(void) -{ - glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); - glPushMatrix(); - - drawBallHow = DRAW_BALL_SHADOW; - DrawBoingBall(); - - DrawGrid(); - - drawBallHow = DRAW_BALL; - DrawBoingBall(); - - glPopMatrix(); - glFlush(); -} - - -/***************************************************************************** - * reshape() - *****************************************************************************/ -void reshape( GLFWwindow* window, int w, int h ) -{ - mat4x4 projection, view; - - glViewport( 0, 0, (GLsizei)w, (GLsizei)h ); - - glMatrixMode( GL_PROJECTION ); - mat4x4_perspective( projection, - 2.f * (float) atan2( RADIUS, 200.f ), - (float)w / (float)h, - 1.f, VIEW_SCENE_DIST ); - glLoadMatrixf((const GLfloat*) projection); - - glMatrixMode( GL_MODELVIEW ); - { - vec3 eye = { 0.f, 0.f, VIEW_SCENE_DIST }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, -1.f, 0.f }; - mat4x4_look_at( view, eye, center, up ); - } - glLoadMatrixf((const GLfloat*) view); -} - -void key_callback( GLFWwindow* window, int key, int scancode, int action, int mods ) -{ - if (action != GLFW_PRESS) - return; - - if (key == GLFW_KEY_ESCAPE && mods == 0) - glfwSetWindowShouldClose(window, GLFW_TRUE); - if ((key == GLFW_KEY_ENTER && mods == GLFW_MOD_ALT) || - (key == GLFW_KEY_F11 && mods == GLFW_MOD_ALT)) - { - if (glfwGetWindowMonitor(window)) - { - glfwSetWindowMonitor(window, NULL, - windowed_xpos, windowed_ypos, - windowed_width, windowed_height, 0); - } - else - { - GLFWmonitor* monitor = glfwGetPrimaryMonitor(); - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwGetWindowPos(window, &windowed_xpos, &windowed_ypos); - glfwGetWindowSize(window, &windowed_width, &windowed_height); - glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); - } - } - } -} - -static void set_ball_pos ( GLfloat x, GLfloat y ) -{ - ball_x = (width / 2) - x; - ball_y = y - (height / 2); -} - -void mouse_button_callback( GLFWwindow* window, int button, int action, int mods ) -{ - if (button != GLFW_MOUSE_BUTTON_LEFT) - return; - - if (action == GLFW_PRESS) - { - override_pos = GLFW_TRUE; - set_ball_pos(cursor_x, cursor_y); - } - else - { - override_pos = GLFW_FALSE; - } -} - -void cursor_position_callback( GLFWwindow* window, double x, double y ) -{ - cursor_x = (float) x; - cursor_y = (float) y; - - if ( override_pos ) - set_ball_pos(cursor_x, cursor_y); -} - -/***************************************************************************** - * Draw the Boing ball. - * - * The Boing ball is sphere in which each facet is a rectangle. - * Facet colors alternate between red and white. - * The ball is built by stacking latitudinal circles. Each circle is composed - * of a widely-separated set of points, so that each facet is noticeably large. - *****************************************************************************/ -void DrawBoingBall( void ) -{ - GLfloat lon_deg; /* degree of longitude */ - double dt_total, dt2; - - glPushMatrix(); - glMatrixMode( GL_MODELVIEW ); - - /* - * Another relative Z translation to separate objects. - */ - glTranslatef( 0.0, 0.0, DIST_BALL ); - - /* Update ball position and rotation (iterate if necessary) */ - dt_total = dt; - while( dt_total > 0.0 ) - { - dt2 = dt_total > MAX_DELTA_T ? MAX_DELTA_T : dt_total; - dt_total -= dt2; - BounceBall( dt2 ); - deg_rot_y = TruncateDeg( deg_rot_y + deg_rot_y_inc*((float)dt2*ANIMATION_SPEED) ); - } - - /* Set ball position */ - glTranslatef( ball_x, ball_y, 0.0 ); - - /* - * Offset the shadow. - */ - if ( drawBallHow == DRAW_BALL_SHADOW ) - { - glTranslatef( SHADOW_OFFSET_X, - SHADOW_OFFSET_Y, - SHADOW_OFFSET_Z ); - } - - /* - * Tilt the ball. - */ - glRotatef( -20.0, 0.0, 0.0, 1.0 ); - - /* - * Continually rotate ball around Y axis. - */ - glRotatef( deg_rot_y, 0.0, 1.0, 0.0 ); - - /* - * Set OpenGL state for Boing ball. - */ - glCullFace( GL_FRONT ); - glEnable( GL_CULL_FACE ); - glEnable( GL_NORMALIZE ); - - /* - * Build a faceted latitude slice of the Boing ball, - * stepping same-sized vertical bands of the sphere. - */ - for ( lon_deg = 0; - lon_deg < 180; - lon_deg += STEP_LONGITUDE ) - { - /* - * Draw a latitude circle at this longitude. - */ - DrawBoingBallBand( lon_deg, - lon_deg + STEP_LONGITUDE ); - } - - glPopMatrix(); - - return; -} - - -/***************************************************************************** - * Bounce the ball. - *****************************************************************************/ -void BounceBall( double delta_t ) -{ - GLfloat sign; - GLfloat deg; - - if ( override_pos ) - return; - - /* Bounce on walls */ - if ( ball_x > (BOUNCE_WIDTH/2 + WALL_R_OFFSET ) ) - { - ball_x_inc = -0.5f - 0.75f * (GLfloat)rand() / (GLfloat)RAND_MAX; - deg_rot_y_inc = -deg_rot_y_inc; - } - if ( ball_x < -(BOUNCE_HEIGHT/2 + WALL_L_OFFSET) ) - { - ball_x_inc = 0.5f + 0.75f * (GLfloat)rand() / (GLfloat)RAND_MAX; - deg_rot_y_inc = -deg_rot_y_inc; - } - - /* Bounce on floor / roof */ - if ( ball_y > BOUNCE_HEIGHT/2 ) - { - ball_y_inc = -0.75f - 1.f * (GLfloat)rand() / (GLfloat)RAND_MAX; - } - if ( ball_y < -BOUNCE_HEIGHT/2*0.85 ) - { - ball_y_inc = 0.75f + 1.f * (GLfloat)rand() / (GLfloat)RAND_MAX; - } - - /* Update ball position */ - ball_x += ball_x_inc * ((float)delta_t*ANIMATION_SPEED); - ball_y += ball_y_inc * ((float)delta_t*ANIMATION_SPEED); - - /* - * Simulate the effects of gravity on Y movement. - */ - if ( ball_y_inc < 0 ) sign = -1.0; else sign = 1.0; - - deg = (ball_y + BOUNCE_HEIGHT/2) * 90 / BOUNCE_HEIGHT; - if ( deg > 80 ) deg = 80; - if ( deg < 10 ) deg = 10; - - ball_y_inc = sign * 4.f * (float) sin_deg( deg ); -} - - -/***************************************************************************** - * Draw a faceted latitude band of the Boing ball. - * - * Parms: long_lo, long_hi - * Low and high longitudes of slice, resp. - *****************************************************************************/ -void DrawBoingBallBand( GLfloat long_lo, - GLfloat long_hi ) -{ - vertex_t vert_ne; /* "ne" means south-east, so on */ - vertex_t vert_nw; - vertex_t vert_sw; - vertex_t vert_se; - vertex_t vert_norm; - GLfloat lat_deg; - static int colorToggle = 0; - - /* - * Iterate through the points of a latitude circle. - * A latitude circle is a 2D set of X,Z points. - */ - for ( lat_deg = 0; - lat_deg <= (360 - STEP_LATITUDE); - lat_deg += STEP_LATITUDE ) - { - /* - * Color this polygon with red or white. - */ - if ( colorToggle ) - glColor3f( 0.8f, 0.1f, 0.1f ); - else - glColor3f( 0.95f, 0.95f, 0.95f ); -#if 0 - if ( lat_deg >= 180 ) - if ( colorToggle ) - glColor3f( 0.1f, 0.8f, 0.1f ); - else - glColor3f( 0.5f, 0.5f, 0.95f ); -#endif - colorToggle = ! colorToggle; - - /* - * Change color if drawing shadow. - */ - if ( drawBallHow == DRAW_BALL_SHADOW ) - glColor3f( 0.35f, 0.35f, 0.35f ); - - /* - * Assign each Y. - */ - vert_ne.y = vert_nw.y = (float) cos_deg(long_hi) * RADIUS; - vert_sw.y = vert_se.y = (float) cos_deg(long_lo) * RADIUS; - - /* - * Assign each X,Z with sin,cos values scaled by latitude radius indexed by longitude. - * Eg, long=0 and long=180 are at the poles, so zero scale is sin(longitude), - * while long=90 (sin(90)=1) is at equator. - */ - vert_ne.x = (float) cos_deg( lat_deg ) * (RADIUS * (float) sin_deg( long_lo + STEP_LONGITUDE )); - vert_se.x = (float) cos_deg( lat_deg ) * (RADIUS * (float) sin_deg( long_lo )); - vert_nw.x = (float) cos_deg( lat_deg + STEP_LATITUDE ) * (RADIUS * (float) sin_deg( long_lo + STEP_LONGITUDE )); - vert_sw.x = (float) cos_deg( lat_deg + STEP_LATITUDE ) * (RADIUS * (float) sin_deg( long_lo )); - - vert_ne.z = (float) sin_deg( lat_deg ) * (RADIUS * (float) sin_deg( long_lo + STEP_LONGITUDE )); - vert_se.z = (float) sin_deg( lat_deg ) * (RADIUS * (float) sin_deg( long_lo )); - vert_nw.z = (float) sin_deg( lat_deg + STEP_LATITUDE ) * (RADIUS * (float) sin_deg( long_lo + STEP_LONGITUDE )); - vert_sw.z = (float) sin_deg( lat_deg + STEP_LATITUDE ) * (RADIUS * (float) sin_deg( long_lo )); - - /* - * Draw the facet. - */ - glBegin( GL_POLYGON ); - - CrossProduct( vert_ne, vert_nw, vert_sw, &vert_norm ); - glNormal3f( vert_norm.x, vert_norm.y, vert_norm.z ); - - glVertex3f( vert_ne.x, vert_ne.y, vert_ne.z ); - glVertex3f( vert_nw.x, vert_nw.y, vert_nw.z ); - glVertex3f( vert_sw.x, vert_sw.y, vert_sw.z ); - glVertex3f( vert_se.x, vert_se.y, vert_se.z ); - - glEnd(); - -#if BOING_DEBUG - printf( "----------------------------------------------------------- \n" ); - printf( "lat = %f long_lo = %f long_hi = %f \n", lat_deg, long_lo, long_hi ); - printf( "vert_ne x = %.8f y = %.8f z = %.8f \n", vert_ne.x, vert_ne.y, vert_ne.z ); - printf( "vert_nw x = %.8f y = %.8f z = %.8f \n", vert_nw.x, vert_nw.y, vert_nw.z ); - printf( "vert_se x = %.8f y = %.8f z = %.8f \n", vert_se.x, vert_se.y, vert_se.z ); - printf( "vert_sw x = %.8f y = %.8f z = %.8f \n", vert_sw.x, vert_sw.y, vert_sw.z ); -#endif - - } - - /* - * Toggle color so that next band will opposite red/white colors than this one. - */ - colorToggle = ! colorToggle; - - /* - * This circular band is done. - */ - return; -} - - -/***************************************************************************** - * Draw the purple grid of lines, behind the Boing ball. - * When the Workbench is dropped to the bottom, Boing shows 12 rows. - *****************************************************************************/ -void DrawGrid( void ) -{ - int row, col; - const int rowTotal = 12; /* must be divisible by 2 */ - const int colTotal = rowTotal; /* must be same as rowTotal */ - const GLfloat widthLine = 2.0; /* should be divisible by 2 */ - const GLfloat sizeCell = GRID_SIZE / rowTotal; - const GLfloat z_offset = -40.0; - GLfloat xl, xr; - GLfloat yt, yb; - - glPushMatrix(); - glDisable( GL_CULL_FACE ); - - /* - * Another relative Z translation to separate objects. - */ - glTranslatef( 0.0, 0.0, DIST_BALL ); - - /* - * Draw vertical lines (as skinny 3D rectangles). - */ - for ( col = 0; col <= colTotal; col++ ) - { - /* - * Compute co-ords of line. - */ - xl = -GRID_SIZE / 2 + col * sizeCell; - xr = xl + widthLine; - - yt = GRID_SIZE / 2; - yb = -GRID_SIZE / 2 - widthLine; - - glBegin( GL_POLYGON ); - - glColor3f( 0.6f, 0.1f, 0.6f ); /* purple */ - - glVertex3f( xr, yt, z_offset ); /* NE */ - glVertex3f( xl, yt, z_offset ); /* NW */ - glVertex3f( xl, yb, z_offset ); /* SW */ - glVertex3f( xr, yb, z_offset ); /* SE */ - - glEnd(); - } - - /* - * Draw horizontal lines (as skinny 3D rectangles). - */ - for ( row = 0; row <= rowTotal; row++ ) - { - /* - * Compute co-ords of line. - */ - yt = GRID_SIZE / 2 - row * sizeCell; - yb = yt - widthLine; - - xl = -GRID_SIZE / 2; - xr = GRID_SIZE / 2 + widthLine; - - glBegin( GL_POLYGON ); - - glColor3f( 0.6f, 0.1f, 0.6f ); /* purple */ - - glVertex3f( xr, yt, z_offset ); /* NE */ - glVertex3f( xl, yt, z_offset ); /* NW */ - glVertex3f( xl, yb, z_offset ); /* SW */ - glVertex3f( xr, yb, z_offset ); /* SE */ - - glEnd(); - } - - glPopMatrix(); - - return; -} - - -/*======================================================================* - * main() - *======================================================================*/ - -int main( void ) -{ - GLFWwindow* window; - - /* Init GLFW */ - if( !glfwInit() ) - exit( EXIT_FAILURE ); - - window = glfwCreateWindow( 400, 400, "Boing (classic Amiga demo)", NULL, NULL ); - if (!window) - { - glfwTerminate(); - exit( EXIT_FAILURE ); - } - - glfwSetWindowAspectRatio(window, 1, 1); - - glfwSetFramebufferSizeCallback(window, reshape); - glfwSetKeyCallback(window, key_callback); - glfwSetMouseButtonCallback(window, mouse_button_callback); - glfwSetCursorPosCallback(window, cursor_position_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval( 1 ); - - glfwGetFramebufferSize(window, &width, &height); - reshape(window, width, height); - - glfwSetTime( 0.0 ); - - init(); - - /* Main loop */ - for (;;) - { - /* Timing */ - t = glfwGetTime(); - dt = t - t_old; - t_old = t; - - /* Draw one frame */ - display(); - - /* Swap buffers */ - glfwSwapBuffers(window); - glfwPollEvents(); - - /* Check if we are still running */ - if (glfwWindowShouldClose(window)) - break; - } - - glfwTerminate(); - exit( EXIT_SUCCESS ); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/gears.c b/third_party/penumbra/vendor/glfw/examples/gears.c deleted file mode 100644 index 292f44b5918..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/gears.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * 3-D gear wheels. This program is in the public domain. - * - * Command line options: - * -info print GL implementation information - * -exit automatically exit after 30 seconds - * - * - * Brian Paul - * - * - * Marcus Geelnard: - * - Conversion to GLFW - * - Time based rendering (frame rate independent) - * - Slightly modified camera that should work better for stereo viewing - * - * - * Camilla Löwy: - * - Removed FPS counter (this is not a benchmark) - * - Added a few comments - * - Enabled vsync - */ - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include -#include - -#include -#define GLFW_INCLUDE_NONE -#include - -/** - - Draw a gear wheel. You'll probably want to call this function when - building a display list since we do a lot of trig here. - - Input: inner_radius - radius of hole at center - outer_radius - radius at center of teeth - width - width of gear teeth - number of teeth - tooth_depth - depth of tooth - - **/ - -static void -gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, - GLint teeth, GLfloat tooth_depth) -{ - GLint i; - GLfloat r0, r1, r2; - GLfloat angle, da; - GLfloat u, v, len; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.f; - r2 = outer_radius + tooth_depth / 2.f; - - da = 2.f * (float) M_PI / teeth / 4.f; - - glShadeModel(GL_FLAT); - - glNormal3f(0.f, 0.f, 1.f); - - /* draw front face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), width * 0.5f); - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), width * 0.5f); - if (i < teeth) { - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), width * 0.5f); - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), width * 0.5f); - } - } - glEnd(); - - /* draw front sides of teeth */ - glBegin(GL_QUADS); - da = 2.f * (float) M_PI / teeth / 4.f; - for (i = 0; i < teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), width * 0.5f); - glVertex3f(r2 * (float) cos(angle + da), r2 * (float) sin(angle + da), width * 0.5f); - glVertex3f(r2 * (float) cos(angle + 2 * da), r2 * (float) sin(angle + 2 * da), width * 0.5f); - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), width * 0.5f); - } - glEnd(); - - glNormal3f(0.0, 0.0, -1.0); - - /* draw back face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), -width * 0.5f); - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), -width * 0.5f); - if (i < teeth) { - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), -width * 0.5f); - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), -width * 0.5f); - } - } - glEnd(); - - /* draw back sides of teeth */ - glBegin(GL_QUADS); - da = 2.f * (float) M_PI / teeth / 4.f; - for (i = 0; i < teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), -width * 0.5f); - glVertex3f(r2 * (float) cos(angle + 2 * da), r2 * (float) sin(angle + 2 * da), -width * 0.5f); - glVertex3f(r2 * (float) cos(angle + da), r2 * (float) sin(angle + da), -width * 0.5f); - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), -width * 0.5f); - } - glEnd(); - - /* draw outward faces of teeth */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i < teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), width * 0.5f); - glVertex3f(r1 * (float) cos(angle), r1 * (float) sin(angle), -width * 0.5f); - u = r2 * (float) cos(angle + da) - r1 * (float) cos(angle); - v = r2 * (float) sin(angle + da) - r1 * (float) sin(angle); - len = (float) sqrt(u * u + v * v); - u /= len; - v /= len; - glNormal3f(v, -u, 0.0); - glVertex3f(r2 * (float) cos(angle + da), r2 * (float) sin(angle + da), width * 0.5f); - glVertex3f(r2 * (float) cos(angle + da), r2 * (float) sin(angle + da), -width * 0.5f); - glNormal3f((float) cos(angle), (float) sin(angle), 0.f); - glVertex3f(r2 * (float) cos(angle + 2 * da), r2 * (float) sin(angle + 2 * da), width * 0.5f); - glVertex3f(r2 * (float) cos(angle + 2 * da), r2 * (float) sin(angle + 2 * da), -width * 0.5f); - u = r1 * (float) cos(angle + 3 * da) - r2 * (float) cos(angle + 2 * da); - v = r1 * (float) sin(angle + 3 * da) - r2 * (float) sin(angle + 2 * da); - glNormal3f(v, -u, 0.f); - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), width * 0.5f); - glVertex3f(r1 * (float) cos(angle + 3 * da), r1 * (float) sin(angle + 3 * da), -width * 0.5f); - glNormal3f((float) cos(angle), (float) sin(angle), 0.f); - } - - glVertex3f(r1 * (float) cos(0), r1 * (float) sin(0), width * 0.5f); - glVertex3f(r1 * (float) cos(0), r1 * (float) sin(0), -width * 0.5f); - - glEnd(); - - glShadeModel(GL_SMOOTH); - - /* draw inside radius cylinder */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.f * (float) M_PI / teeth; - glNormal3f(-(float) cos(angle), -(float) sin(angle), 0.f); - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), -width * 0.5f); - glVertex3f(r0 * (float) cos(angle), r0 * (float) sin(angle), width * 0.5f); - } - glEnd(); - -} - - -static GLfloat view_rotx = 20.f, view_roty = 30.f, view_rotz = 0.f; -static GLint gear1, gear2, gear3; -static GLfloat angle = 0.f; - -/* OpenGL draw function & timing */ -static void draw(void) -{ - glClearColor(0.0, 0.0, 0.0, 0.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(view_rotx, 1.0, 0.0, 0.0); - glRotatef(view_roty, 0.0, 1.0, 0.0); - glRotatef(view_rotz, 0.0, 0.0, 1.0); - - glPushMatrix(); - glTranslatef(-3.0, -2.0, 0.0); - glRotatef(angle, 0.0, 0.0, 1.0); - glCallList(gear1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(3.1f, -2.f, 0.f); - glRotatef(-2.f * angle - 9.f, 0.f, 0.f, 1.f); - glCallList(gear2); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-3.1f, 4.2f, 0.f); - glRotatef(-2.f * angle - 25.f, 0.f, 0.f, 1.f); - glCallList(gear3); - glPopMatrix(); - - glPopMatrix(); -} - - -/* update animation parameters */ -static void animate(void) -{ - angle = 100.f * (float) glfwGetTime(); -} - - -/* change view angle, exit upon ESC */ -void key( GLFWwindow* window, int k, int s, int action, int mods ) -{ - if( action != GLFW_PRESS ) return; - - switch (k) { - case GLFW_KEY_Z: - if( mods & GLFW_MOD_SHIFT ) - view_rotz -= 5.0; - else - view_rotz += 5.0; - break; - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - case GLFW_KEY_UP: - view_rotx += 5.0; - break; - case GLFW_KEY_DOWN: - view_rotx -= 5.0; - break; - case GLFW_KEY_LEFT: - view_roty += 5.0; - break; - case GLFW_KEY_RIGHT: - view_roty -= 5.0; - break; - default: - return; - } -} - - -/* new window size */ -void reshape( GLFWwindow* window, int width, int height ) -{ - GLfloat h = (GLfloat) height / (GLfloat) width; - GLfloat xmax, znear, zfar; - - znear = 5.0f; - zfar = 30.0f; - xmax = znear * 0.5f; - - glViewport( 0, 0, (GLint) width, (GLint) height ); - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glFrustum( -xmax, xmax, -xmax*h, xmax*h, znear, zfar ); - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - glTranslatef( 0.0, 0.0, -20.0 ); -} - - -/* program & OpenGL initialization */ -static void init(void) -{ - static GLfloat pos[4] = {5.f, 5.f, 10.f, 0.f}; - static GLfloat red[4] = {0.8f, 0.1f, 0.f, 1.f}; - static GLfloat green[4] = {0.f, 0.8f, 0.2f, 1.f}; - static GLfloat blue[4] = {0.2f, 0.2f, 1.f, 1.f}; - - glLightfv(GL_LIGHT0, GL_POSITION, pos); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - /* make the gears */ - gear1 = glGenLists(1); - glNewList(gear1, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); - gear(1.f, 4.f, 1.f, 20, 0.7f); - glEndList(); - - gear2 = glGenLists(1); - glNewList(gear2, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); - gear(0.5f, 2.f, 2.f, 10, 0.7f); - glEndList(); - - gear3 = glGenLists(1); - glNewList(gear3, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); - gear(1.3f, 2.f, 0.5f, 10, 0.7f); - glEndList(); - - glEnable(GL_NORMALIZE); -} - - -/* program entry */ -int main(int argc, char *argv[]) -{ - GLFWwindow* window; - int width, height; - - if( !glfwInit() ) - { - fprintf( stderr, "Failed to initialize GLFW\n" ); - exit( EXIT_FAILURE ); - } - - glfwWindowHint(GLFW_DEPTH_BITS, 16); - glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); - - window = glfwCreateWindow( 300, 300, "Gears", NULL, NULL ); - if (!window) - { - fprintf( stderr, "Failed to open GLFW window\n" ); - glfwTerminate(); - exit( EXIT_FAILURE ); - } - - // Set callback functions - glfwSetFramebufferSizeCallback(window, reshape); - glfwSetKeyCallback(window, key); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval( 1 ); - - glfwGetFramebufferSize(window, &width, &height); - reshape(window, width, height); - - // Parse command-line options - init(); - - // Main loop - while( !glfwWindowShouldClose(window) ) - { - // Draw gears - draw(); - - // Update animation - animate(); - - // Swap buffers - glfwSwapBuffers(window); - glfwPollEvents(); - } - - // Terminate GLFW - glfwTerminate(); - - // Exit program - exit( EXIT_SUCCESS ); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/glfw.icns b/third_party/penumbra/vendor/glfw/examples/glfw.icns deleted file mode 100644 index ad98f39752132003199572e951ee6d99dcceb823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27988 zcmeI)`CC(08VB%`#c-tog0dGS$YQIq6hwk$35!Z9A`(Q9U6h)#FKSo{0YP8@6^j%V z8`?nysw^TF5FrS~TD2gHRA@m>5d~SpXp|zo$qdiKbpC-(dAUE_b9nB_C7MLj z=W+tWq7e#pbK7Z8M+iA`qD@Wkvr;r8G#DWQ#tD)386na>8RNuA`Xow>w9mvifyNAk zWKZB{3xw3?7sk)e&Cbp9W_k12EVl4k^Gp0^!E%0X@iBorEj}i2v&F{*wqU=+`QYt? zz>*eNsJ(c7MvE)RQfnvwsbVg!o`3&#@}Jg+#cRdiznzRNB#$Ls3gFFy00@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!Oy}L}1~`Lzynl+vH?5Wbub$$gvz9 zT=AzC;Y|XCh96*SXle7ER@P0QXo6K9x#{b8=a3nnABs-E8yL%i$U^r_Y>?FTVBWj=9PxdxAcYS^Jqdt<3QD>x!u#_Vvz69yR`Mk{p6!*4-Kl_ezVSWxLMT39PhoAK zSg0N4W#VIcT*>a;sX$6~MqREb%>GJh;rnOL-Ho>S&AMjY*X`ZqW%&ngu5w6FJFd5} z$iIa;zS*OaU{Z22o!Yo6Vi%i4a>{e*cFj}Eyc8gRU@Ufs*Am%UAa}X*=IDx&MUW>)*YUmwkgtT%S77p^*bukNd@ zeo7OU<2ySll4f431kdIca@O;?GJ+QQYXzjKw-ttSmFuUg>7#(DLa?6~2}HolO3%`1-e<0nRr6^`Hk!0$GYV+D4u?tVF7`5m``Yd|R! z-0bOjRmG@C*-LU>rp&cXH(*qUzOxVR+ip+mWoBU~~ZX#jwv)R{ENj~Zg=fcd+DNHtwh{^s!VUUPF6cjDo zKGQ^rxbwTJCyL~*sCjY>A&M)@!PbpS80&79L)tV_mC!eDhY-{4Qwx`gbXSkRFR~z# zPZ5($YC6c6C4ux<5ldZ0W!5G!%BTSOWw}=$FcjI$1m8V6gsTiXt(_7a1qu)_-C69o8X|x%? zg$&#RpkPM9=K>1I|6!$#Ah_-!r)o9Ci12`kSX-PO%I*A979N24zj2g^Uq$?P9G&5I zzlAsoaTMa{QjMd^xBe4HA67}@X!Eenj~64!D?(p-%dGZ$T-9sI*J1Jyfk<{GCat?t zNycb&CQpFJOiLpEON@res-fo2E&9@nD0s${Hf#wbx<~yF(yIjs4_A_5^bhJnq6D3$ic`2=D=;K{Y@y4KSDn_~HrG z0Hy&<14*`oMFFY-OasYRFIW_y8o)GweFNB$f$byMnEUJRA_|t-?xUo-Utj+7fB*X@ M%pLDj?WqX;0VcM~e*gdg diff --git a/third_party/penumbra/vendor/glfw/examples/glfw.ico b/third_party/penumbra/vendor/glfw/examples/glfw.ico deleted file mode 100644 index 882a66051e351ce313238ca673bd11812ea77fd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21630 zcmeI4ze{9S6vvOrWSIpM)N!y z<+8}P+}hln`D-FC-W7TBWbpUj7WsKYeVrJ|vn7$wJ{0ah_`kd*^3_M`YyMbXjzzxs zShqLC_aBKo`oy+R{5_E`Keg?TW&a(K)z3wqaqkHbqQ0lB8Ps-flqT^L3WNfoKqwFj zgaV;JC=d#S0t=$Ry@p`E6WXV2!XCWoQ{Kn%V?ho_Jj_ra6bJ=Eflwe62n9lcP#_ct z1ww&PAQT7%LV-{q6bJ=Eflwe62n9lc1yR6X4-0>;3g~r8{RZX)-dv~TyPWsNf;=7L zVTJ;KsKC7!#9y1Z`#Kx-J5O(ILSKW*Fs35>$aFdw*4&h{voov)TK|#O^cJw_6ssR* z%70-yW9G?pk4neKfd}+ z&fC}hJn+*8-^lal-)p9fMk5)I$FjVIS8yk{RlC7;R+1}ok zot+)o-QAVFy*hj*Vor_b92+rLx~zP6sXYaXOi7Yh5{8DXkr3(Ed?qx&^sr{KnYTzfo?ECh60o# z4Rj|7GH?!;3VL2-wlA4=feH<@m<$CfG|=J_WGGOfffk$~LxBnn^g$%ZP@qBseP9VP z6sXXE9kA!zm%_S20~H`ah5{8Ds3-{vRA`_gCCE^qLIV{pL52bq8mO2FG8CxLfDKWL zR#Ey=S@Tyj)WSSuC{Uq+9*6`P3RGyI2PZ*>3JsPxSP3!|sL((UV1f({hYSTOG++bN!aNkH(149n3-kJc0xC3MN7TYR6sXXEowEz(p+JS#F+zb*U||*D zWb~jzKc{TM9xTc50cCpYbIO19dHl~lx7p`6i+gKvZ+)KmKF@rMduwrTeV+L~&wPt} zYjJOVp7}n{e2aT)ac_N|`99Bli+gKvZ+)KmKF@rMduwrTeV+L~&wPt}YjJOVp7}n{ ze2aT)ac_N|`99Bli+gKvZ+)KmKF@rMduwrTeV+L~&wPt}YjJOVp7}n{e2aT)ac?=j z#dtsk?!M2=`r*g73W|PM+cj;?v<=gii+-ZFQ`$Odo1`s~wm;hHXltWwjJ7P=o@gtg zZHKlP40=-*x$Gv*mTRm0 VVj`~F&hZW6f3mCD+3;_h-vJ|L*B$@> diff --git a/third_party/penumbra/vendor/glfw/examples/glfw.rc b/third_party/penumbra/vendor/glfw/examples/glfw.rc deleted file mode 100644 index f2b62f6c40b..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/glfw.rc +++ /dev/null @@ -1,3 +0,0 @@ - -GLFW_ICON ICON "glfw.ico" - diff --git a/third_party/penumbra/vendor/glfw/examples/heightmap.c b/third_party/penumbra/vendor/glfw/examples/heightmap.c deleted file mode 100644 index 13a3c1e147f..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/heightmap.c +++ /dev/null @@ -1,512 +0,0 @@ -//======================================================================== -// Heightmap example program using OpenGL 3 core profile -// Copyright (c) 2010 Olivier Delannoy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include -#include -#include -#include -#include - -#include -#define GLFW_INCLUDE_NONE -#include - -/* Map height updates */ -#define MAX_CIRCLE_SIZE (5.0f) -#define MAX_DISPLACEMENT (1.0f) -#define DISPLACEMENT_SIGN_LIMIT (0.3f) -#define MAX_ITER (200) -#define NUM_ITER_AT_A_TIME (1) - -/* Map general information */ -#define MAP_SIZE (10.0f) -#define MAP_NUM_VERTICES (80) -#define MAP_NUM_TOTAL_VERTICES (MAP_NUM_VERTICES*MAP_NUM_VERTICES) -#define MAP_NUM_LINES (3* (MAP_NUM_VERTICES - 1) * (MAP_NUM_VERTICES - 1) + \ - 2 * (MAP_NUM_VERTICES - 1)) - - -/********************************************************************** - * Default shader programs - *********************************************************************/ - -static const char* vertex_shader_text = -"#version 150\n" -"uniform mat4 project;\n" -"uniform mat4 modelview;\n" -"in float x;\n" -"in float y;\n" -"in float z;\n" -"\n" -"void main()\n" -"{\n" -" gl_Position = project * modelview * vec4(x, y, z, 1.0);\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 150\n" -"out vec4 color;\n" -"void main()\n" -"{\n" -" color = vec4(0.2, 1.0, 0.2, 1.0); \n" -"}\n"; - -/********************************************************************** - * Values for shader uniforms - *********************************************************************/ - -/* Frustum configuration */ -static GLfloat view_angle = 45.0f; -static GLfloat aspect_ratio = 4.0f/3.0f; -static GLfloat z_near = 1.0f; -static GLfloat z_far = 100.f; - -/* Projection matrix */ -static GLfloat projection_matrix[16] = { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f -}; - -/* Model view matrix */ -static GLfloat modelview_matrix[16] = { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f -}; - -/********************************************************************** - * Heightmap vertex and index data - *********************************************************************/ - -static GLfloat map_vertices[3][MAP_NUM_TOTAL_VERTICES]; -static GLuint map_line_indices[2*MAP_NUM_LINES]; - -/* Store uniform location for the shaders - * Those values are setup as part of the process of creating - * the shader program. They should not be used before creating - * the program. - */ -static GLuint mesh; -static GLuint mesh_vbo[4]; - -/********************************************************************** - * OpenGL helper functions - *********************************************************************/ - -/* Creates a shader object of the specified type using the specified text - */ -static GLuint make_shader(GLenum type, const char* text) -{ - GLuint shader; - GLint shader_ok; - GLsizei log_length; - char info_log[8192]; - - shader = glCreateShader(type); - if (shader != 0) - { - glShaderSource(shader, 1, (const GLchar**)&text, NULL); - glCompileShader(shader); - glGetShaderiv(shader, GL_COMPILE_STATUS, &shader_ok); - if (shader_ok != GL_TRUE) - { - fprintf(stderr, "ERROR: Failed to compile %s shader\n", (type == GL_FRAGMENT_SHADER) ? "fragment" : "vertex" ); - glGetShaderInfoLog(shader, 8192, &log_length,info_log); - fprintf(stderr, "ERROR: \n%s\n\n", info_log); - glDeleteShader(shader); - shader = 0; - } - } - return shader; -} - -/* Creates a program object using the specified vertex and fragment text - */ -static GLuint make_shader_program(const char* vs_text, const char* fs_text) -{ - GLuint program = 0u; - GLint program_ok; - GLuint vertex_shader = 0u; - GLuint fragment_shader = 0u; - GLsizei log_length; - char info_log[8192]; - - vertex_shader = make_shader(GL_VERTEX_SHADER, vs_text); - if (vertex_shader != 0u) - { - fragment_shader = make_shader(GL_FRAGMENT_SHADER, fs_text); - if (fragment_shader != 0u) - { - /* make the program that connect the two shader and link it */ - program = glCreateProgram(); - if (program != 0u) - { - /* attach both shader and link */ - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - glGetProgramiv(program, GL_LINK_STATUS, &program_ok); - - if (program_ok != GL_TRUE) - { - fprintf(stderr, "ERROR, failed to link shader program\n"); - glGetProgramInfoLog(program, 8192, &log_length, info_log); - fprintf(stderr, "ERROR: \n%s\n\n", info_log); - glDeleteProgram(program); - glDeleteShader(fragment_shader); - glDeleteShader(vertex_shader); - program = 0u; - } - } - } - else - { - fprintf(stderr, "ERROR: Unable to load fragment shader\n"); - glDeleteShader(vertex_shader); - } - } - else - { - fprintf(stderr, "ERROR: Unable to load vertex shader\n"); - } - return program; -} - -/********************************************************************** - * Geometry creation functions - *********************************************************************/ - -/* Generate vertices and indices for the heightmap - */ -static void init_map(void) -{ - int i; - int j; - int k; - GLfloat step = MAP_SIZE / (MAP_NUM_VERTICES - 1); - GLfloat x = 0.0f; - GLfloat z = 0.0f; - /* Create a flat grid */ - k = 0; - for (i = 0 ; i < MAP_NUM_VERTICES ; ++i) - { - for (j = 0 ; j < MAP_NUM_VERTICES ; ++j) - { - map_vertices[0][k] = x; - map_vertices[1][k] = 0.0f; - map_vertices[2][k] = z; - z += step; - ++k; - } - x += step; - z = 0.0f; - } -#if DEBUG_ENABLED - for (i = 0 ; i < MAP_NUM_TOTAL_VERTICES ; ++i) - { - printf ("Vertice %d (%f, %f, %f)\n", - i, map_vertices[0][i], map_vertices[1][i], map_vertices[2][i]); - - } -#endif - /* create indices */ - /* line fan based on i - * i+1 - * | / i + n + 1 - * | / - * |/ - * i --- i + n - */ - - /* close the top of the square */ - k = 0; - for (i = 0 ; i < MAP_NUM_VERTICES -1 ; ++i) - { - map_line_indices[k++] = (i + 1) * MAP_NUM_VERTICES -1; - map_line_indices[k++] = (i + 2) * MAP_NUM_VERTICES -1; - } - /* close the right of the square */ - for (i = 0 ; i < MAP_NUM_VERTICES -1 ; ++i) - { - map_line_indices[k++] = (MAP_NUM_VERTICES - 1) * MAP_NUM_VERTICES + i; - map_line_indices[k++] = (MAP_NUM_VERTICES - 1) * MAP_NUM_VERTICES + i + 1; - } - - for (i = 0 ; i < (MAP_NUM_VERTICES - 1) ; ++i) - { - for (j = 0 ; j < (MAP_NUM_VERTICES - 1) ; ++j) - { - int ref = i * (MAP_NUM_VERTICES) + j; - map_line_indices[k++] = ref; - map_line_indices[k++] = ref + 1; - - map_line_indices[k++] = ref; - map_line_indices[k++] = ref + MAP_NUM_VERTICES; - - map_line_indices[k++] = ref; - map_line_indices[k++] = ref + MAP_NUM_VERTICES + 1; - } - } - -#ifdef DEBUG_ENABLED - for (k = 0 ; k < 2 * MAP_NUM_LINES ; k += 2) - { - int beg, end; - beg = map_line_indices[k]; - end = map_line_indices[k+1]; - printf ("Line %d: %d -> %d (%f, %f, %f) -> (%f, %f, %f)\n", - k / 2, beg, end, - map_vertices[0][beg], map_vertices[1][beg], map_vertices[2][beg], - map_vertices[0][end], map_vertices[1][end], map_vertices[2][end]); - } -#endif -} - -static void generate_heightmap__circle(float* center_x, float* center_y, - float* size, float* displacement) -{ - float sign; - /* random value for element in between [0-1.0] */ - *center_x = (MAP_SIZE * rand()) / (1.0f * RAND_MAX); - *center_y = (MAP_SIZE * rand()) / (1.0f * RAND_MAX); - *size = (MAX_CIRCLE_SIZE * rand()) / (1.0f * RAND_MAX); - sign = (1.0f * rand()) / (1.0f * RAND_MAX); - sign = (sign < DISPLACEMENT_SIGN_LIMIT) ? -1.0f : 1.0f; - *displacement = (sign * (MAX_DISPLACEMENT * rand())) / (1.0f * RAND_MAX); -} - -/* Run the specified number of iterations of the generation process for the - * heightmap - */ -static void update_map(int num_iter) -{ - assert(num_iter > 0); - while(num_iter) - { - /* center of the circle */ - float center_x; - float center_z; - float circle_size; - float disp; - size_t ii; - generate_heightmap__circle(¢er_x, ¢er_z, &circle_size, &disp); - disp = disp / 2.0f; - for (ii = 0u ; ii < MAP_NUM_TOTAL_VERTICES ; ++ii) - { - GLfloat dx = center_x - map_vertices[0][ii]; - GLfloat dz = center_z - map_vertices[2][ii]; - GLfloat pd = (2.0f * (float) sqrt((dx * dx) + (dz * dz))) / circle_size; - if (fabs(pd) <= 1.0f) - { - /* tx,tz is within the circle */ - GLfloat new_height = disp + (float) (cos(pd*3.14f)*disp); - map_vertices[1][ii] += new_height; - } - } - --num_iter; - } -} - -/********************************************************************** - * OpenGL helper functions - *********************************************************************/ - -/* Create VBO, IBO and VAO objects for the heightmap geometry and bind them to - * the specified program object - */ -static void make_mesh(GLuint program) -{ - GLuint attrloc; - - glGenVertexArrays(1, &mesh); - glGenBuffers(4, mesh_vbo); - glBindVertexArray(mesh); - /* Prepare the data for drawing through a buffer inidices */ - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh_vbo[3]); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)* MAP_NUM_LINES * 2, map_line_indices, GL_STATIC_DRAW); - - /* Prepare the attributes for rendering */ - attrloc = glGetAttribLocation(program, "x"); - glBindBuffer(GL_ARRAY_BUFFER, mesh_vbo[0]); - glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * MAP_NUM_TOTAL_VERTICES, &map_vertices[0][0], GL_STATIC_DRAW); - glEnableVertexAttribArray(attrloc); - glVertexAttribPointer(attrloc, 1, GL_FLOAT, GL_FALSE, 0, 0); - - attrloc = glGetAttribLocation(program, "z"); - glBindBuffer(GL_ARRAY_BUFFER, mesh_vbo[2]); - glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * MAP_NUM_TOTAL_VERTICES, &map_vertices[2][0], GL_STATIC_DRAW); - glEnableVertexAttribArray(attrloc); - glVertexAttribPointer(attrloc, 1, GL_FLOAT, GL_FALSE, 0, 0); - - attrloc = glGetAttribLocation(program, "y"); - glBindBuffer(GL_ARRAY_BUFFER, mesh_vbo[1]); - glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * MAP_NUM_TOTAL_VERTICES, &map_vertices[1][0], GL_DYNAMIC_DRAW); - glEnableVertexAttribArray(attrloc); - glVertexAttribPointer(attrloc, 1, GL_FLOAT, GL_FALSE, 0, 0); -} - -/* Update VBO vertices from source data - */ -static void update_mesh(void) -{ - glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(GLfloat) * MAP_NUM_TOTAL_VERTICES, &map_vertices[1][0]); -} - -/********************************************************************** - * GLFW callback functions - *********************************************************************/ - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - switch(key) - { - case GLFW_KEY_ESCAPE: - /* Exit program on Escape */ - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - } -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -int main(int argc, char** argv) -{ - GLFWwindow* window; - int iter; - double dt; - double last_update_time; - int frame; - float f; - GLint uloc_modelview; - GLint uloc_project; - int width, height; - - GLuint shader_program; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); - - window = glfwCreateWindow(800, 600, "GLFW OpenGL3 Heightmap demo", NULL, NULL); - if (! window ) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - /* Register events callback */ - glfwSetKeyCallback(window, key_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - /* Prepare opengl resources for rendering */ - shader_program = make_shader_program(vertex_shader_text, fragment_shader_text); - - if (shader_program == 0u) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glUseProgram(shader_program); - uloc_project = glGetUniformLocation(shader_program, "project"); - uloc_modelview = glGetUniformLocation(shader_program, "modelview"); - - /* Compute the projection matrix */ - f = 1.0f / tanf(view_angle / 2.0f); - projection_matrix[0] = f / aspect_ratio; - projection_matrix[5] = f; - projection_matrix[10] = (z_far + z_near)/ (z_near - z_far); - projection_matrix[11] = -1.0f; - projection_matrix[14] = 2.0f * (z_far * z_near) / (z_near - z_far); - glUniformMatrix4fv(uloc_project, 1, GL_FALSE, projection_matrix); - - /* Set the camera position */ - modelview_matrix[12] = -5.0f; - modelview_matrix[13] = -5.0f; - modelview_matrix[14] = -20.0f; - glUniformMatrix4fv(uloc_modelview, 1, GL_FALSE, modelview_matrix); - - /* Create mesh data */ - init_map(); - make_mesh(shader_program); - - /* Create vao + vbo to store the mesh */ - /* Create the vbo to store all the information for the grid and the height */ - - /* setup the scene ready for rendering */ - glfwGetFramebufferSize(window, &width, &height); - glViewport(0, 0, width, height); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - - /* main loop */ - frame = 0; - iter = 0; - last_update_time = glfwGetTime(); - - while (!glfwWindowShouldClose(window)) - { - ++frame; - /* render the next frame */ - glClear(GL_COLOR_BUFFER_BIT); - glDrawElements(GL_LINES, 2* MAP_NUM_LINES , GL_UNSIGNED_INT, 0); - - /* display and process events through callbacks */ - glfwSwapBuffers(window); - glfwPollEvents(); - /* Check the frame rate and update the heightmap if needed */ - dt = glfwGetTime(); - if ((dt - last_update_time) > 0.2) - { - /* generate the next iteration of the heightmap */ - if (iter < MAX_ITER) - { - update_map(NUM_ITER_AT_A_TIME); - update_mesh(); - iter += NUM_ITER_AT_A_TIME; - } - last_update_time = dt; - frame = 0; - } - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/offscreen.c b/third_party/penumbra/vendor/glfw/examples/offscreen.c deleted file mode 100644 index eca37c48108..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/offscreen.c +++ /dev/null @@ -1,176 +0,0 @@ -//======================================================================== -// Offscreen rendering example -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#if USE_NATIVE_OSMESA - #define GLFW_EXPOSE_NATIVE_OSMESA - #include -#endif - -#include "linmath.h" - -#include -#include - -#define STB_IMAGE_WRITE_IMPLEMENTATION -#include - -static const struct -{ - float x, y; - float r, g, b; -} vertices[3] = -{ - { -0.6f, -0.4f, 1.f, 0.f, 0.f }, - { 0.6f, -0.4f, 0.f, 1.f, 0.f }, - { 0.f, 0.6f, 0.f, 0.f, 1.f } -}; - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec3 vCol;\n" -"attribute vec2 vPos;\n" -"varying vec3 color;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -" color = vCol;\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"varying vec3 color;\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(color, 1.0);\n" -"}\n"; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -int main(void) -{ - GLFWwindow* window; - GLuint vertex_buffer, vertex_shader, fragment_shader, program; - GLint mvp_location, vpos_location, vcol_location; - float ratio; - int width, height; - mat4x4 mvp; - char* buffer; - - glfwSetErrorCallback(error_callback); - - glfwInitHint(GLFW_COCOA_MENUBAR, GLFW_FALSE); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - - window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - // NOTE: OpenGL error checks have been omitted for brevity - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - vcol_location = glGetAttribLocation(program, "vCol"); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - glEnableVertexAttribArray(vcol_location); - glVertexAttribPointer(vcol_location, 3, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) (sizeof(float) * 2)); - - glfwGetFramebufferSize(window, &width, &height); - ratio = width / (float) height; - - glViewport(0, 0, width, height); - glClear(GL_COLOR_BUFFER_BIT); - - mat4x4_ortho(mvp, -ratio, ratio, -1.f, 1.f, 1.f, -1.f); - - glUseProgram(program); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glDrawArrays(GL_TRIANGLES, 0, 3); - -#if USE_NATIVE_OSMESA - glfwGetOSMesaColorBuffer(window, &width, &height, NULL, (void**) &buffer); -#else - buffer = calloc(4, width * height); - glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); -#endif - - // Write image Y-flipped because OpenGL - stbi_write_png("offscreen.png", - width, height, 4, - buffer + (width * 4 * (height - 1)), - -width * 4); - -#if USE_NATIVE_OSMESA - // Here is where there's nothing -#else - free(buffer); -#endif - - glfwDestroyWindow(window); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/particles.c b/third_party/penumbra/vendor/glfw/examples/particles.c deleted file mode 100644 index 9556ccac0f0..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/particles.c +++ /dev/null @@ -1,1073 +0,0 @@ -//======================================================================== -// A simple particle engine with threaded physics -// Copyright (c) Marcus Geelnard -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#define GLFW_INCLUDE_NONE -#include - -// Define tokens for GL_EXT_separate_specular_color if not already defined -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif // GL_EXT_separate_specular_color - - -//======================================================================== -// Type definitions -//======================================================================== - -typedef struct -{ - float x, y, z; -} Vec3; - -// This structure is used for interleaved vertex arrays (see the -// draw_particles function) -// -// NOTE: This structure SHOULD be packed on most systems. It uses 32-bit fields -// on 32-bit boundaries, and is a multiple of 64 bits in total (6x32=3x64). If -// it does not work, try using pragmas or whatever to force the structure to be -// packed. -typedef struct -{ - GLfloat s, t; // Texture coordinates - GLuint rgba; // Color (four ubytes packed into an uint) - GLfloat x, y, z; // Vertex coordinates -} Vertex; - - -//======================================================================== -// Program control global variables -//======================================================================== - -// Window dimensions -float aspect_ratio; - -// "wireframe" flag (true if we use wireframe view) -int wireframe; - -// Thread synchronization -struct { - double t; // Time (s) - float dt; // Time since last frame (s) - int p_frame; // Particle physics frame number - int d_frame; // Particle draw frame number - cnd_t p_done; // Condition: particle physics done - cnd_t d_done; // Condition: particle draw done - mtx_t particles_lock; // Particles data sharing mutex -} thread_sync; - - -//======================================================================== -// Texture declarations (we hard-code them into the source code, since -// they are so simple) -//======================================================================== - -#define P_TEX_WIDTH 8 // Particle texture dimensions -#define P_TEX_HEIGHT 8 -#define F_TEX_WIDTH 16 // Floor texture dimensions -#define F_TEX_HEIGHT 16 - -// Texture object IDs -GLuint particle_tex_id, floor_tex_id; - -// Particle texture (a simple spot) -const unsigned char particle_texture[ P_TEX_WIDTH * P_TEX_HEIGHT ] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x11, 0x22, 0x22, 0x11, 0x00, 0x00, - 0x00, 0x11, 0x33, 0x88, 0x77, 0x33, 0x11, 0x00, - 0x00, 0x22, 0x88, 0xff, 0xee, 0x77, 0x22, 0x00, - 0x00, 0x22, 0x77, 0xee, 0xff, 0x88, 0x22, 0x00, - 0x00, 0x11, 0x33, 0x77, 0x88, 0x33, 0x11, 0x00, - 0x00, 0x00, 0x11, 0x33, 0x22, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -// Floor texture (your basic checkered floor) -const unsigned char floor_texture[ F_TEX_WIDTH * F_TEX_HEIGHT ] = { - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0xff, 0xf0, 0xcc, 0xf0, 0xf0, 0xf0, 0xff, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0xf0, 0xcc, 0xee, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x30, 0x66, 0x30, 0x30, 0x30, 0x20, 0x30, 0x30, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xee, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0xf0, 0xf0, 0xf0, 0xf0, 0xcc, 0xf0, 0xf0, 0xf0, 0x30, 0x30, 0x55, 0x30, 0x30, 0x44, 0x30, 0x30, - 0xf0, 0xdd, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xf0, 0xf0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x60, 0x30, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x33, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x30, 0x30, 0xf0, 0xff, 0xf0, 0xf0, 0xdd, 0xf0, 0xf0, 0xff, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x55, 0x33, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xf0, 0xf0, - 0x30, 0x44, 0x66, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0, 0xf0, 0xaa, 0xf0, 0xf0, 0xcc, 0xf0, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xf0, 0xdd, 0xf0, - 0x30, 0x30, 0x30, 0x77, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, -}; - - -//======================================================================== -// These are fixed constants that control the particle engine. In a -// modular world, these values should be variables... -//======================================================================== - -// Maximum number of particles -#define MAX_PARTICLES 3000 - -// Life span of a particle (in seconds) -#define LIFE_SPAN 8.f - -// A new particle is born every [BIRTH_INTERVAL] second -#define BIRTH_INTERVAL (LIFE_SPAN/(float)MAX_PARTICLES) - -// Particle size (meters) -#define PARTICLE_SIZE 0.7f - -// Gravitational constant (m/s^2) -#define GRAVITY 9.8f - -// Base initial velocity (m/s) -#define VELOCITY 8.f - -// Bounce friction (1.0 = no friction, 0.0 = maximum friction) -#define FRICTION 0.75f - -// "Fountain" height (m) -#define FOUNTAIN_HEIGHT 3.f - -// Fountain radius (m) -#define FOUNTAIN_RADIUS 1.6f - -// Minimum delta-time for particle phisics (s) -#define MIN_DELTA_T (BIRTH_INTERVAL * 0.5f) - - -//======================================================================== -// Particle system global variables -//======================================================================== - -// This structure holds all state for a single particle -typedef struct { - float x,y,z; // Position in space - float vx,vy,vz; // Velocity vector - float r,g,b; // Color of particle - float life; // Life of particle (1.0 = newborn, < 0.0 = dead) - int active; // Tells if this particle is active -} PARTICLE; - -// Global vectors holding all particles. We use two vectors for double -// buffering. -static PARTICLE particles[MAX_PARTICLES]; - -// Global variable holding the age of the youngest particle -static float min_age; - -// Color of latest born particle (used for fountain lighting) -static float glow_color[4]; - -// Position of latest born particle (used for fountain lighting) -static float glow_pos[4]; - - -//======================================================================== -// Object material and fog configuration constants -//======================================================================== - -const GLfloat fountain_diffuse[4] = { 0.7f, 1.f, 1.f, 1.f }; -const GLfloat fountain_specular[4] = { 1.f, 1.f, 1.f, 1.f }; -const GLfloat fountain_shininess = 12.f; -const GLfloat floor_diffuse[4] = { 1.f, 0.6f, 0.6f, 1.f }; -const GLfloat floor_specular[4] = { 0.6f, 0.6f, 0.6f, 1.f }; -const GLfloat floor_shininess = 18.f; -const GLfloat fog_color[4] = { 0.1f, 0.1f, 0.1f, 1.f }; - - -//======================================================================== -// Print usage information -//======================================================================== - -static void usage(void) -{ - printf("Usage: particles [-bfhs]\n"); - printf("Options:\n"); - printf(" -f Run in full screen\n"); - printf(" -h Display this help\n"); - printf(" -s Run program as single thread (default is to use two threads)\n"); - printf("\n"); - printf("Program runtime controls:\n"); - printf(" W Toggle wireframe mode\n"); - printf(" Esc Exit program\n"); -} - - -//======================================================================== -// Initialize a new particle -//======================================================================== - -static void init_particle(PARTICLE *p, double t) -{ - float xy_angle, velocity; - - // Start position of particle is at the fountain blow-out - p->x = 0.f; - p->y = 0.f; - p->z = FOUNTAIN_HEIGHT; - - // Start velocity is up (Z)... - p->vz = 0.7f + (0.3f / 4096.f) * (float) (rand() & 4095); - - // ...and a randomly chosen X/Y direction - xy_angle = (2.f * (float) M_PI / 4096.f) * (float) (rand() & 4095); - p->vx = 0.4f * (float) cos(xy_angle); - p->vy = 0.4f * (float) sin(xy_angle); - - // Scale velocity vector according to a time-varying velocity - velocity = VELOCITY * (0.8f + 0.1f * (float) (sin(0.5 * t) + sin(1.31 * t))); - p->vx *= velocity; - p->vy *= velocity; - p->vz *= velocity; - - // Color is time-varying - p->r = 0.7f + 0.3f * (float) sin(0.34 * t + 0.1); - p->g = 0.6f + 0.4f * (float) sin(0.63 * t + 1.1); - p->b = 0.6f + 0.4f * (float) sin(0.91 * t + 2.1); - - // Store settings for fountain glow lighting - glow_pos[0] = 0.4f * (float) sin(1.34 * t); - glow_pos[1] = 0.4f * (float) sin(3.11 * t); - glow_pos[2] = FOUNTAIN_HEIGHT + 1.f; - glow_pos[3] = 1.f; - glow_color[0] = p->r; - glow_color[1] = p->g; - glow_color[2] = p->b; - glow_color[3] = 1.f; - - // The particle is new-born and active - p->life = 1.f; - p->active = 1; -} - - -//======================================================================== -// Update a particle -//======================================================================== - -#define FOUNTAIN_R2 (FOUNTAIN_RADIUS+PARTICLE_SIZE/2)*(FOUNTAIN_RADIUS+PARTICLE_SIZE/2) - -static void update_particle(PARTICLE *p, float dt) -{ - // If the particle is not active, we need not do anything - if (!p->active) - return; - - // The particle is getting older... - p->life -= dt * (1.f / LIFE_SPAN); - - // Did the particle die? - if (p->life <= 0.f) - { - p->active = 0; - return; - } - - // Apply gravity - p->vz = p->vz - GRAVITY * dt; - - // Update particle position - p->x = p->x + p->vx * dt; - p->y = p->y + p->vy * dt; - p->z = p->z + p->vz * dt; - - // Simple collision detection + response - if (p->vz < 0.f) - { - // Particles should bounce on the fountain (with friction) - if ((p->x * p->x + p->y * p->y) < FOUNTAIN_R2 && - p->z < (FOUNTAIN_HEIGHT + PARTICLE_SIZE / 2)) - { - p->vz = -FRICTION * p->vz; - p->z = FOUNTAIN_HEIGHT + PARTICLE_SIZE / 2 + - FRICTION * (FOUNTAIN_HEIGHT + - PARTICLE_SIZE / 2 - p->z); - } - - // Particles should bounce on the floor (with friction) - else if (p->z < PARTICLE_SIZE / 2) - { - p->vz = -FRICTION * p->vz; - p->z = PARTICLE_SIZE / 2 + - FRICTION * (PARTICLE_SIZE / 2 - p->z); - } - } -} - - -//======================================================================== -// The main frame for the particle engine. Called once per frame. -//======================================================================== - -static void particle_engine(double t, float dt) -{ - int i; - float dt2; - - // Update particles (iterated several times per frame if dt is too large) - while (dt > 0.f) - { - // Calculate delta time for this iteration - dt2 = dt < MIN_DELTA_T ? dt : MIN_DELTA_T; - - for (i = 0; i < MAX_PARTICLES; i++) - update_particle(&particles[i], dt2); - - min_age += dt2; - - // Should we create any new particle(s)? - while (min_age >= BIRTH_INTERVAL) - { - min_age -= BIRTH_INTERVAL; - - // Find a dead particle to replace with a new one - for (i = 0; i < MAX_PARTICLES; i++) - { - if (!particles[i].active) - { - init_particle(&particles[i], t + min_age); - update_particle(&particles[i], min_age); - break; - } - } - } - - dt -= dt2; - } -} - - -//======================================================================== -// Draw all active particles. We use OpenGL 1.1 vertex -// arrays for this in order to accelerate the drawing. -//======================================================================== - -#define BATCH_PARTICLES 70 // Number of particles to draw in each batch - // (70 corresponds to 7.5 KB = will not blow - // the L1 data cache on most CPUs) -#define PARTICLE_VERTS 4 // Number of vertices per particle - -static void draw_particles(GLFWwindow* window, double t, float dt) -{ - int i, particle_count; - Vertex vertex_array[BATCH_PARTICLES * PARTICLE_VERTS]; - Vertex* vptr; - float alpha; - GLuint rgba; - Vec3 quad_lower_left, quad_lower_right; - GLfloat mat[16]; - PARTICLE* pptr; - - // Here comes the real trick with flat single primitive objects (s.c. - // "billboards"): We must rotate the textured primitive so that it - // always faces the viewer (is coplanar with the view-plane). - // We: - // 1) Create the primitive around origo (0,0,0) - // 2) Rotate it so that it is coplanar with the view plane - // 3) Translate it according to the particle position - // Note that 1) and 2) is the same for all particles (done only once). - - // Get modelview matrix. We will only use the upper left 3x3 part of - // the matrix, which represents the rotation. - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - - // 1) & 2) We do it in one swift step: - // Although not obvious, the following six lines represent two matrix/ - // vector multiplications. The matrix is the inverse 3x3 rotation - // matrix (i.e. the transpose of the same matrix), and the two vectors - // represent the lower left corner of the quad, PARTICLE_SIZE/2 * - // (-1,-1,0), and the lower right corner, PARTICLE_SIZE/2 * (1,-1,0). - // The upper left/right corners of the quad is always the negative of - // the opposite corners (regardless of rotation). - quad_lower_left.x = (-PARTICLE_SIZE / 2) * (mat[0] + mat[1]); - quad_lower_left.y = (-PARTICLE_SIZE / 2) * (mat[4] + mat[5]); - quad_lower_left.z = (-PARTICLE_SIZE / 2) * (mat[8] + mat[9]); - quad_lower_right.x = (PARTICLE_SIZE / 2) * (mat[0] - mat[1]); - quad_lower_right.y = (PARTICLE_SIZE / 2) * (mat[4] - mat[5]); - quad_lower_right.z = (PARTICLE_SIZE / 2) * (mat[8] - mat[9]); - - // Don't update z-buffer, since all particles are transparent! - glDepthMask(GL_FALSE); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - - // Select particle texture - if (!wireframe) - { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, particle_tex_id); - } - - // Set up vertex arrays. We use interleaved arrays, which is easier to - // handle (in most situations) and it gives a linear memory access - // access pattern (which may give better performance in some - // situations). GL_T2F_C4UB_V3F means: 2 floats for texture coords, - // 4 ubytes for color and 3 floats for vertex coord (in that order). - // Most OpenGL cards / drivers are optimized for this format. - glInterleavedArrays(GL_T2F_C4UB_V3F, 0, vertex_array); - - // Wait for particle physics thread to be done - mtx_lock(&thread_sync.particles_lock); - while (!glfwWindowShouldClose(window) && - thread_sync.p_frame <= thread_sync.d_frame) - { - struct timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - ts.tv_nsec += 100 * 1000 * 1000; - ts.tv_sec += ts.tv_nsec / (1000 * 1000 * 1000); - ts.tv_nsec %= 1000 * 1000 * 1000; - cnd_timedwait(&thread_sync.p_done, &thread_sync.particles_lock, &ts); - } - - // Store the frame time and delta time for the physics thread - thread_sync.t = t; - thread_sync.dt = dt; - - // Update frame counter - thread_sync.d_frame++; - - // Loop through all particles and build vertex arrays. - particle_count = 0; - vptr = vertex_array; - pptr = particles; - - for (i = 0; i < MAX_PARTICLES; i++) - { - if (pptr->active) - { - // Calculate particle intensity (we set it to max during 75% - // of its life, then it fades out) - alpha = 4.f * pptr->life; - if (alpha > 1.f) - alpha = 1.f; - - // Convert color from float to 8-bit (store it in a 32-bit - // integer using endian independent type casting) - ((GLubyte*) &rgba)[0] = (GLubyte)(pptr->r * 255.f); - ((GLubyte*) &rgba)[1] = (GLubyte)(pptr->g * 255.f); - ((GLubyte*) &rgba)[2] = (GLubyte)(pptr->b * 255.f); - ((GLubyte*) &rgba)[3] = (GLubyte)(alpha * 255.f); - - // 3) Translate the quad to the correct position in modelview - // space and store its parameters in vertex arrays (we also - // store texture coord and color information for each vertex). - - // Lower left corner - vptr->s = 0.f; - vptr->t = 0.f; - vptr->rgba = rgba; - vptr->x = pptr->x + quad_lower_left.x; - vptr->y = pptr->y + quad_lower_left.y; - vptr->z = pptr->z + quad_lower_left.z; - vptr ++; - - // Lower right corner - vptr->s = 1.f; - vptr->t = 0.f; - vptr->rgba = rgba; - vptr->x = pptr->x + quad_lower_right.x; - vptr->y = pptr->y + quad_lower_right.y; - vptr->z = pptr->z + quad_lower_right.z; - vptr ++; - - // Upper right corner - vptr->s = 1.f; - vptr->t = 1.f; - vptr->rgba = rgba; - vptr->x = pptr->x - quad_lower_left.x; - vptr->y = pptr->y - quad_lower_left.y; - vptr->z = pptr->z - quad_lower_left.z; - vptr ++; - - // Upper left corner - vptr->s = 0.f; - vptr->t = 1.f; - vptr->rgba = rgba; - vptr->x = pptr->x - quad_lower_right.x; - vptr->y = pptr->y - quad_lower_right.y; - vptr->z = pptr->z - quad_lower_right.z; - vptr ++; - - // Increase count of drawable particles - particle_count ++; - } - - // If we have filled up one batch of particles, draw it as a set - // of quads using glDrawArrays. - if (particle_count >= BATCH_PARTICLES) - { - // The first argument tells which primitive type we use (QUAD) - // The second argument tells the index of the first vertex (0) - // The last argument is the vertex count - glDrawArrays(GL_QUADS, 0, PARTICLE_VERTS * particle_count); - particle_count = 0; - vptr = vertex_array; - } - - // Next particle - pptr++; - } - - // We are done with the particle data - mtx_unlock(&thread_sync.particles_lock); - cnd_signal(&thread_sync.d_done); - - // Draw final batch of particles (if any) - glDrawArrays(GL_QUADS, 0, PARTICLE_VERTS * particle_count); - - // Disable vertex arrays (Note: glInterleavedArrays implicitly called - // glEnableClientState for vertex, texture coord and color arrays) - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - - glDepthMask(GL_TRUE); -} - - -//======================================================================== -// Fountain geometry specification -//======================================================================== - -#define FOUNTAIN_SIDE_POINTS 14 -#define FOUNTAIN_SWEEP_STEPS 32 - -static const float fountain_side[FOUNTAIN_SIDE_POINTS * 2] = -{ - 1.2f, 0.f, 1.f, 0.2f, 0.41f, 0.3f, 0.4f, 0.35f, - 0.4f, 1.95f, 0.41f, 2.f, 0.8f, 2.2f, 1.2f, 2.4f, - 1.5f, 2.7f, 1.55f,2.95f, 1.6f, 3.f, 1.f, 3.f, - 0.5f, 3.f, 0.f, 3.f -}; - -static const float fountain_normal[FOUNTAIN_SIDE_POINTS * 2] = -{ - 1.0000f, 0.0000f, 0.6428f, 0.7660f, 0.3420f, 0.9397f, 1.0000f, 0.0000f, - 1.0000f, 0.0000f, 0.3420f,-0.9397f, 0.4226f,-0.9063f, 0.5000f,-0.8660f, - 0.7660f,-0.6428f, 0.9063f,-0.4226f, 0.0000f,1.00000f, 0.0000f,1.00000f, - 0.0000f,1.00000f, 0.0000f,1.00000f -}; - - -//======================================================================== -// Draw a fountain -//======================================================================== - -static void draw_fountain(void) -{ - static GLuint fountain_list = 0; - double angle; - float x, y; - int m, n; - - // The first time, we build the fountain display list - if (!fountain_list) - { - fountain_list = glGenLists(1); - glNewList(fountain_list, GL_COMPILE_AND_EXECUTE); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, fountain_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, fountain_specular); - glMaterialf(GL_FRONT, GL_SHININESS, fountain_shininess); - - // Build fountain using triangle strips - for (n = 0; n < FOUNTAIN_SIDE_POINTS - 1; n++) - { - glBegin(GL_TRIANGLE_STRIP); - for (m = 0; m <= FOUNTAIN_SWEEP_STEPS; m++) - { - angle = (double) m * (2.0 * M_PI / (double) FOUNTAIN_SWEEP_STEPS); - x = (float) cos(angle); - y = (float) sin(angle); - - // Draw triangle strip - glNormal3f(x * fountain_normal[n * 2 + 2], - y * fountain_normal[n * 2 + 2], - fountain_normal[n * 2 + 3]); - glVertex3f(x * fountain_side[n * 2 + 2], - y * fountain_side[n * 2 + 2], - fountain_side[n * 2 +3 ]); - glNormal3f(x * fountain_normal[n * 2], - y * fountain_normal[n * 2], - fountain_normal[n * 2 + 1]); - glVertex3f(x * fountain_side[n * 2], - y * fountain_side[n * 2], - fountain_side[n * 2 + 1]); - } - - glEnd(); - } - - glEndList(); - } - else - glCallList(fountain_list); -} - - -//======================================================================== -// Recursive function for building variable tessellated floor -//======================================================================== - -static void tessellate_floor(float x1, float y1, float x2, float y2, int depth) -{ - float delta, x, y; - - // Last recursion? - if (depth >= 5) - delta = 999999.f; - else - { - x = (float) (fabs(x1) < fabs(x2) ? fabs(x1) : fabs(x2)); - y = (float) (fabs(y1) < fabs(y2) ? fabs(y1) : fabs(y2)); - delta = x*x + y*y; - } - - // Recurse further? - if (delta < 0.1f) - { - x = (x1 + x2) * 0.5f; - y = (y1 + y2) * 0.5f; - tessellate_floor(x1, y1, x, y, depth + 1); - tessellate_floor(x, y1, x2, y, depth + 1); - tessellate_floor(x1, y, x, y2, depth + 1); - tessellate_floor(x, y, x2, y2, depth + 1); - } - else - { - glTexCoord2f(x1 * 30.f, y1 * 30.f); - glVertex3f( x1 * 80.f, y1 * 80.f, 0.f); - glTexCoord2f(x2 * 30.f, y1 * 30.f); - glVertex3f( x2 * 80.f, y1 * 80.f, 0.f); - glTexCoord2f(x2 * 30.f, y2 * 30.f); - glVertex3f( x2 * 80.f, y2 * 80.f, 0.f); - glTexCoord2f(x1 * 30.f, y2 * 30.f); - glVertex3f( x1 * 80.f, y2 * 80.f, 0.f); - } -} - - -//======================================================================== -// Draw floor. We build the floor recursively and let the tessellation in the -// center (near x,y=0,0) be high, while the tessellation around the edges be -// low. -//======================================================================== - -static void draw_floor(void) -{ - static GLuint floor_list = 0; - - if (!wireframe) - { - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, floor_tex_id); - } - - // The first time, we build the floor display list - if (!floor_list) - { - floor_list = glGenLists(1); - glNewList(floor_list, GL_COMPILE_AND_EXECUTE); - - glMaterialfv(GL_FRONT, GL_DIFFUSE, floor_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, floor_specular); - glMaterialf(GL_FRONT, GL_SHININESS, floor_shininess); - - // Draw floor as a bunch of triangle strips (high tessellation - // improves lighting) - glNormal3f(0.f, 0.f, 1.f); - glBegin(GL_QUADS); - tessellate_floor(-1.f, -1.f, 0.f, 0.f, 0); - tessellate_floor( 0.f, -1.f, 1.f, 0.f, 0); - tessellate_floor( 0.f, 0.f, 1.f, 1.f, 0); - tessellate_floor(-1.f, 0.f, 0.f, 1.f, 0); - glEnd(); - - glEndList(); - } - else - glCallList(floor_list); - - glDisable(GL_TEXTURE_2D); - -} - - -//======================================================================== -// Position and configure light sources -//======================================================================== - -static void setup_lights(void) -{ - float l1pos[4], l1amb[4], l1dif[4], l1spec[4]; - float l2pos[4], l2amb[4], l2dif[4], l2spec[4]; - - // Set light source 1 parameters - l1pos[0] = 0.f; l1pos[1] = -9.f; l1pos[2] = 8.f; l1pos[3] = 1.f; - l1amb[0] = 0.2f; l1amb[1] = 0.2f; l1amb[2] = 0.2f; l1amb[3] = 1.f; - l1dif[0] = 0.8f; l1dif[1] = 0.4f; l1dif[2] = 0.2f; l1dif[3] = 1.f; - l1spec[0] = 1.f; l1spec[1] = 0.6f; l1spec[2] = 0.2f; l1spec[3] = 0.f; - - // Set light source 2 parameters - l2pos[0] = -15.f; l2pos[1] = 12.f; l2pos[2] = 1.5f; l2pos[3] = 1.f; - l2amb[0] = 0.f; l2amb[1] = 0.f; l2amb[2] = 0.f; l2amb[3] = 1.f; - l2dif[0] = 0.2f; l2dif[1] = 0.4f; l2dif[2] = 0.8f; l2dif[3] = 1.f; - l2spec[0] = 0.2f; l2spec[1] = 0.6f; l2spec[2] = 1.f; l2spec[3] = 0.f; - - glLightfv(GL_LIGHT1, GL_POSITION, l1pos); - glLightfv(GL_LIGHT1, GL_AMBIENT, l1amb); - glLightfv(GL_LIGHT1, GL_DIFFUSE, l1dif); - glLightfv(GL_LIGHT1, GL_SPECULAR, l1spec); - glLightfv(GL_LIGHT2, GL_POSITION, l2pos); - glLightfv(GL_LIGHT2, GL_AMBIENT, l2amb); - glLightfv(GL_LIGHT2, GL_DIFFUSE, l2dif); - glLightfv(GL_LIGHT2, GL_SPECULAR, l2spec); - glLightfv(GL_LIGHT3, GL_POSITION, glow_pos); - glLightfv(GL_LIGHT3, GL_DIFFUSE, glow_color); - glLightfv(GL_LIGHT3, GL_SPECULAR, glow_color); - - glEnable(GL_LIGHT1); - glEnable(GL_LIGHT2); - glEnable(GL_LIGHT3); -} - - -//======================================================================== -// Main rendering function -//======================================================================== - -static void draw_scene(GLFWwindow* window, double t) -{ - double xpos, ypos, zpos, angle_x, angle_y, angle_z; - static double t_old = 0.0; - float dt; - mat4x4 projection; - - // Calculate frame-to-frame delta time - dt = (float) (t - t_old); - t_old = t; - - mat4x4_perspective(projection, - 65.f * (float) M_PI / 180.f, - aspect_ratio, - 1.0, 60.0); - - glClearColor(0.1f, 0.1f, 0.1f, 1.f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadMatrixf((const GLfloat*) projection); - - // Setup camera - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - // Rotate camera - angle_x = 90.0 - 10.0; - angle_y = 10.0 * sin(0.3 * t); - angle_z = 10.0 * t; - glRotated(-angle_x, 1.0, 0.0, 0.0); - glRotated(-angle_y, 0.0, 1.0, 0.0); - glRotated(-angle_z, 0.0, 0.0, 1.0); - - // Translate camera - xpos = 15.0 * sin((M_PI / 180.0) * angle_z) + - 2.0 * sin((M_PI / 180.0) * 3.1 * t); - ypos = -15.0 * cos((M_PI / 180.0) * angle_z) + - 2.0 * cos((M_PI / 180.0) * 2.9 * t); - zpos = 4.0 + 2.0 * cos((M_PI / 180.0) * 4.9 * t); - glTranslated(-xpos, -ypos, -zpos); - - glFrontFace(GL_CCW); - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); - - setup_lights(); - glEnable(GL_LIGHTING); - - glEnable(GL_FOG); - glFogi(GL_FOG_MODE, GL_EXP); - glFogf(GL_FOG_DENSITY, 0.05f); - glFogfv(GL_FOG_COLOR, fog_color); - - draw_floor(); - - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glDepthMask(GL_TRUE); - - draw_fountain(); - - glDisable(GL_LIGHTING); - glDisable(GL_FOG); - - // Particles must be drawn after all solid objects have been drawn - draw_particles(window, t, dt); - - // Z-buffer not needed anymore - glDisable(GL_DEPTH_TEST); -} - - -//======================================================================== -// Window resize callback function -//======================================================================== - -static void resize_callback(GLFWwindow* window, int width, int height) -{ - glViewport(0, 0, width, height); - aspect_ratio = height ? width / (float) height : 1.f; -} - - -//======================================================================== -// Key callback functions -//======================================================================== - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action == GLFW_PRESS) - { - switch (key) - { - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - case GLFW_KEY_W: - wireframe = !wireframe; - glPolygonMode(GL_FRONT_AND_BACK, - wireframe ? GL_LINE : GL_FILL); - break; - default: - break; - } - } -} - - -//======================================================================== -// Thread for updating particle physics -//======================================================================== - -static int physics_thread_main(void* arg) -{ - GLFWwindow* window = arg; - - for (;;) - { - mtx_lock(&thread_sync.particles_lock); - - // Wait for particle drawing to be done - while (!glfwWindowShouldClose(window) && - thread_sync.p_frame > thread_sync.d_frame) - { - struct timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - ts.tv_nsec += 100 * 1000 * 1000; - ts.tv_sec += ts.tv_nsec / (1000 * 1000 * 1000); - ts.tv_nsec %= 1000 * 1000 * 1000; - cnd_timedwait(&thread_sync.d_done, &thread_sync.particles_lock, &ts); - } - - if (glfwWindowShouldClose(window)) - break; - - // Update particles - particle_engine(thread_sync.t, thread_sync.dt); - - // Update frame counter - thread_sync.p_frame++; - - // Unlock mutex and signal drawing thread - mtx_unlock(&thread_sync.particles_lock); - cnd_signal(&thread_sync.p_done); - } - - return 0; -} - - -//======================================================================== -// main -//======================================================================== - -int main(int argc, char** argv) -{ - int ch, width, height; - thrd_t physics_thread = 0; - GLFWwindow* window; - GLFWmonitor* monitor = NULL; - - if (!glfwInit()) - { - fprintf(stderr, "Failed to initialize GLFW\n"); - exit(EXIT_FAILURE); - } - - while ((ch = getopt(argc, argv, "fh")) != -1) - { - switch (ch) - { - case 'f': - monitor = glfwGetPrimaryMonitor(); - break; - case 'h': - usage(); - exit(EXIT_SUCCESS); - } - } - - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - - glfwWindowHint(GLFW_RED_BITS, mode->redBits); - glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); - glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); - glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - - width = mode->width; - height = mode->height; - } - else - { - width = 640; - height = 480; - } - - window = glfwCreateWindow(width, height, "Particle Engine", monitor, NULL); - if (!window) - { - fprintf(stderr, "Failed to create GLFW window\n"); - glfwTerminate(); - exit(EXIT_FAILURE); - } - - if (monitor) - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - glfwSetFramebufferSizeCallback(window, resize_callback); - glfwSetKeyCallback(window, key_callback); - - // Set initial aspect ratio - glfwGetFramebufferSize(window, &width, &height); - resize_callback(window, width, height); - - // Upload particle texture - glGenTextures(1, &particle_tex_id); - glBindTexture(GL_TEXTURE_2D, particle_tex_id); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, P_TEX_WIDTH, P_TEX_HEIGHT, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, particle_texture); - - // Upload floor texture - glGenTextures(1, &floor_tex_id); - glBindTexture(GL_TEXTURE_2D, floor_tex_id); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, F_TEX_WIDTH, F_TEX_HEIGHT, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, floor_texture); - - if (glfwExtensionSupported("GL_EXT_separate_specular_color")) - { - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT, - GL_SEPARATE_SPECULAR_COLOR_EXT); - } - - // Set filled polygon mode as default (not wireframe) - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - wireframe = 0; - - // Set initial times - thread_sync.t = 0.0; - thread_sync.dt = 0.001f; - thread_sync.p_frame = 0; - thread_sync.d_frame = 0; - - mtx_init(&thread_sync.particles_lock, mtx_timed); - cnd_init(&thread_sync.p_done); - cnd_init(&thread_sync.d_done); - - if (thrd_create(&physics_thread, physics_thread_main, window) != thrd_success) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetTime(0.0); - - while (!glfwWindowShouldClose(window)) - { - draw_scene(window, glfwGetTime()); - - glfwSwapBuffers(window); - glfwPollEvents(); - } - - thrd_join(physics_thread, NULL); - - glfwDestroyWindow(window); - glfwTerminate(); - - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/sharing.c b/third_party/penumbra/vendor/glfw/examples/sharing.c deleted file mode 100644 index 4a1a2323dad..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/sharing.c +++ /dev/null @@ -1,234 +0,0 @@ -//======================================================================== -// Context sharing example -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include - -#include "getopt.h" -#include "linmath.h" - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec2 vPos;\n" -"varying vec2 texcoord;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -" texcoord = vPos;\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"uniform sampler2D texture;\n" -"uniform vec3 color;\n" -"varying vec2 texcoord;\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(color * texture2D(texture, texcoord).rgb, 1.0);\n" -"}\n"; - -static const vec2 vertices[4] = -{ - { 0.f, 0.f }, - { 1.f, 0.f }, - { 1.f, 1.f }, - { 0.f, 1.f } -}; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -int main(int argc, char** argv) -{ - GLFWwindow* windows[2]; - GLuint texture, program, vertex_buffer; - GLint mvp_location, vpos_location, color_location, texture_location; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - windows[0] = glfwCreateWindow(400, 400, "First", NULL, NULL); - if (!windows[0]) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(windows[0], key_callback); - - glfwMakeContextCurrent(windows[0]); - - // Only enable vsync for the first of the windows to be swapped to - // avoid waiting out the interval for each window - glfwSwapInterval(1); - - // The contexts are created with the same APIs so the function - // pointers should be re-usable between them - gladLoadGL(glfwGetProcAddress); - - // Create the OpenGL objects inside the first context, created above - // All objects will be shared with the second context, created below - { - int x, y; - char pixels[16 * 16]; - GLuint vertex_shader, fragment_shader; - - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); - - srand((unsigned int) glfwGetTimerValue()); - - for (y = 0; y < 16; y++) - { - for (x = 0; x < 16; x++) - pixels[y * 16 + x] = rand() % 256; - } - - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 16, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - color_location = glGetUniformLocation(program, "color"); - texture_location = glGetUniformLocation(program, "texture"); - vpos_location = glGetAttribLocation(program, "vPos"); - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - } - - glUseProgram(program); - glUniform1i(texture_location, 0); - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, texture); - - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - - windows[1] = glfwCreateWindow(400, 400, "Second", NULL, windows[0]); - if (!windows[1]) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - // Place the second window to the right of the first - { - int xpos, ypos, left, right, width; - - glfwGetWindowSize(windows[0], &width, NULL); - glfwGetWindowFrameSize(windows[0], &left, NULL, &right, NULL); - glfwGetWindowPos(windows[0], &xpos, &ypos); - - glfwSetWindowPos(windows[1], xpos + width + left + right, ypos); - } - - glfwSetKeyCallback(windows[1], key_callback); - - glfwMakeContextCurrent(windows[1]); - - // While objects are shared, the global context state is not and will - // need to be set up for each context - - glUseProgram(program); - - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, texture); - - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - - while (!glfwWindowShouldClose(windows[0]) && - !glfwWindowShouldClose(windows[1])) - { - int i; - const vec3 colors[2] = - { - { 0.8f, 0.4f, 1.f }, - { 0.3f, 0.4f, 1.f } - }; - - for (i = 0; i < 2; i++) - { - int width, height; - mat4x4 mvp; - - glfwGetFramebufferSize(windows[i], &width, &height); - glfwMakeContextCurrent(windows[i]); - - glViewport(0, 0, width, height); - - mat4x4_ortho(mvp, 0.f, 1.f, 0.f, 1.f, 0.f, 1.f); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glUniform3fv(color_location, 1, colors[i]); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glfwSwapBuffers(windows[i]); - } - - glfwWaitEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/simple.c b/third_party/penumbra/vendor/glfw/examples/simple.c deleted file mode 100644 index 95d8fe63486..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/simple.c +++ /dev/null @@ -1,166 +0,0 @@ -//======================================================================== -// Simple GLFW example -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -//! [code] - -#include -#define GLFW_INCLUDE_NONE -#include - -#include "linmath.h" - -#include -#include - -static const struct -{ - float x, y; - float r, g, b; -} vertices[3] = -{ - { -0.6f, -0.4f, 1.f, 0.f, 0.f }, - { 0.6f, -0.4f, 0.f, 1.f, 0.f }, - { 0.f, 0.6f, 0.f, 0.f, 1.f } -}; - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec3 vCol;\n" -"attribute vec2 vPos;\n" -"varying vec3 color;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -" color = vCol;\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"varying vec3 color;\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(color, 1.0);\n" -"}\n"; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -int main(void) -{ - GLFWwindow* window; - GLuint vertex_buffer, vertex_shader, fragment_shader, program; - GLint mvp_location, vpos_location, vcol_location; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(window, key_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - // NOTE: OpenGL error checks have been omitted for brevity - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - vcol_location = glGetAttribLocation(program, "vCol"); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - glEnableVertexAttribArray(vcol_location); - glVertexAttribPointer(vcol_location, 3, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) (sizeof(float) * 2)); - - while (!glfwWindowShouldClose(window)) - { - float ratio; - int width, height; - mat4x4 m, p, mvp; - - glfwGetFramebufferSize(window, &width, &height); - ratio = width / (float) height; - - glViewport(0, 0, width, height); - glClear(GL_COLOR_BUFFER_BIT); - - mat4x4_identity(m); - mat4x4_rotate_Z(m, m, (float) glfwGetTime()); - mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 1.f, -1.f); - mat4x4_mul(mvp, p, m); - - glUseProgram(program); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glDrawArrays(GL_TRIANGLES, 0, 3); - - glfwSwapBuffers(window); - glfwPollEvents(); - } - - glfwDestroyWindow(window); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - -//! [code] diff --git a/third_party/penumbra/vendor/glfw/examples/splitview.c b/third_party/penumbra/vendor/glfw/examples/splitview.c deleted file mode 100644 index 58441dbb110..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/splitview.c +++ /dev/null @@ -1,546 +0,0 @@ -//======================================================================== -// This is an example program for the GLFW library -// -// The program uses a "split window" view, rendering four views of the -// same scene in one window (e.g. uesful for 3D modelling software). This -// demo uses scissors to separate the four different rendering areas from -// each other. -// -// (If the code seems a little bit strange here and there, it may be -// because I am not a friend of orthogonal projections) -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include - -#include - - -//======================================================================== -// Global variables -//======================================================================== - -// Mouse position -static double xpos = 0, ypos = 0; - -// Window size -static int width, height; - -// Active view: 0 = none, 1 = upper left, 2 = upper right, 3 = lower left, -// 4 = lower right -static int active_view = 0; - -// Rotation around each axis -static int rot_x = 0, rot_y = 0, rot_z = 0; - -// Do redraw? -static int do_redraw = 1; - - -//======================================================================== -// Draw a solid torus (use a display list for the model) -//======================================================================== - -#define TORUS_MAJOR 1.5 -#define TORUS_MINOR 0.5 -#define TORUS_MAJOR_RES 32 -#define TORUS_MINOR_RES 32 - -static void drawTorus(void) -{ - static GLuint torus_list = 0; - int i, j, k; - double s, t, x, y, z, nx, ny, nz, scale, twopi; - - if (!torus_list) - { - // Start recording displaylist - torus_list = glGenLists(1); - glNewList(torus_list, GL_COMPILE_AND_EXECUTE); - - // Draw torus - twopi = 2.0 * M_PI; - for (i = 0; i < TORUS_MINOR_RES; i++) - { - glBegin(GL_QUAD_STRIP); - for (j = 0; j <= TORUS_MAJOR_RES; j++) - { - for (k = 1; k >= 0; k--) - { - s = (i + k) % TORUS_MINOR_RES + 0.5; - t = j % TORUS_MAJOR_RES; - - // Calculate point on surface - x = (TORUS_MAJOR + TORUS_MINOR * cos(s * twopi / TORUS_MINOR_RES)) * cos(t * twopi / TORUS_MAJOR_RES); - y = TORUS_MINOR * sin(s * twopi / TORUS_MINOR_RES); - z = (TORUS_MAJOR + TORUS_MINOR * cos(s * twopi / TORUS_MINOR_RES)) * sin(t * twopi / TORUS_MAJOR_RES); - - // Calculate surface normal - nx = x - TORUS_MAJOR * cos(t * twopi / TORUS_MAJOR_RES); - ny = y; - nz = z - TORUS_MAJOR * sin(t * twopi / TORUS_MAJOR_RES); - scale = 1.0 / sqrt(nx*nx + ny*ny + nz*nz); - nx *= scale; - ny *= scale; - nz *= scale; - - glNormal3f((float) nx, (float) ny, (float) nz); - glVertex3f((float) x, (float) y, (float) z); - } - } - - glEnd(); - } - - // Stop recording displaylist - glEndList(); - } - else - { - // Playback displaylist - glCallList(torus_list); - } -} - - -//======================================================================== -// Draw the scene (a rotating torus) -//======================================================================== - -static void drawScene(void) -{ - const GLfloat model_diffuse[4] = {1.0f, 0.8f, 0.8f, 1.0f}; - const GLfloat model_specular[4] = {0.6f, 0.6f, 0.6f, 1.0f}; - const GLfloat model_shininess = 20.0f; - - glPushMatrix(); - - // Rotate the object - glRotatef((GLfloat) rot_x * 0.5f, 1.0f, 0.0f, 0.0f); - glRotatef((GLfloat) rot_y * 0.5f, 0.0f, 1.0f, 0.0f); - glRotatef((GLfloat) rot_z * 0.5f, 0.0f, 0.0f, 1.0f); - - // Set model color (used for orthogonal views, lighting disabled) - glColor4fv(model_diffuse); - - // Set model material (used for perspective view, lighting enabled) - glMaterialfv(GL_FRONT, GL_DIFFUSE, model_diffuse); - glMaterialfv(GL_FRONT, GL_SPECULAR, model_specular); - glMaterialf(GL_FRONT, GL_SHININESS, model_shininess); - - // Draw torus - drawTorus(); - - glPopMatrix(); -} - - -//======================================================================== -// Draw a 2D grid (used for orthogonal views) -//======================================================================== - -static void drawGrid(float scale, int steps) -{ - int i; - float x, y; - mat4x4 view; - - glPushMatrix(); - - // Set background to some dark bluish grey - glClearColor(0.05f, 0.05f, 0.2f, 0.0f); - glClear(GL_COLOR_BUFFER_BIT); - - // Setup modelview matrix (flat XY view) - { - vec3 eye = { 0.f, 0.f, 1.f }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, 1.f, 0.f }; - mat4x4_look_at(view, eye, center, up); - } - glLoadMatrixf((const GLfloat*) view); - - // We don't want to update the Z-buffer - glDepthMask(GL_FALSE); - - // Set grid color - glColor3f(0.0f, 0.5f, 0.5f); - - glBegin(GL_LINES); - - // Horizontal lines - x = scale * 0.5f * (float) (steps - 1); - y = -scale * 0.5f * (float) (steps - 1); - for (i = 0; i < steps; i++) - { - glVertex3f(-x, y, 0.0f); - glVertex3f(x, y, 0.0f); - y += scale; - } - - // Vertical lines - x = -scale * 0.5f * (float) (steps - 1); - y = scale * 0.5f * (float) (steps - 1); - for (i = 0; i < steps; i++) - { - glVertex3f(x, -y, 0.0f); - glVertex3f(x, y, 0.0f); - x += scale; - } - - glEnd(); - - // Enable Z-buffer writing again - glDepthMask(GL_TRUE); - - glPopMatrix(); -} - - -//======================================================================== -// Draw all views -//======================================================================== - -static void drawAllViews(void) -{ - const GLfloat light_position[4] = {0.0f, 8.0f, 8.0f, 1.0f}; - const GLfloat light_diffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f}; - const GLfloat light_specular[4] = {1.0f, 1.0f, 1.0f, 1.0f}; - const GLfloat light_ambient[4] = {0.2f, 0.2f, 0.3f, 1.0f}; - float aspect; - mat4x4 view, projection; - - // Calculate aspect of window - if (height > 0) - aspect = (float) width / (float) height; - else - aspect = 1.f; - - // Clear screen - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - // Enable scissor test - glEnable(GL_SCISSOR_TEST); - - // Enable depth test - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - // ** ORTHOGONAL VIEWS ** - - // For orthogonal views, use wireframe rendering - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - // Enable line anti-aliasing - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - // Setup orthogonal projection matrix - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-3.0 * aspect, 3.0 * aspect, -3.0, 3.0, 1.0, 50.0); - - // Upper left view (TOP VIEW) - glViewport(0, height / 2, width / 2, height / 2); - glScissor(0, height / 2, width / 2, height / 2); - glMatrixMode(GL_MODELVIEW); - { - vec3 eye = { 0.f, 10.f, 1e-3f }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, 1.f, 0.f }; - mat4x4_look_at( view, eye, center, up ); - } - glLoadMatrixf((const GLfloat*) view); - drawGrid(0.5, 12); - drawScene(); - - // Lower left view (FRONT VIEW) - glViewport(0, 0, width / 2, height / 2); - glScissor(0, 0, width / 2, height / 2); - glMatrixMode(GL_MODELVIEW); - { - vec3 eye = { 0.f, 0.f, 10.f }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, 1.f, 0.f }; - mat4x4_look_at( view, eye, center, up ); - } - glLoadMatrixf((const GLfloat*) view); - drawGrid(0.5, 12); - drawScene(); - - // Lower right view (SIDE VIEW) - glViewport(width / 2, 0, width / 2, height / 2); - glScissor(width / 2, 0, width / 2, height / 2); - glMatrixMode(GL_MODELVIEW); - { - vec3 eye = { 10.f, 0.f, 0.f }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, 1.f, 0.f }; - mat4x4_look_at( view, eye, center, up ); - } - glLoadMatrixf((const GLfloat*) view); - drawGrid(0.5, 12); - drawScene(); - - // Disable line anti-aliasing - glDisable(GL_LINE_SMOOTH); - glDisable(GL_BLEND); - - // ** PERSPECTIVE VIEW ** - - // For perspective view, use solid rendering - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - // Enable face culling (faster rendering) - glEnable(GL_CULL_FACE); - glCullFace(GL_BACK); - glFrontFace(GL_CW); - - // Setup perspective projection matrix - glMatrixMode(GL_PROJECTION); - mat4x4_perspective(projection, - 65.f * (float) M_PI / 180.f, - aspect, - 1.f, 50.f); - glLoadMatrixf((const GLfloat*) projection); - - // Upper right view (PERSPECTIVE VIEW) - glViewport(width / 2, height / 2, width / 2, height / 2); - glScissor(width / 2, height / 2, width / 2, height / 2); - glMatrixMode(GL_MODELVIEW); - { - vec3 eye = { 3.f, 1.5f, 3.f }; - vec3 center = { 0.f, 0.f, 0.f }; - vec3 up = { 0.f, 1.f, 0.f }; - mat4x4_look_at( view, eye, center, up ); - } - glLoadMatrixf((const GLfloat*) view); - - // Configure and enable light source 1 - glLightfv(GL_LIGHT1, GL_POSITION, light_position); - glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient); - glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); - glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular); - glEnable(GL_LIGHT1); - glEnable(GL_LIGHTING); - - // Draw scene - drawScene(); - - // Disable lighting - glDisable(GL_LIGHTING); - - // Disable face culling - glDisable(GL_CULL_FACE); - - // Disable depth test - glDisable(GL_DEPTH_TEST); - - // Disable scissor test - glDisable(GL_SCISSOR_TEST); - - // Draw a border around the active view - if (active_view > 0 && active_view != 2) - { - glViewport(0, 0, width, height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, 2.0, 0.0, 2.0, 0.0, 1.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef((GLfloat) ((active_view - 1) & 1), (GLfloat) (1 - (active_view - 1) / 2), 0.0f); - - glColor3f(1.0f, 1.0f, 0.6f); - - glBegin(GL_LINE_STRIP); - glVertex2i(0, 0); - glVertex2i(1, 0); - glVertex2i(1, 1); - glVertex2i(0, 1); - glVertex2i(0, 0); - glEnd(); - } -} - - -//======================================================================== -// Framebuffer size callback function -//======================================================================== - -static void framebufferSizeFun(GLFWwindow* window, int w, int h) -{ - width = w; - height = h > 0 ? h : 1; - do_redraw = 1; -} - - -//======================================================================== -// Window refresh callback function -//======================================================================== - -static void windowRefreshFun(GLFWwindow* window) -{ - drawAllViews(); - glfwSwapBuffers(window); - do_redraw = 0; -} - - -//======================================================================== -// Mouse position callback function -//======================================================================== - -static void cursorPosFun(GLFWwindow* window, double x, double y) -{ - int wnd_width, wnd_height, fb_width, fb_height; - double scale; - - glfwGetWindowSize(window, &wnd_width, &wnd_height); - glfwGetFramebufferSize(window, &fb_width, &fb_height); - - scale = (double) fb_width / (double) wnd_width; - - x *= scale; - y *= scale; - - // Depending on which view was selected, rotate around different axes - switch (active_view) - { - case 1: - rot_x += (int) (y - ypos); - rot_z += (int) (x - xpos); - do_redraw = 1; - break; - case 3: - rot_x += (int) (y - ypos); - rot_y += (int) (x - xpos); - do_redraw = 1; - break; - case 4: - rot_y += (int) (x - xpos); - rot_z += (int) (y - ypos); - do_redraw = 1; - break; - default: - // Do nothing for perspective view, or if no view is selected - break; - } - - // Remember cursor position - xpos = x; - ypos = y; -} - - -//======================================================================== -// Mouse button callback function -//======================================================================== - -static void mouseButtonFun(GLFWwindow* window, int button, int action, int mods) -{ - if ((button == GLFW_MOUSE_BUTTON_LEFT) && action == GLFW_PRESS) - { - // Detect which of the four views was clicked - active_view = 1; - if (xpos >= width / 2) - active_view += 1; - if (ypos >= height / 2) - active_view += 2; - } - else if (button == GLFW_MOUSE_BUTTON_LEFT) - { - // Deselect any previously selected view - active_view = 0; - } - - do_redraw = 1; -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - - -//======================================================================== -// main -//======================================================================== - -int main(void) -{ - GLFWwindow* window; - - // Initialise GLFW - if (!glfwInit()) - { - fprintf(stderr, "Failed to initialize GLFW\n"); - exit(EXIT_FAILURE); - } - - glfwWindowHint(GLFW_SAMPLES, 4); - - // Open OpenGL window - window = glfwCreateWindow(500, 500, "Split view demo", NULL, NULL); - if (!window) - { - fprintf(stderr, "Failed to open GLFW window\n"); - - glfwTerminate(); - exit(EXIT_FAILURE); - } - - // Set callback functions - glfwSetFramebufferSizeCallback(window, framebufferSizeFun); - glfwSetWindowRefreshCallback(window, windowRefreshFun); - glfwSetCursorPosCallback(window, cursorPosFun); - glfwSetMouseButtonCallback(window, mouseButtonFun); - glfwSetKeyCallback(window, key_callback); - - // Enable vsync - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - if (GLAD_GL_ARB_multisample || GLAD_GL_VERSION_1_3) - glEnable(GL_MULTISAMPLE_ARB); - - glfwGetFramebufferSize(window, &width, &height); - framebufferSizeFun(window, width, height); - - // Main loop - for (;;) - { - // Only redraw if we need to - if (do_redraw) - windowRefreshFun(window); - - // Wait for new events - glfwWaitEvents(); - - // Check if the window should be closed - if (glfwWindowShouldClose(window)) - break; - } - - // Close OpenGL window and terminate GLFW - glfwTerminate(); - - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/examples/wave.c b/third_party/penumbra/vendor/glfw/examples/wave.c deleted file mode 100644 index 7acb8b9290c..00000000000 --- a/third_party/penumbra/vendor/glfw/examples/wave.c +++ /dev/null @@ -1,462 +0,0 @@ -/***************************************************************************** - * Wave Simulation in OpenGL - * (C) 2002 Jakob Thomsen - * http://home.in.tum.de/~thomsen - * Modified for GLFW by Sylvain Hellegouarch - sh@programmationworld.com - * Modified for variable frame rate by Marcus Geelnard - * 2003-Jan-31: Minor cleanups and speedups / MG - * 2010-10-24: Formatting and cleanup - Camilla Löwy - *****************************************************************************/ - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include - -#include -#define GLFW_INCLUDE_NONE -#include - -#include - -// Maximum delta T to allow for differential calculations -#define MAX_DELTA_T 0.01 - -// Animation speed (10.0 looks good) -#define ANIMATION_SPEED 10.0 - -GLfloat alpha = 210.f, beta = -70.f; -GLfloat zoom = 2.f; - -double cursorX; -double cursorY; - -struct Vertex -{ - GLfloat x, y, z; - GLfloat r, g, b; -}; - -#define GRIDW 50 -#define GRIDH 50 -#define VERTEXNUM (GRIDW*GRIDH) - -#define QUADW (GRIDW - 1) -#define QUADH (GRIDH - 1) -#define QUADNUM (QUADW*QUADH) - -GLuint quad[4 * QUADNUM]; -struct Vertex vertex[VERTEXNUM]; - -/* The grid will look like this: - * - * 3 4 5 - * *---*---* - * | | | - * | 0 | 1 | - * | | | - * *---*---* - * 0 1 2 - */ - -//======================================================================== -// Initialize grid geometry -//======================================================================== - -void init_vertices(void) -{ - int x, y, p; - - // Place the vertices in a grid - for (y = 0; y < GRIDH; y++) - { - for (x = 0; x < GRIDW; x++) - { - p = y * GRIDW + x; - - vertex[p].x = (GLfloat) (x - GRIDW / 2) / (GLfloat) (GRIDW / 2); - vertex[p].y = (GLfloat) (y - GRIDH / 2) / (GLfloat) (GRIDH / 2); - vertex[p].z = 0; - - if ((x % 4 < 2) ^ (y % 4 < 2)) - vertex[p].r = 0.0; - else - vertex[p].r = 1.0; - - vertex[p].g = (GLfloat) y / (GLfloat) GRIDH; - vertex[p].b = 1.f - ((GLfloat) x / (GLfloat) GRIDW + (GLfloat) y / (GLfloat) GRIDH) / 2.f; - } - } - - for (y = 0; y < QUADH; y++) - { - for (x = 0; x < QUADW; x++) - { - p = 4 * (y * QUADW + x); - - quad[p + 0] = y * GRIDW + x; // Some point - quad[p + 1] = y * GRIDW + x + 1; // Neighbor at the right side - quad[p + 2] = (y + 1) * GRIDW + x + 1; // Upper right neighbor - quad[p + 3] = (y + 1) * GRIDW + x; // Upper neighbor - } - } -} - -double dt; -double p[GRIDW][GRIDH]; -double vx[GRIDW][GRIDH], vy[GRIDW][GRIDH]; -double ax[GRIDW][GRIDH], ay[GRIDW][GRIDH]; - -//======================================================================== -// Initialize grid -//======================================================================== - -void init_grid(void) -{ - int x, y; - double dx, dy, d; - - for (y = 0; y < GRIDH; y++) - { - for (x = 0; x < GRIDW; x++) - { - dx = (double) (x - GRIDW / 2); - dy = (double) (y - GRIDH / 2); - d = sqrt(dx * dx + dy * dy); - if (d < 0.1 * (double) (GRIDW / 2)) - { - d = d * 10.0; - p[x][y] = -cos(d * (M_PI / (double)(GRIDW * 4))) * 100.0; - } - else - p[x][y] = 0.0; - - vx[x][y] = 0.0; - vy[x][y] = 0.0; - } - } -} - - -//======================================================================== -// Draw scene -//======================================================================== - -void draw_scene(GLFWwindow* window) -{ - // Clear the color and depth buffers - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - // We don't want to modify the projection matrix - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - // Move back - glTranslatef(0.0, 0.0, -zoom); - // Rotate the view - glRotatef(beta, 1.0, 0.0, 0.0); - glRotatef(alpha, 0.0, 0.0, 1.0); - - glDrawElements(GL_QUADS, 4 * QUADNUM, GL_UNSIGNED_INT, quad); - - glfwSwapBuffers(window); -} - - -//======================================================================== -// Initialize Miscellaneous OpenGL state -//======================================================================== - -void init_opengl(void) -{ - // Use Gouraud (smooth) shading - glShadeModel(GL_SMOOTH); - - // Switch on the z-buffer - glEnable(GL_DEPTH_TEST); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - glVertexPointer(3, GL_FLOAT, sizeof(struct Vertex), vertex); - glColorPointer(3, GL_FLOAT, sizeof(struct Vertex), &vertex[0].r); // Pointer to the first color - - glPointSize(2.0); - - // Background color is black - glClearColor(0, 0, 0, 0); -} - - -//======================================================================== -// Modify the height of each vertex according to the pressure -//======================================================================== - -void adjust_grid(void) -{ - int pos; - int x, y; - - for (y = 0; y < GRIDH; y++) - { - for (x = 0; x < GRIDW; x++) - { - pos = y * GRIDW + x; - vertex[pos].z = (float) (p[x][y] * (1.0 / 50.0)); - } - } -} - - -//======================================================================== -// Calculate wave propagation -//======================================================================== - -void calc_grid(void) -{ - int x, y, x2, y2; - double time_step = dt * ANIMATION_SPEED; - - // Compute accelerations - for (x = 0; x < GRIDW; x++) - { - x2 = (x + 1) % GRIDW; - for(y = 0; y < GRIDH; y++) - ax[x][y] = p[x][y] - p[x2][y]; - } - - for (y = 0; y < GRIDH; y++) - { - y2 = (y + 1) % GRIDH; - for(x = 0; x < GRIDW; x++) - ay[x][y] = p[x][y] - p[x][y2]; - } - - // Compute speeds - for (x = 0; x < GRIDW; x++) - { - for (y = 0; y < GRIDH; y++) - { - vx[x][y] = vx[x][y] + ax[x][y] * time_step; - vy[x][y] = vy[x][y] + ay[x][y] * time_step; - } - } - - // Compute pressure - for (x = 1; x < GRIDW; x++) - { - x2 = x - 1; - for (y = 1; y < GRIDH; y++) - { - y2 = y - 1; - p[x][y] = p[x][y] + (vx[x2][y] - vx[x][y] + vy[x][y2] - vy[x][y]) * time_step; - } - } -} - - -//======================================================================== -// Print errors -//======================================================================== - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - - -//======================================================================== -// Handle key strokes -//======================================================================== - -void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - case GLFW_KEY_SPACE: - init_grid(); - break; - case GLFW_KEY_LEFT: - alpha += 5; - break; - case GLFW_KEY_RIGHT: - alpha -= 5; - break; - case GLFW_KEY_UP: - beta -= 5; - break; - case GLFW_KEY_DOWN: - beta += 5; - break; - case GLFW_KEY_PAGE_UP: - zoom -= 0.25f; - if (zoom < 0.f) - zoom = 0.f; - break; - case GLFW_KEY_PAGE_DOWN: - zoom += 0.25f; - break; - default: - break; - } -} - - -//======================================================================== -// Callback function for mouse button events -//======================================================================== - -void mouse_button_callback(GLFWwindow* window, int button, int action, int mods) -{ - if (button != GLFW_MOUSE_BUTTON_LEFT) - return; - - if (action == GLFW_PRESS) - { - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); - glfwGetCursorPos(window, &cursorX, &cursorY); - } - else - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); -} - - -//======================================================================== -// Callback function for cursor motion events -//======================================================================== - -void cursor_position_callback(GLFWwindow* window, double x, double y) -{ - if (glfwGetInputMode(window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED) - { - alpha += (GLfloat) (x - cursorX) / 10.f; - beta += (GLfloat) (y - cursorY) / 10.f; - - cursorX = x; - cursorY = y; - } -} - - -//======================================================================== -// Callback function for scroll events -//======================================================================== - -void scroll_callback(GLFWwindow* window, double x, double y) -{ - zoom += (float) y / 4.f; - if (zoom < 0) - zoom = 0; -} - - -//======================================================================== -// Callback function for framebuffer resize events -//======================================================================== - -void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - float ratio = 1.f; - mat4x4 projection; - - if (height > 0) - ratio = (float) width / (float) height; - - // Setup viewport - glViewport(0, 0, width, height); - - // Change to the projection matrix and set our viewing volume - glMatrixMode(GL_PROJECTION); - mat4x4_perspective(projection, - 60.f * (float) M_PI / 180.f, - ratio, - 1.f, 1024.f); - glLoadMatrixf((const GLfloat*) projection); -} - - -//======================================================================== -// main -//======================================================================== - -int main(int argc, char* argv[]) -{ - GLFWwindow* window; - double t, dt_total, t_old; - int width, height; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - window = glfwCreateWindow(640, 480, "Wave Simulation", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(window, key_callback); - glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); - glfwSetMouseButtonCallback(window, mouse_button_callback); - glfwSetCursorPosCallback(window, cursor_position_callback); - glfwSetScrollCallback(window, scroll_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - glfwGetFramebufferSize(window, &width, &height); - framebuffer_size_callback(window, width, height); - - // Initialize OpenGL - init_opengl(); - - // Initialize simulation - init_vertices(); - init_grid(); - adjust_grid(); - - // Initialize timer - t_old = glfwGetTime() - 0.01; - - while (!glfwWindowShouldClose(window)) - { - t = glfwGetTime(); - dt_total = t - t_old; - t_old = t; - - // Safety - iterate if dt_total is too large - while (dt_total > 0.f) - { - // Select iteration time step - dt = dt_total > MAX_DELTA_T ? MAX_DELTA_T : dt_total; - dt_total -= dt; - - // Calculate wave propagation - calc_grid(); - } - - // Compute height of each vertex - adjust_grid(); - - // Draw wave grid to OpenGL display - draw_scene(window); - - glfwPollEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/include/GLFW/glfw3.h b/third_party/penumbra/vendor/glfw/include/GLFW/glfw3.h index 66dff649050..31b201ae5ee 100644 --- a/third_party/penumbra/vendor/glfw/include/GLFW/glfw3.h +++ b/third_party/penumbra/vendor/glfw/include/GLFW/glfw3.h @@ -52,7 +52,7 @@ extern "C" { * This is the reference documentation for OpenGL and OpenGL ES context related * functions. For more task-oriented information, see the @ref context_guide. */ -/*! @defgroup vulkan Vulkan reference +/*! @defgroup vulkan Vulkan support reference * @brief Functions and types related to Vulkan. * * This is the reference documentation for Vulkan related functions and types. @@ -190,10 +190,44 @@ extern "C" { #else /*__APPLE__*/ #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif #endif /*__APPLE__*/ -#elif !defined(GLFW_INCLUDE_NONE) +#elif defined(GLFW_INCLUDE_GLU) + + #if defined(__APPLE__) + + #if defined(GLFW_INCLUDE_GLU) + #include + #endif + + #else /*__APPLE__*/ + + #if defined(GLFW_INCLUDE_GLU) + #include + #endif + + #endif /*__APPLE__*/ + +#elif !defined(GLFW_INCLUDE_NONE) && \ + !defined(__gl_h_) && \ + !defined(__gles1_gl_h_) && \ + !defined(__gles2_gl2_h_) && \ + !defined(__gles2_gl3_h_) && \ + !defined(__gles2_gl31_h_) && \ + !defined(__gles2_gl32_h_) && \ + !defined(__gl_glcorearb_h_) && \ + !defined(__gl2_h_) /*legacy*/ && \ + !defined(__gl3_h_) /*legacy*/ && \ + !defined(__gl31_h_) /*legacy*/ && \ + !defined(__gl32_h_) /*legacy*/ && \ + !defined(__glcorearb_h_) /*legacy*/ && \ + !defined(__GL_H__) /*non-standard*/ && \ + !defined(__gltypes_h_) /*non-standard*/ && \ + !defined(__glee_h_) /*non-standard*/ #if defined(__APPLE__) @@ -201,9 +235,6 @@ extern "C" { #define GL_GLEXT_LEGACY #endif #include - #if defined(GLFW_INCLUDE_GLU) - #include - #endif #else /*__APPLE__*/ @@ -211,9 +242,6 @@ extern "C" { #if defined(GLFW_INCLUDE_GLEXT) #include #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif #endif /*__APPLE__*/ @@ -234,13 +262,12 @@ extern "C" { /* We are building GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllexport) #elif defined(_WIN32) && defined(GLFW_DLL) - /* We are calling GLFW as a Win32 DLL */ + /* We are calling a GLFW Win32 DLL */ #define GLFWAPI __declspec(dllimport) #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a shared / dynamic library */ + /* We are building GLFW as a Unix shared library */ #define GLFWAPI __attribute__((visibility("default"))) #else - /* We are building or calling GLFW as a static library */ #define GLFWAPI #endif @@ -251,26 +278,27 @@ extern "C" { /*! @name GLFW version macros * @{ */ -/*! @brief The major version number of the GLFW library. +/*! @brief The major version number of the GLFW header. * - * This is incremented when the API is changed in non-compatible ways. + * The major version number of the GLFW header. This is incremented when the + * API is changed in non-compatible ways. * @ingroup init */ #define GLFW_VERSION_MAJOR 3 -/*! @brief The minor version number of the GLFW library. +/*! @brief The minor version number of the GLFW header. * - * This is incremented when features are added to the API but it remains - * backward-compatible. + * The minor version number of the GLFW header. This is incremented when + * features are added to the API but it remains backward-compatible. * @ingroup init */ #define GLFW_VERSION_MINOR 3 -/*! @brief The revision number of the GLFW library. +/*! @brief The revision number of the GLFW header. * - * This is incremented when a bug fix release is made that does not contain any - * API changes. + * The revision number of the GLFW header. This is incremented when a bug fix + * release is made that does not contain any API changes. * @ingroup init */ -#define GLFW_VERSION_REVISION 2 +#define GLFW_VERSION_REVISION 8 /*! @} */ /*! @brief One. @@ -931,7 +959,7 @@ extern "C" { * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). */ #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 -/*! @brief Context client API revision number hint and attribute. +/*! @brief Context client API revision number attribute. * * Context client API revision number * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). @@ -949,9 +977,9 @@ extern "C" { * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). */ #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 -/*! @brief OpenGL debug context hint and attribute. +/*! @brief Debug mode context hint and attribute. * - * OpenGL debug context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and + * Debug mode context [hint](@ref GLFW_OPENGL_DEBUG_CONTEXT_hint) and * [attribute](@ref GLFW_OPENGL_DEBUG_CONTEXT_attrib). */ #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 @@ -1190,7 +1218,7 @@ typedef struct GLFWcursor GLFWcursor; * * @ingroup init */ -typedef void (* GLFWerrorfun)(int,const char*); +typedef void (* GLFWerrorfun)(int error_code, const char* description); /*! @brief The function pointer type for window position callbacks. * @@ -1213,7 +1241,7 @@ typedef void (* GLFWerrorfun)(int,const char*); * * @ingroup window */ -typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); +typedef void (* GLFWwindowposfun)(GLFWwindow* window, int xpos, int ypos); /*! @brief The function pointer type for window size callbacks. * @@ -1235,7 +1263,7 @@ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); * * @ingroup window */ -typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); +typedef void (* GLFWwindowsizefun)(GLFWwindow* window, int width, int height); /*! @brief The function pointer type for window close callbacks. * @@ -1255,7 +1283,7 @@ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); * * @ingroup window */ -typedef void (* GLFWwindowclosefun)(GLFWwindow*); +typedef void (* GLFWwindowclosefun)(GLFWwindow* window); /*! @brief The function pointer type for window content refresh callbacks. * @@ -1275,7 +1303,7 @@ typedef void (* GLFWwindowclosefun)(GLFWwindow*); * * @ingroup window */ -typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); +typedef void (* GLFWwindowrefreshfun)(GLFWwindow* window); /*! @brief The function pointer type for window focus callbacks. * @@ -1296,7 +1324,7 @@ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); * * @ingroup window */ -typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); +typedef void (* GLFWwindowfocusfun)(GLFWwindow* window, int focused); /*! @brief The function pointer type for window iconify callbacks. * @@ -1317,7 +1345,7 @@ typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); * * @ingroup window */ -typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); +typedef void (* GLFWwindowiconifyfun)(GLFWwindow* window, int iconified); /*! @brief The function pointer type for window maximize callbacks. * @@ -1328,7 +1356,7 @@ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); * @endcode * * @param[in] window The window that was maximized or restored. - * @param[in] iconified `GLFW_TRUE` if the window was maximized, or + * @param[in] maximized `GLFW_TRUE` if the window was maximized, or * `GLFW_FALSE` if it was restored. * * @sa @ref window_maximize @@ -1338,7 +1366,7 @@ typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); * * @ingroup window */ -typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int); +typedef void (* GLFWwindowmaximizefun)(GLFWwindow* window, int maximized); /*! @brief The function pointer type for framebuffer size callbacks. * @@ -1359,7 +1387,7 @@ typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int); * * @ingroup window */ -typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); +typedef void (* GLFWframebuffersizefun)(GLFWwindow* window, int width, int height); /*! @brief The function pointer type for window content scale callbacks. * @@ -1380,7 +1408,7 @@ typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); * * @ingroup window */ -typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float); +typedef void (* GLFWwindowcontentscalefun)(GLFWwindow* window, float xscale, float yscale); /*! @brief The function pointer type for mouse button callbacks. * @@ -1406,7 +1434,7 @@ typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float); * * @ingroup input */ -typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); +typedef void (* GLFWmousebuttonfun)(GLFWwindow* window, int button, int action, int mods); /*! @brief The function pointer type for cursor position callbacks. * @@ -1429,7 +1457,7 @@ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); * * @ingroup input */ -typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); +typedef void (* GLFWcursorposfun)(GLFWwindow* window, double xpos, double ypos); /*! @brief The function pointer type for cursor enter/leave callbacks. * @@ -1450,7 +1478,7 @@ typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); * * @ingroup input */ -typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); +typedef void (* GLFWcursorenterfun)(GLFWwindow* window, int entered); /*! @brief The function pointer type for scroll callbacks. * @@ -1471,7 +1499,7 @@ typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); * * @ingroup input */ -typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); +typedef void (* GLFWscrollfun)(GLFWwindow* window, double xoffset, double yoffset); /*! @brief The function pointer type for keyboard key callbacks. * @@ -1497,7 +1525,7 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); * * @ingroup input */ -typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); +typedef void (* GLFWkeyfun)(GLFWwindow* window, int key, int scancode, int action, int mods); /*! @brief The function pointer type for Unicode character callbacks. * @@ -1518,7 +1546,7 @@ typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); * * @ingroup input */ -typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); +typedef void (* GLFWcharfun)(GLFWwindow* window, unsigned int codepoint); /*! @brief The function pointer type for Unicode character with modifiers * callbacks. @@ -1545,7 +1573,7 @@ typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); * * @ingroup input */ -typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); +typedef void (* GLFWcharmodsfun)(GLFWwindow* window, unsigned int codepoint, int mods); /*! @brief The function pointer type for path drop callbacks. * @@ -1569,7 +1597,7 @@ typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); * * @ingroup input */ -typedef void (* GLFWdropfun)(GLFWwindow*,int,const char*[]); +typedef void (* GLFWdropfun)(GLFWwindow* window, int path_count, const char* paths[]); /*! @brief The function pointer type for monitor configuration callbacks. * @@ -1590,7 +1618,7 @@ typedef void (* GLFWdropfun)(GLFWwindow*,int,const char*[]); * * @ingroup monitor */ -typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); +typedef void (* GLFWmonitorfun)(GLFWmonitor* monitor, int event); /*! @brief The function pointer type for joystick configuration callbacks. * @@ -1611,7 +1639,7 @@ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); * * @ingroup input */ -typedef void (* GLFWjoystickfun)(int,int); +typedef void (* GLFWjoystickfun)(int jid, int event); /*! @brief Video mode type. * @@ -1753,6 +1781,10 @@ typedef struct GLFWgamepadstate * bundle, if present. This can be disabled with the @ref * GLFW_COCOA_CHDIR_RESOURCES init hint. * + * @remark @x11 This function will set the `LC_CTYPE` category of the + * application locale according to the current environment if that category is + * still "C". This is because the "C" locale breaks Unicode text input. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref intro_init @@ -1776,6 +1808,8 @@ GLFWAPI int glfwInit(void); * call this function, as it is called by @ref glfwInit before it returns * failure. * + * This function has no effect if GLFW is not initialized. + * * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. * * @remark This function may be called before @ref glfwInit. @@ -2093,8 +2127,8 @@ GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * - * @remark @win32 calculates the returned physical size from the - * current resolution and system DPI instead of querying the monitor EDID data. + * @remark @win32 On Windows 8 and earlier the physical size is calculated from + * the current resolution and system DPI instead of querying the monitor EDID data. * * @thread_safety This function must only be called from the main thread. * @@ -2248,8 +2282,9 @@ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); * * This function returns an array of all video modes supported by the specified * monitor. The returned array is sorted in ascending order, first by color - * bit depth (the sum of all channel depths) and then by resolution area (the - * product of width and height). + * bit depth (the sum of all channel depths), then by resolution area (the + * product of width and height), then resolution width and finally by refresh + * rate. * * @param[in] monitor The monitor to query. * @param[out] count Where to store the number of video modes in the returned @@ -2772,8 +2807,8 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); * @param[in] images The images to create the icon from. This is ignored if * count is zero. * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. @@ -3183,18 +3218,15 @@ GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); * previously restored. If the window is already iconified, this function does * nothing. * - * If the specified window is a full screen window, the original monitor - * resolution is restored until the window is restored. + * If the specified window is a full screen window, GLFW restores the original + * video mode of the monitor. The window's desired video mode is set again + * when the window is restored. * * @param[in] window The window to iconify. * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * - * @remark @wayland There is no concept of iconification in wl_shell, this - * function will emit @ref GLFW_PLATFORM_ERROR when using this deprecated - * protocol. - * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_iconify @@ -3214,8 +3246,8 @@ GLFWAPI void glfwIconifyWindow(GLFWwindow* window); * (minimized) or maximized. If the window is already restored, this function * does nothing. * - * If the specified window is a full screen window, the resolution chosen for - * the window is restored on the selected monitor. + * If the specified window is an iconified full screen window, its desired + * video mode is set again for its monitor when the window is restored. * * @param[in] window The window to restore. * @@ -3276,6 +3308,11 @@ GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref * GLFW_PLATFORM_ERROR. * + * @remark @wayland Because Wayland wants every frame of the desktop to be + * complete, this function does not immediately make the window visible. + * Instead it will become visible the next time the window framebuffer is + * updated after this call. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_hide @@ -3478,6 +3515,9 @@ GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int * errors. However, this function should not fail as long as it is passed * valid arguments and the library has been [initialized](@ref intro_init). * + * @remark @wayland The Wayland protocol provides no way to check whether a + * window is iconfied, so @ref GLFW_ICONIFIED always returns `GLFW_FALSE`. + * * @thread_safety This function must only be called from the main thread. * * @sa @ref window_attribs @@ -3769,8 +3809,8 @@ GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwi * * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. * - * @remark @wayland The wl_shell protocol has no concept of iconification, - * this callback will never be called when using this deprecated protocol. + * @remark @wayland The XDG-shell protocol has no event for iconification, so + * this callback will never be called. * * @thread_safety This function must only be called from the main thread. * @@ -4238,8 +4278,7 @@ GLFWAPI int glfwGetKeyScancode(int key); * * This function returns the last state reported for the specified key to the * specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to - * the key callback. + * `GLFW_RELEASE`. The action `GLFW_REPEAT` is only reported to the key callback. * * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns * `GLFW_PRESS` the first time you call it for a key that was pressed, even if @@ -4400,8 +4439,8 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); * @return The handle of the created cursor, or `NULL` if an * [error](@ref error_handling) occurred. * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The specified image data is copied before this function * returns. @@ -5191,6 +5230,8 @@ GLFWAPI int glfwUpdateGamepadMappings(const char* string); * joystick is not present, does not have a mapping or an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref GLFW_INVALID_ENUM. + * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the specified joystick is * disconnected, the gamepad mappings are updated or the library is terminated. @@ -5280,8 +5321,8 @@ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` * if an [error](@ref error_handling) occurred. * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref + * GLFW_FORMAT_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * * @pointer_lifetime The returned string is allocated and freed by GLFW. You * should not free it yourself. It is valid until the next call to @ref @@ -5625,13 +5666,11 @@ GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); * This function returns whether the Vulkan loader and any minimally functional * ICD have been found. * - * The availability of a Vulkan loader and even an ICD does not by itself - * guarantee that surface creation or even instance creation is possible. - * For example, on Fermi systems Nvidia will install an ICD that provides no - * actual Vulkan support. Call @ref glfwGetRequiredInstanceExtensions to check - * whether the extensions necessary for Vulkan surface creation are available - * and @ref glfwGetPhysicalDevicePresentationSupport to check whether a queue - * family of a physical device supports image presentation. + * The availability of a Vulkan loader and even an ICD does not by itself guarantee that + * surface creation or even instance creation is possible. Call @ref + * glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan + * surface creation are available and @ref glfwGetPhysicalDevicePresentationSupport to + * check whether a queue family of a physical device supports image presentation. * * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` * otherwise. @@ -5677,10 +5716,6 @@ GLFWAPI int glfwVulkanSupported(void); * returned array, as it is an error to specify an extension more than once in * the `VkInstanceCreateInfo` struct. * - * @remark @macos This function currently supports either the - * `VK_MVK_macos_surface` extension from MoltenVK or `VK_EXT_metal_surface` - * extension. - * * @pointer_lifetime The returned array is allocated and freed by GLFW. You * should not free it yourself. It is guaranteed to be valid only until the * library is terminated. @@ -5762,7 +5797,7 @@ GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* p * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. * * @remark @macos This function currently always returns `GLFW_TRUE`, as the - * `VK_MVK_macos_surface` extension does not provide + * `VK_MVK_macos_surface` and `VK_EXT_metal_surface` extensions do not provide * a `vkGetPhysicalDevice*PresentationSupport` type function. * * @thread_safety This function may be called from any thread. For @@ -5819,8 +5854,10 @@ GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhys * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should * eliminate almost all occurrences of these errors. * - * @remark @macos This function currently only supports the - * `VK_MVK_macos_surface` extension from MoltenVK. + * @remark @macos GLFW prefers the `VK_EXT_metal_surface` extension, with the + * `VK_MVK_macos_surface` extension as a fallback. The name of the selected + * extension, if any, is included in the array returned by @ref + * glfwGetRequiredInstanceExtensions. * * @remark @macos This function creates and sets a `CAMetalLayer` instance for * the window content view, which is required for MoltenVK to function. @@ -5861,6 +5898,7 @@ GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window */ #ifndef GLAPIENTRY #define GLAPIENTRY APIENTRY + #define GLFW_GLAPIENTRY_DEFINED #endif /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ diff --git a/third_party/penumbra/vendor/glfw/include/GLFW/glfw3native.h b/third_party/penumbra/vendor/glfw/include/GLFW/glfw3native.h index 267e75ca9e0..7be0227d5e2 100644 --- a/third_party/penumbra/vendor/glfw/include/GLFW/glfw3native.h +++ b/third_party/penumbra/vendor/glfw/include/GLFW/glfw3native.h @@ -74,6 +74,16 @@ extern "C" { * and which platform-specific headers to include. It is then up your (by * definition platform-specific) code to handle which of these should be * defined. + * + * If you do not want the platform-specific headers to be included, define + * `GLFW_NATIVE_INCLUDE_NONE` before including the @ref glfw3native.h header. + * + * @code + * #define GLFW_EXPOSE_NATIVE_WIN32 + * #define GLFW_EXPOSE_NATIVE_WGL + * #define GLFW_NATIVE_INCLUDE_NONE + * #include + * @endcode */ @@ -81,44 +91,65 @@ extern "C" { * System headers and types *************************************************************************/ -#if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) - // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for - // example to allow applications to correctly declare a GL_ARB_debug_output - // callback) but windows.h assumes no one will define APIENTRY before it does - #if defined(GLFW_APIENTRY_DEFINED) - #undef APIENTRY - #undef GLFW_APIENTRY_DEFINED +#if !defined(GLFW_NATIVE_INCLUDE_NONE) + + #if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) + /* This is a workaround for the fact that glfw3.h needs to export APIENTRY (for + * example to allow applications to correctly declare a GL_KHR_debug callback) + * but windows.h assumes no one will define APIENTRY before it does + */ + #if defined(GLFW_APIENTRY_DEFINED) + #undef APIENTRY + #undef GLFW_APIENTRY_DEFINED + #endif + #include + #elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) + #if defined(__OBJC__) + #import + #else + #include + #include + #endif + #elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) + #include + #include + #elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) + #include + #endif + + #if defined(GLFW_EXPOSE_NATIVE_WGL) + /* WGL is declared by windows.h */ #endif - #include -#elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) - #if defined(__OBJC__) - #import - #else - #include - typedef void* id; + #if defined(GLFW_EXPOSE_NATIVE_NSGL) + /* NSGL is declared by Cocoa.h */ + #endif + #if defined(GLFW_EXPOSE_NATIVE_GLX) + /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by + * default it also acts as an OpenGL header + * However, glx.h will include gl.h, which will define it unconditionally + */ + #if defined(GLFW_GLAPIENTRY_DEFINED) + #undef GLAPIENTRY + #undef GLFW_GLAPIENTRY_DEFINED + #endif + #include + #endif + #if defined(GLFW_EXPOSE_NATIVE_EGL) + #include + #endif + #if defined(GLFW_EXPOSE_NATIVE_OSMESA) + /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by + * default it also acts as an OpenGL header + * However, osmesa.h will include gl.h, which will define it unconditionally + */ + #if defined(GLFW_GLAPIENTRY_DEFINED) + #undef GLAPIENTRY + #undef GLFW_GLAPIENTRY_DEFINED + #endif + #include #endif -#elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) - #include - #include -#elif defined(GLFW_EXPOSE_NATIVE_WAYLAND) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_WGL) - /* WGL is declared by windows.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_NSGL) - /* NSGL is declared by Cocoa.h */ -#endif -#if defined(GLFW_EXPOSE_NATIVE_GLX) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_EGL) - #include -#endif -#if defined(GLFW_EXPOSE_NATIVE_OSMESA) - #include -#endif +#endif /*GLFW_NATIVE_INCLUDE_NONE*/ /************************************************************************* @@ -132,6 +163,8 @@ extern "C" { * of the specified monitor, or `NULL` if an [error](@ref error_handling) * occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -147,6 +180,8 @@ GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -161,6 +196,16 @@ GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); * @return The `HWND` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @remark The `HDC` associated with the window can be queried with the + * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) + * function. + * @code + * HDC dc = GetDC(glfwGetWin32Window(window)); + * @endcode + * This DC is private and does not need to be released. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -177,6 +222,17 @@ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); * @return The `HGLRC` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * + * @remark The `HDC` associated with the window can be queried with the + * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) + * function. + * @code + * HDC dc = GetDC(glfwGetWin32Window(window)); + * @endcode + * This DC is private and does not need to be released. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -193,6 +249,8 @@ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); * @return The `CGDirectDisplayID` of the specified monitor, or * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -207,6 +265,8 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); * @return The `NSWindow` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -223,6 +283,9 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); * @return The `NSOpenGLContext` of the specified window, or `nil` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -239,6 +302,8 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); * @return The `Display` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -253,6 +318,8 @@ GLFWAPI Display* glfwGetX11Display(void); * @return The `RRCrtc` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -267,6 +334,8 @@ GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); * @return The `RROutput` of the specified monitor, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -281,6 +350,8 @@ GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); * @return The `Window` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -347,6 +418,9 @@ GLFWAPI const char* glfwGetX11SelectionString(void); * @return The `GLXContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -361,6 +435,9 @@ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); * @return The `GLXWindow` of the specified window, or `None` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -377,6 +454,8 @@ GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); * @return The `struct wl_display*` used by GLFW, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -391,6 +470,8 @@ GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); * @return The `struct wl_output*` of the specified monitor, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -405,6 +486,8 @@ GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); * @return The main `struct wl_surface*` of the specified window, or `NULL` if * an [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -421,6 +504,11 @@ GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. + * + * @remark Because EGL is initialized on demand, this function will return + * `EGL_NO_DISPLAY` until the first context has been created via EGL. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -435,6 +523,9 @@ GLFWAPI EGLDisplay glfwGetEGLDisplay(void); * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -449,6 +540,9 @@ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -472,6 +566,9 @@ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -493,6 +590,9 @@ GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * @@ -507,6 +607,9 @@ GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height * @return The `OSMesaContext` of the specified window, or `NULL` if an * [error](@ref error_handling) occurred. * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * * @thread_safety This function may be called from any thread. Access is not * synchronized. * diff --git a/third_party/penumbra/vendor/glfw/src/CMakeLists.txt b/third_party/penumbra/vendor/glfw/src/CMakeLists.txt index 891302edad3..b6dd86c5451 100644 --- a/third_party/penumbra/vendor/glfw/src/CMakeLists.txt +++ b/third_party/penumbra/vendor/glfw/src/CMakeLists.txt @@ -5,6 +5,15 @@ set(common_HEADERS internal.h mappings.h "${GLFW_SOURCE_DIR}/include/GLFW/glfw3native.h") set(common_SOURCES context.c init.c input.c monitor.c vulkan.c window.c) +add_custom_target(update_mappings + COMMAND "${CMAKE_COMMAND}" -P "${GLFW_SOURCE_DIR}/CMake/GenerateMappings.cmake" mappings.h.in mappings.h + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Updating gamepad mappings from upstream repository" + SOURCES mappings.h.in "${GLFW_SOURCE_DIR}/CMake/GenerateMappings.cmake" + VERBATIM) + +set_target_properties(update_mappings PROPERTIES FOLDER "GLFW3") + if (_GLFW_COCOA) set(glfw_HEADERS ${common_HEADERS} cocoa_platform.h cocoa_joystick.h posix_thread.h nsgl_context.h egl_context.h osmesa_context.h) @@ -63,7 +72,7 @@ elseif (_GLFW_OSMESA) endif() if (_GLFW_X11 OR _GLFW_WAYLAND) - if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") set(glfw_HEADERS ${glfw_HEADERS} linux_joystick.h) set(glfw_SOURCES ${glfw_SOURCES} linux_joystick.c) else() @@ -72,8 +81,8 @@ if (_GLFW_X11 OR _GLFW_WAYLAND) endif() endif() -if (APPLE) - # For some reason CMake didn't know about .m until version 3.16 +# Workaround for CMake not knowing about .m files before version 3.16 +if (CMAKE_VERSION VERSION_LESS "3.16" AND APPLE) set_source_files_properties(cocoa_init.m cocoa_joystick.m cocoa_monitor.m cocoa_window.m nsgl_context.m PROPERTIES LANGUAGE C) @@ -87,8 +96,8 @@ set_target_properties(glfw PROPERTIES POSITION_INDEPENDENT_CODE ON FOLDER "GLFW3") -if (${CMAKE_VERSION} VERSION_EQUAL "3.1.0" OR - ${CMAKE_VERSION} VERSION_GREATER "3.1.0") +if (CMAKE_VERSION VERSION_EQUAL "3.1.0" OR + CMAKE_VERSION VERSION_GREATER "3.1.0") set_target_properties(glfw PROPERTIES C_STANDARD 99) else() @@ -109,25 +118,30 @@ target_include_directories(glfw PRIVATE ${glfw_INCLUDE_DIRS}) target_link_libraries(glfw PRIVATE ${glfw_LIBRARIES}) -if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR - "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR - "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") - - # Make GCC and Clang warn about declarations that VS 2010 and 2012 won't - # accept for all source files that VS will build +# Make GCC warn about declarations that VS 2010 and 2012 won't accept for all +# source files that VS will build (Clang ignores this because we set -std=c99) +if (CMAKE_C_COMPILER_ID STREQUAL "GNU") set_source_files_properties(context.c init.c input.c monitor.c vulkan.c window.c win32_init.c win32_joystick.c win32_monitor.c win32_time.c win32_thread.c win32_window.c wgl_context.c egl_context.c osmesa_context.c PROPERTIES COMPILE_FLAGS -Wdeclaration-after-statement) +endif() + +# Enable a reasonable set of warnings +# NOTE: The order matters here, Clang-CL matches both MSVC and Clang +if (MSVC) + target_compile_options(glfw PRIVATE "/W3") +elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR + CMAKE_C_COMPILER_ID STREQUAL "Clang" OR + CMAKE_C_COMPILER_ID STREQUAL "AppleClang") - # Enable a reasonable set of warnings (no, -Wextra is not reasonable) target_compile_options(glfw PRIVATE "-Wall") endif() -if (WIN32) - target_compile_definitions(glfw PRIVATE _UNICODE) +if (_GLFW_WIN32) + target_compile_definitions(glfw PRIVATE UNICODE _UNICODE) endif() # HACK: When building on MinGW, WINVER and UNICODE need to be defined before @@ -135,7 +149,7 @@ endif() # win32_platform.h. We define them here until a saner solution can be found # NOTE: MinGW-w64 and Visual C++ do /not/ need this hack. if (MINGW) - target_compile_definitions(glfw PRIVATE UNICODE WINVER=0x0501) + target_compile_definitions(glfw PRIVATE WINVER=0x0501) endif() if (BUILD_SHARED_LIBS) @@ -159,9 +173,6 @@ if (BUILD_SHARED_LIBS) elseif (APPLE) # Add -fno-common to work around a bug in Apple's GCC target_compile_options(glfw PRIVATE "-fno-common") - - set_target_properties(glfw PROPERTIES - INSTALL_NAME_DIR "${CMAKE_INSTALL_LIBDIR}") endif() if (UNIX) @@ -170,14 +181,14 @@ if (BUILD_SHARED_LIBS) endif() endif() -if (MSVC) +if (MSVC OR CMAKE_C_SIMULATE_ID STREQUAL "MSVC") target_compile_definitions(glfw PRIVATE _CRT_SECURE_NO_WARNINGS) endif() if (GLFW_INSTALL) install(TARGETS glfw EXPORT glfwTargets - RUNTIME DESTINATION "bin" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") endif() diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_init.m b/third_party/penumbra/vendor/glfw/src/cocoa_init.m index 579b6e6ce48..f5273129812 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_init.m +++ b/third_party/penumbra/vendor/glfw/src/cocoa_init.m @@ -428,9 +428,6 @@ - (void)applicationWillFinishLaunching:(NSNotification *)notification { if (_glfw.hints.init.ns.menubar) { - // In case we are unbundled, make us a proper UI application - [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; - // Menu bar setup must go between sharedApplication and finishLaunching // in order to properly emulate the behavior of NSApplicationMain @@ -449,6 +446,11 @@ - (void)applicationDidFinishLaunching:(NSNotification *)notification { _glfw.ns.finishedLaunching = GLFW_TRUE; _glfwPlatformPostEmptyEvent(); + + // In case we are unbundled, make us a proper UI application + if (_glfw.hints.init.ns.menubar) + [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; + [NSApp stop:nil]; } @@ -473,18 +475,26 @@ - (void)applicationDidHide:(NSNotification *)notification if (!bundle) return NULL; - CFURLRef url = - CFBundleCopyAuxiliaryExecutableURL(bundle, CFSTR("libvulkan.1.dylib")); - if (!url) + CFURLRef frameworksUrl = CFBundleCopyPrivateFrameworksURL(bundle); + if (!frameworksUrl) return NULL; + CFURLRef loaderUrl = CFURLCreateCopyAppendingPathComponent( + kCFAllocatorDefault, frameworksUrl, CFSTR("libvulkan.1.dylib"), false); + if (!loaderUrl) + { + CFRelease(frameworksUrl); + return NULL; + } + char path[PATH_MAX]; void* handle = NULL; - if (CFURLGetFileSystemRepresentation(url, true, (UInt8*) path, sizeof(path) - 1)) + if (CFURLGetFileSystemRepresentation(loaderUrl, true, (UInt8*) path, sizeof(path) - 1)) handle = _glfw_dlopen(path); - CFRelease(url); + CFRelease(loaderUrl); + CFRelease(frameworksUrl); return handle; } @@ -605,6 +615,8 @@ void _glfwPlatformTerminate(void) free(_glfw.ns.clipboardString); _glfwTerminateNSGL(); + _glfwTerminateEGL(); + _glfwTerminateOSMesa(); _glfwTerminateJoysticksNS(); } // autoreleasepool diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_joystick.h b/third_party/penumbra/vendor/glfw/src/cocoa_joystick.h index b4448778188..0de867856d8 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_joystick.h +++ b/third_party/penumbra/vendor/glfw/src/cocoa_joystick.h @@ -33,6 +33,7 @@ #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE struct { int dummyJoystick; } #define _GLFW_PLATFORM_MAPPING_NAME "Mac OS X" +#define GLFW_BUILD_COCOA_MAPPINGS // Cocoa-specific per-joystick data // diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_joystick.m b/third_party/penumbra/vendor/glfw/src/cocoa_joystick.m index 2c8d82d94c6..3d306777a3b 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_joystick.m +++ b/third_party/penumbra/vendor/glfw/src/cocoa_joystick.m @@ -98,8 +98,7 @@ static void closeJoystick(_GLFWjoystick* js) { int i; - if (!js->present) - return; + _glfwInputJoystick(js, GLFW_DISCONNECTED); for (i = 0; i < CFArrayGetCount(js->ns.axes); i++) free((void*) CFArrayGetValueAtIndex(js->ns.axes, i)); @@ -114,7 +113,6 @@ static void closeJoystick(_GLFWjoystick* js) CFRelease(js->ns.hats); _glfwFreeJoystick(js); - _glfwInputJoystick(js, GLFW_DISCONNECTED); } // Callback for user-initiated joystick addition @@ -294,9 +292,9 @@ static void removeCallback(void* context, for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { - if (_glfw.joysticks[jid].ns.device == device) + if (_glfw.joysticks[jid].connected && _glfw.joysticks[jid].ns.device == device) { - closeJoystick(_glfw.joysticks + jid); + closeJoystick(&_glfw.joysticks[jid]); break; } } @@ -392,7 +390,10 @@ void _glfwTerminateJoysticksNS(void) int jid; for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) - closeJoystick(_glfw.joysticks + jid); + { + if (_glfw.joysticks[jid].connected) + closeJoystick(&_glfw.joysticks[jid]); + } CFRelease(_glfw.ns.hidManager); _glfw.ns.hidManager = NULL; @@ -470,7 +471,7 @@ int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode) } } - return js->present; + return js->connected; } void _glfwPlatformUpdateGamepadGUID(char* guid) diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_monitor.m b/third_party/penumbra/vendor/glfw/src/cocoa_monitor.m index 8ef94a3b0ff..7769bb7e99e 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_monitor.m +++ b/third_party/penumbra/vendor/glfw/src/cocoa_monitor.m @@ -39,18 +39,31 @@ // Get the name of the specified display, or NULL // -static char* getDisplayName(CGDirectDisplayID displayID) +static char* getMonitorName(CGDirectDisplayID displayID, NSScreen* screen) { + // IOKit doesn't work on Apple Silicon anymore + // Luckily, 10.15 introduced -[NSScreen localizedName]. + // Use it if available, and fall back to IOKit otherwise. + if (screen) + { + if ([screen respondsToSelector:@selector(localizedName)]) + { + NSString* name = [screen valueForKey:@"localizedName"]; + if (name) + return _glfw_strdup([name UTF8String]); + } + } + io_iterator_t it; io_service_t service; CFDictionaryRef info; - if (IOServiceGetMatchingServices(kIOMasterPortDefault, + if (IOServiceGetMatchingServices(MACH_PORT_NULL, IOServiceMatching("IODisplayConnect"), &it) != 0) { // This may happen if a desktop Mac is running headless - return NULL; + return _glfw_strdup("Display"); } while ((service = IOIteratorNext(it)) != 0) @@ -85,11 +98,7 @@ IOObjectRelease(it); if (!service) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Cocoa: Failed to find service port for display"); - return NULL; - } + return _glfw_strdup("Display"); CFDictionaryRef names = CFDictionaryGetValue(info, CFSTR(kDisplayProductName)); @@ -101,7 +110,7 @@ { // This may happen if a desktop Mac is running headless CFRelease(info); - return NULL; + return _glfw_strdup("Display"); } const CFIndex size = @@ -209,31 +218,6 @@ static void endFadeReservation(CGDisplayFadeReservationToken token) } } -// Finds and caches the NSScreen corresponding to the specified monitor -// -static GLFWbool refreshMonitorScreen(_GLFWmonitor* monitor) -{ - if (monitor->ns.screen) - return GLFW_TRUE; - - for (NSScreen* screen in [NSScreen screens]) - { - NSNumber* displayID = [screen deviceDescription][@"NSScreenNumber"]; - - // HACK: Compare unit numbers instead of display IDs to work around - // display replacement on machines with automatic graphics - // switching - if (monitor->ns.unitNumber == CGDisplayUnitNumber([displayID unsignedIntValue])) - { - monitor->ns.screen = screen; - return GLFW_TRUE; - } - } - - _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to find a screen for monitor"); - return GLFW_FALSE; -} - // Returns the display refresh rate queried from the I/O registry // static double getFallbackRefreshRate(CGDirectDisplayID displayID) @@ -243,7 +227,7 @@ static double getFallbackRefreshRate(CGDirectDisplayID displayID) io_iterator_t it; io_service_t service; - if (IOServiceGetMatchingServices(kIOMasterPortDefault, + if (IOServiceGetMatchingServices(MACH_PORT_NULL, IOServiceMatching("IOFramebuffer"), &it) != 0) { @@ -277,14 +261,20 @@ static double getFallbackRefreshRate(CGDirectDisplayID displayID) CFSTR("IOFBCurrentPixelCount"), kCFAllocatorDefault, kNilOptions); - if (!clockRef || !countRef) - break; uint32_t clock = 0, count = 0; - CFNumberGetValue(clockRef, kCFNumberIntType, &clock); - CFNumberGetValue(countRef, kCFNumberIntType, &count); - CFRelease(clockRef); - CFRelease(countRef); + + if (clockRef) + { + CFNumberGetValue(clockRef, kCFNumberIntType, &clock); + CFRelease(clockRef); + } + + if (countRef) + { + CFNumberGetValue(countRef, kCFNumberIntType, &count); + CFRelease(countRef); + } if (clock > 0 && count > 0) refreshRate = clock / (double) count; @@ -328,27 +318,46 @@ void _glfwPollMonitorsNS(void) if (CGDisplayIsAsleep(displays[i])) continue; + const uint32_t unitNumber = CGDisplayUnitNumber(displays[i]); + NSScreen* screen = nil; + + for (screen in [NSScreen screens]) + { + NSNumber* screenNumber = [screen deviceDescription][@"NSScreenNumber"]; + + // HACK: Compare unit numbers instead of display IDs to work around + // display replacement on machines with automatic graphics + // switching + if (CGDisplayUnitNumber([screenNumber unsignedIntValue]) == unitNumber) + break; + } + // HACK: Compare unit numbers instead of display IDs to work around // display replacement on machines with automatic graphics // switching - const uint32_t unitNumber = CGDisplayUnitNumber(displays[i]); - for (uint32_t j = 0; j < disconnectedCount; j++) + uint32_t j; + for (j = 0; j < disconnectedCount; j++) { if (disconnected[j] && disconnected[j]->ns.unitNumber == unitNumber) { + disconnected[j]->ns.screen = screen; disconnected[j] = NULL; break; } } + if (j < disconnectedCount) + continue; + const CGSize size = CGDisplayScreenSize(displays[i]); - char* name = getDisplayName(displays[i]); + char* name = getMonitorName(displays[i], screen); if (!name) - name = _glfw_strdup("Unknown"); + continue; _GLFWmonitor* monitor = _glfwAllocMonitor(name, size.width, size.height); monitor->ns.displayID = displays[i]; monitor->ns.unitNumber = unitNumber; + monitor->ns.screen = screen; free(name); @@ -457,8 +466,11 @@ void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, { @autoreleasepool { - if (!refreshMonitorScreen(monitor)) - return; + if (!monitor->ns.screen) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Cocoa: Cannot query content scale without screen"); + } const NSRect points = [monitor->ns.screen frame]; const NSRect pixels = [monitor->ns.screen convertRectToBacking:points]; @@ -477,8 +489,11 @@ void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, { @autoreleasepool { - if (!refreshMonitorScreen(monitor)) - return; + if (!monitor->ns.screen) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Cocoa: Cannot query workarea without screen"); + } const NSRect frameRect = [monitor->ns.screen visibleFrame]; @@ -521,7 +536,7 @@ void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, } // Skip duplicate modes - if (i < *count) + if (j < *count) continue; (*count)++; diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_platform.h b/third_party/penumbra/vendor/glfw/src/cocoa_platform.h index 15c2169619e..bb677033a15 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_platform.h +++ b/third_party/penumbra/vendor/glfw/src/cocoa_platform.h @@ -31,7 +31,9 @@ // NOTE: All of NSGL was deprecated in the 10.14 SDK // This disables the pointless warnings for every symbol we use +#ifndef GL_SILENCE_DEPRECATION #define GL_SILENCE_DEPRECATION +#endif #if defined(__OBJC__) #import @@ -40,8 +42,10 @@ typedef void* id; #endif // NOTE: Many Cocoa enum values have been renamed and we need to build across -// SDK versions where one is unavailable or the other deprecated -// We use the newer names in code and these macros to handle compatibility +// SDK versions where one is unavailable or deprecated. +// We use the newer names in code and replace them with the older names if +// the base SDK does not provide the newer names. + #if MAC_OS_X_VERSION_MAX_ALLOWED < 101200 #define NSBitmapFormatAlphaNonpremultiplied NSAlphaNonpremultipliedBitmapFormat #define NSEventMaskAny NSAnyEventMask @@ -60,6 +64,15 @@ typedef void* id; #define NSWindowStyleMaskTitled NSTitledWindowMask #endif +// NOTE: Many Cocoa dynamically linked constants have been renamed and we need +// to build across SDK versions where one is unavailable or deprecated. +// We use the newer names in code and replace them with the older names if +// the deployment target is older than the newer names. + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 101300 + #define NSPasteboardTypeURL NSURLPboardType +#endif + typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; typedef VkFlags VkMetalSurfaceCreateFlagsEXT; @@ -92,7 +105,7 @@ typedef VkResult (APIENTRY *PFN_vkCreateMetalSurfaceEXT)(VkInstance,const VkMeta #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) -#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->ns.view) +#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->ns.layer) #define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowNS ns @@ -121,6 +134,7 @@ typedef struct _GLFWwindowNS id layer; GLFWbool maximized; + GLFWbool occluded; GLFWbool retina; // Cached window properties to filter out duplicate events @@ -132,7 +146,6 @@ typedef struct _GLFWwindowNS // since the last cursor motion event was processed // This is kept to counteract Cocoa doing the same internally double cursorWarpDeltaX, cursorWarpDeltaY; - } _GLFWwindowNS; // Cocoa-specific global data @@ -167,7 +180,6 @@ typedef struct _GLFWlibraryNS PFN_LMGetKbdType GetKbdType; CFStringRef kPropertyUnicodeKeyLayoutData; } tis; - } _GLFWlibraryNS; // Cocoa-specific per-monitor data @@ -179,7 +191,6 @@ typedef struct _GLFWmonitorNS uint32_t unitNumber; id screen; double fallbackRefreshRate; - } _GLFWmonitorNS; // Cocoa-specific per-cursor data @@ -187,7 +198,6 @@ typedef struct _GLFWmonitorNS typedef struct _GLFWcursorNS { id object; - } _GLFWcursorNS; // Cocoa-specific global timer data @@ -195,7 +205,6 @@ typedef struct _GLFWcursorNS typedef struct _GLFWtimerNS { uint64_t frequency; - } _GLFWtimerNS; diff --git a/third_party/penumbra/vendor/glfw/src/cocoa_window.m b/third_party/penumbra/vendor/glfw/src/cocoa_window.m index 129e975e556..bbab6c4f087 100644 --- a/third_party/penumbra/vendor/glfw/src/cocoa_window.m +++ b/third_party/penumbra/vendor/glfw/src/cocoa_window.m @@ -31,25 +31,9 @@ #include #include -// Returns the style mask corresponding to the window settings -// -static NSUInteger getStyleMask(_GLFWwindow* window) -{ - NSUInteger styleMask = NSWindowStyleMaskMiniaturizable; - - if (window->monitor || !window->decorated) - styleMask |= NSWindowStyleMaskBorderless; - else - { - styleMask |= NSWindowStyleMaskTitled | - NSWindowStyleMaskClosable; - - if (window->resizable) - styleMask |= NSWindowStyleMaskResizable; - } - - return styleMask; -} +// HACK: This enum value is missing from framework headers on OS X 10.11 despite +// having been (according to documentation) added in Mac OS X 10.7 +#define NSWindowCollectionBehaviorFullScreenNone (1 << 9) // Returns whether the cursor is in the content area of the specified window // @@ -114,10 +98,11 @@ static void updateCursorMode(_GLFWwindow* window) else if (_glfw.ns.disabledCursorWindow == window) { _glfw.ns.disabledCursorWindow = NULL; - CGAssociateMouseAndMouseCursorPosition(true); _glfwPlatformSetCursorPos(window, _glfw.ns.restoreCursorPosX, _glfw.ns.restoreCursorPosY); + // NOTE: The matching CGAssociateMouseAndMouseCursorPosition call is + // made in _glfwPlatformSetCursorPos as part of a workaround } if (cursorInContentArea(window)) @@ -243,7 +228,7 @@ - (BOOL)windowShouldClose:(id)sender - (void)windowDidResize:(NSNotification *)notification { - if (window->context.client != GLFW_NO_API) + if (window->context.source == GLFW_NATIVE_CONTEXT_API) [window->context.nsgl.object update]; if (_glfw.ns.disabledCursorWindow == window) @@ -278,7 +263,7 @@ - (void)windowDidResize:(NSNotification *)notification - (void)windowDidMove:(NSNotification *)notification { - if (window->context.client != GLFW_NO_API) + if (window->context.source == GLFW_NATIVE_CONTEXT_API) [window->context.nsgl.object update]; if (_glfw.ns.disabledCursorWindow == window) @@ -322,6 +307,14 @@ - (void)windowDidResignKey:(NSNotification *)notification _glfwInputWindowFocus(window, GLFW_FALSE); } +- (void)windowDidChangeOcclusionState:(NSNotification* )notification +{ + if ([window->ns.object occlusionState] & NSWindowOcclusionStateVisible) + window->ns.occluded = GLFW_FALSE; + else + window->ns.occluded = GLFW_TRUE; +} + @end @@ -352,9 +345,7 @@ - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow markedText = [[NSMutableAttributedString alloc] init]; [self updateTrackingAreas]; - // NOTE: kUTTypeURL corresponds to NSPasteboardTypeURL but is available - // on 10.7 without having been deprecated yet - [self registerForDraggedTypes:@[(__bridge NSString*) kUTTypeURL]]; + [self registerForDraggedTypes:@[NSPasteboardTypeURL]]; } return self; @@ -389,7 +380,7 @@ - (BOOL)wantsUpdateLayer - (void)updateLayer { - if (window->context.client != GLFW_NO_API) + if (window->context.source == GLFW_NATIVE_CONTEXT_API) [window->context.nsgl.object update]; _glfwInputWindowDamage(window); @@ -512,26 +503,25 @@ - (void)viewDidChangeBackingProperties { const NSRect contentRect = [window->ns.view frame]; const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect]; - - if (fbRect.size.width != window->ns.fbWidth || - fbRect.size.height != window->ns.fbHeight) - { - window->ns.fbWidth = fbRect.size.width; - window->ns.fbHeight = fbRect.size.height; - _glfwInputFramebufferSize(window, fbRect.size.width, fbRect.size.height); - } - const float xscale = fbRect.size.width / contentRect.size.width; const float yscale = fbRect.size.height / contentRect.size.height; if (xscale != window->ns.xscale || yscale != window->ns.yscale) { + if (window->ns.retina && window->ns.layer) + [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; + window->ns.xscale = xscale; window->ns.yscale = yscale; _glfwInputWindowContentScale(window, xscale, yscale); + } - if (window->ns.retina && window->ns.layer) - [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; + if (fbRect.size.width != window->ns.fbWidth || + fbRect.size.height != window->ns.fbHeight) + { + window->ns.fbWidth = fbRect.size.width; + window->ns.fbHeight = fbRect.size.height; + _glfwInputFramebufferSize(window, fbRect.size.width, fbRect.size.height); } } @@ -723,14 +713,24 @@ - (void)insertText:(id)string replacementRange:(NSRange)replacementRange else characters = (NSString*) string; - const NSUInteger length = [characters length]; - for (NSUInteger i = 0; i < length; i++) + NSRange range = NSMakeRange(0, [characters length]); + while (range.length) { - const unichar codepoint = [characters characterAtIndex:i]; - if ((codepoint & 0xff00) == 0xf700) - continue; + uint32_t codepoint = 0; + + if ([characters getBytes:&codepoint + maxLength:sizeof(codepoint) + usedLength:NULL + encoding:NSUTF32StringEncoding + options:0 + range:range + remainingRange:&range]) + { + if (codepoint >= 0xf700 && codepoint <= 0xf7ff) + continue; - _glfwInputChar(window, codepoint, mods, plain); + _glfwInputChar(window, codepoint, mods, plain); + } } } @@ -793,9 +793,21 @@ static GLFWbool createNativeWindow(_GLFWwindow* window, else contentRect = NSMakeRect(0, 0, wndconfig->width, wndconfig->height); + NSUInteger styleMask = NSWindowStyleMaskMiniaturizable; + + if (window->monitor || !window->decorated) + styleMask |= NSWindowStyleMaskBorderless; + else + { + styleMask |= (NSWindowStyleMaskTitled | NSWindowStyleMaskClosable); + + if (window->resizable) + styleMask |= NSWindowStyleMaskResizable; + } + window->ns.object = [[GLFWWindow alloc] initWithContentRect:contentRect - styleMask:getStyleMask(window) + styleMask:styleMask backing:NSBackingStoreBuffered defer:NO]; @@ -821,6 +833,12 @@ static GLFWbool createNativeWindow(_GLFWwindow* window, NSWindowCollectionBehaviorManaged; [window->ns.object setCollectionBehavior:behavior]; } + else + { + const NSWindowCollectionBehavior behavior = + NSWindowCollectionBehaviorFullScreenNone; + [window->ns.object setCollectionBehavior:behavior]; + } if (wndconfig->floating) [window->ns.object setLevel:NSFloatingWindowLevel]; @@ -901,6 +919,11 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, } else if (ctxconfig->source == GLFW_EGL_CONTEXT_API) { + // EGL implementation on macOS use CALayer* EGLNativeWindowType so we + // need to get the layer for EGL window surface creation. + [window->ns.view setWantsLayer:YES]; + window->ns.layer = [window->ns.view layer]; + if (!_glfwInitEGL()) return GLFW_FALSE; if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) @@ -913,6 +936,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -920,6 +946,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformShowWindow(window); _glfwPlatformFocusWindow(window); acquireMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } return GLFW_TRUE; @@ -1198,9 +1236,10 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, { const NSRect contentRect = NSMakeRect(xpos, _glfwTransformYNS(ypos + height - 1), width, height); + const NSUInteger styleMask = [window->ns.object styleMask]; const NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect - styleMask:getStyleMask(window)]; + styleMask:styleMask]; [window->ns.object setFrame:frameRect display:YES]; } @@ -1217,7 +1256,27 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, // TODO: Solve this in a less terrible way _glfwPlatformPollEvents(); - const NSUInteger styleMask = getStyleMask(window); + NSUInteger styleMask = [window->ns.object styleMask]; + + if (window->monitor) + { + styleMask &= ~(NSWindowStyleMaskTitled | NSWindowStyleMaskClosable); + styleMask |= NSWindowStyleMaskBorderless; + } + else + { + if (window->decorated) + { + styleMask &= ~NSWindowStyleMaskBorderless; + styleMask |= (NSWindowStyleMaskTitled | NSWindowStyleMaskClosable); + } + + if (window->resizable) + styleMask |= NSWindowStyleMaskResizable; + else + styleMask &= ~NSWindowStyleMaskResizable; + } + [window->ns.object setStyleMask:styleMask]; // HACK: Changing the style mask can cause the first responder to be cleared [window->ns.object makeFirstResponder:window->ns.view]; @@ -1263,6 +1322,20 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, else [window->ns.object setLevel:NSNormalWindowLevel]; + if (window->resizable) + { + const NSWindowCollectionBehavior behavior = + NSWindowCollectionBehaviorFullScreenPrimary | + NSWindowCollectionBehaviorManaged; + [window->ns.object setCollectionBehavior:behavior]; + } + else + { + const NSWindowCollectionBehavior behavior = + NSWindowCollectionBehaviorFullScreenNone; + [window->ns.object setCollectionBehavior:behavior]; + } + [window->ns.object setHasShadow:YES]; // HACK: Clearing NSWindowStyleMaskTitled resets and disables the window // title property but the miniwindow title property is unaffected @@ -1296,7 +1369,12 @@ int _glfwPlatformWindowVisible(_GLFWwindow* window) int _glfwPlatformWindowMaximized(_GLFWwindow* window) { @autoreleasepool { - return [window->ns.object isZoomed]; + + if (window->resizable) + return [window->ns.object isZoomed]; + else + return GLFW_FALSE; + } // autoreleasepool } @@ -1328,15 +1406,46 @@ int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled) { @autoreleasepool { - [window->ns.object setStyleMask:getStyleMask(window)]; + + const NSUInteger styleMask = [window->ns.object styleMask]; + if (enabled) + { + [window->ns.object setStyleMask:(styleMask | NSWindowStyleMaskResizable)]; + const NSWindowCollectionBehavior behavior = + NSWindowCollectionBehaviorFullScreenPrimary | + NSWindowCollectionBehaviorManaged; + [window->ns.object setCollectionBehavior:behavior]; + } + else + { + [window->ns.object setStyleMask:(styleMask & ~NSWindowStyleMaskResizable)]; + const NSWindowCollectionBehavior behavior = + NSWindowCollectionBehaviorFullScreenNone; + [window->ns.object setCollectionBehavior:behavior]; + } + } // autoreleasepool } void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled) { @autoreleasepool { - [window->ns.object setStyleMask:getStyleMask(window)]; + + NSUInteger styleMask = [window->ns.object styleMask]; + if (enabled) + { + styleMask |= (NSWindowStyleMaskTitled | NSWindowStyleMaskClosable); + styleMask &= ~NSWindowStyleMaskBorderless; + } + else + { + styleMask |= NSWindowStyleMaskBorderless; + styleMask &= ~(NSWindowStyleMaskTitled | NSWindowStyleMaskClosable); + } + + [window->ns.object setStyleMask:styleMask]; [window->ns.object makeFirstResponder:window->ns.view]; + } // autoreleasepool } @@ -1501,6 +1610,11 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) _glfwTransformYNS(globalPoint.y))); } + // HACK: Calling this right after setting the cursor position prevents macOS + // from freezing the cursor for a fraction of a second afterwards + if (window->cursorMode != GLFW_CURSOR_DISABLED) + CGAssociateMouseAndMouseCursorPosition(true); + } // autoreleasepool } @@ -1519,7 +1633,7 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) if (scancode < 0 || scancode > 0xff || _glfw.ns.keycodes[scancode] == GLFW_KEY_UNKNOWN) { - _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode"); + _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } diff --git a/third_party/penumbra/vendor/glfw/src/context.c b/third_party/penumbra/vendor/glfw/src/context.c index 867e399f231..d86e0faec49 100644 --- a/third_party/penumbra/vendor/glfw/src/context.c +++ b/third_party/penumbra/vendor/glfw/src/context.c @@ -196,12 +196,6 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired, continue; } - if (desired->doublebuffer != current->doublebuffer) - { - // Double buffering is a hard constraint - continue; - } - // Count number of missing buffers { missing = 0; @@ -570,7 +564,9 @@ GLFWbool _glfwRefreshContextAttribs(_GLFWwindow* window, PFNGLCLEARPROC glClear = (PFNGLCLEARPROC) window->context.getProcAddress("glClear"); glClear(GL_COLOR_BUFFER_BIT); - window->context.swapBuffers(window); + + if (window->doublebuffer) + window->context.swapBuffers(window); } glfwMakeContextCurrent((GLFWwindow*) previous); @@ -613,10 +609,12 @@ GLFWbool _glfwStringInExtensionString(const char* string, const char* extensions GLFWAPI void glfwMakeContextCurrent(GLFWwindow* handle) { _GLFWwindow* window = (_GLFWwindow*) handle; - _GLFWwindow* previous = _glfwPlatformGetTls(&_glfw.contextSlot); + _GLFWwindow* previous; _GLFW_REQUIRE_INIT(); + previous = _glfwPlatformGetTls(&_glfw.contextSlot); + if (window && window->context.client == GLFW_NO_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, diff --git a/third_party/penumbra/vendor/glfw/src/egl_context.c b/third_party/penumbra/vendor/glfw/src/egl_context.c index e458bfb87e3..58d9557b0e2 100644 --- a/third_party/penumbra/vendor/glfw/src/egl_context.c +++ b/third_party/penumbra/vendor/glfw/src/egl_context.c @@ -173,7 +173,7 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, u->stencilBits = getEGLConfigAttrib(n, EGL_STENCIL_SIZE); u->samples = getEGLConfigAttrib(n, EGL_SAMPLES); - u->doublebuffer = GLFW_TRUE; + u->doublebuffer = desired->doublebuffer; u->handle = (uintptr_t) n; usableCount++; @@ -230,6 +230,12 @@ static void swapBuffersEGL(_GLFWwindow* window) return; } +#if defined(_GLFW_WAYLAND) + // NOTE: Swapping buffers on a hidden window on Wayland makes it visible + if (!window->wl.visible) + return; +#endif + eglSwapBuffers(_glfw.egl.display, window->context.egl.surface); } @@ -314,6 +320,8 @@ GLFWbool _glfwInitEGL(void) "libEGL.dylib", #elif defined(__CYGWIN__) "libEGL-1.so", +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libEGL.so", #else "libEGL.so.1", #endif @@ -426,6 +434,8 @@ GLFWbool _glfwInitEGL(void) extensionSupportedEGL("EGL_KHR_get_all_proc_addresses"); _glfw.egl.KHR_context_flush_control = extensionSupportedEGL("EGL_KHR_context_flush_control"); + _glfw.egl.EXT_present_opaque = + extensionSupportedEGL("EGL_EXT_present_opaque"); return GLFW_TRUE; } @@ -588,17 +598,21 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, } // Set up attributes for surface creation + index = 0; + + if (fbconfig->sRGB) { - int index = 0; + if (_glfw.egl.KHR_gl_colorspace) + setAttrib(EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_SRGB_KHR); + } - if (fbconfig->sRGB) - { - if (_glfw.egl.KHR_gl_colorspace) - setAttrib(EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_SRGB_KHR); - } + if (!fbconfig->doublebuffer) + setAttrib(EGL_RENDER_BUFFER, EGL_SINGLE_BUFFER); - setAttrib(EGL_NONE, EGL_NONE); - } + if (_glfw.egl.EXT_present_opaque) + setAttrib(EGL_PRESENT_OPAQUE_EXT, !fbconfig->transparent); + + setAttrib(EGL_NONE, EGL_NONE); window->context.egl.surface = eglCreateWindowSurface(_glfw.egl.display, @@ -629,6 +643,8 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, "libGLES_CM.dll", #elif defined(_GLFW_COCOA) "libGLESv1_CM.dylib", +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libGLESv1_CM.so", #else "libGLESv1_CM.so.1", "libGLES_CM.so.1", @@ -646,6 +662,8 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, "libGLESv2.dylib", #elif defined(__CYGWIN__) "libGLESv2-2.so", +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libGLESv2.so", #else "libGLESv2.so.2", #endif @@ -657,6 +675,8 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, _GLFW_OPENGL_LIBRARY, #elif defined(_GLFW_WIN32) #elif defined(_GLFW_COCOA) +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libGL.so", #else "libGL.so.1", #endif @@ -764,7 +784,7 @@ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_CONTEXT); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_EGL_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return EGL_NO_CONTEXT; @@ -778,7 +798,7 @@ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_SURFACE); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_EGL_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return EGL_NO_SURFACE; diff --git a/third_party/penumbra/vendor/glfw/src/egl_context.h b/third_party/penumbra/vendor/glfw/src/egl_context.h index 6d42e11c976..47493a6fa5d 100644 --- a/third_party/penumbra/vendor/glfw/src/egl_context.h +++ b/third_party/penumbra/vendor/glfw/src/egl_context.h @@ -80,6 +80,8 @@ typedef struct wl_egl_window* EGLNativeWindowType; #define EGL_OPENGL_ES_API 0x30a0 #define EGL_OPENGL_API 0x30a2 #define EGL_NONE 0x3038 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_SINGLE_BUFFER 0x3085 #define EGL_EXTENSIONS 0x3055 #define EGL_CONTEXT_CLIENT_VERSION 0x3098 #define EGL_NATIVE_VISUAL_ID 0x302e @@ -106,6 +108,7 @@ typedef struct wl_egl_window* EGLNativeWindowType; #define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 #define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 #define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 +#define EGL_PRESENT_OPAQUE_EXT 0x31df typedef int EGLint; typedef unsigned int EGLBoolean; @@ -162,7 +165,6 @@ typedef struct _GLFWcontextEGL EGLSurface surface; void* client; - } _GLFWcontextEGL; // EGL-specific global data @@ -178,6 +180,7 @@ typedef struct _GLFWlibraryEGL GLFWbool KHR_gl_colorspace; GLFWbool KHR_get_all_proc_addresses; GLFWbool KHR_context_flush_control; + GLFWbool EXT_present_opaque; void* handle; @@ -197,7 +200,6 @@ typedef struct _GLFWlibraryEGL PFN_eglSwapInterval SwapInterval; PFN_eglQueryString QueryString; PFN_eglGetProcAddress GetProcAddress; - } _GLFWlibraryEGL; diff --git a/third_party/penumbra/vendor/glfw/src/glfw_config.h.in b/third_party/penumbra/vendor/glfw/src/glfw_config.h.in index f418c995071..e30c9c1bee1 100644 --- a/third_party/penumbra/vendor/glfw/src/glfw_config.h.in +++ b/third_party/penumbra/vendor/glfw/src/glfw_config.h.in @@ -53,8 +53,6 @@ // Define this to 1 to force use of high-performance GPU on hybrid systems #cmakedefine _GLFW_USE_HYBRID_HPG -// Define this to 1 if xkbcommon supports the compose key -#cmakedefine HAVE_XKBCOMMON_COMPOSE_H // Define this to 1 if the libc supports memfd_create() #cmakedefine HAVE_MEMFD_CREATE diff --git a/third_party/penumbra/vendor/glfw/src/glx_context.c b/third_party/penumbra/vendor/glfw/src/glx_context.c index fbbb897727f..1b1b3f90dc6 100644 --- a/third_party/penumbra/vendor/glfw/src/glx_context.c +++ b/third_party/penumbra/vendor/glfw/src/glx_context.c @@ -92,6 +92,9 @@ static GLFWbool chooseGLXFBConfig(const _GLFWfbconfig* desired, continue; } + if (getGLXFBConfigAttrib(n, GLX_DOUBLEBUFFER) != desired->doublebuffer) + continue; + if (desired->transparent) { XVisualInfo* vi = glXGetVisualFromFBConfig(_glfw.x11.display, n); @@ -119,8 +122,6 @@ static GLFWbool chooseGLXFBConfig(const _GLFWfbconfig* desired, if (getGLXFBConfigAttrib(n, GLX_STEREO)) u->stereo = GLFW_TRUE; - if (getGLXFBConfigAttrib(n, GLX_DOUBLEBUFFER)) - u->doublebuffer = GLFW_TRUE; if (_glfw.glx.ARB_multisample) u->samples = getGLXFBConfigAttrib(n, GLX_SAMPLES); @@ -259,6 +260,8 @@ GLFWbool _glfwInitGLX(void) _GLFW_GLX_LIBRARY, #elif defined(__CYGWIN__) "libGL-1.so", +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libGL.so", #else "libGL.so.1", "libGL.so", @@ -306,10 +309,6 @@ GLFWbool _glfwInitGLX(void) _glfw_dlsym(_glfw.glx.handle, "glXCreateWindow"); _glfw.glx.DestroyWindow = _glfw_dlsym(_glfw.glx.handle, "glXDestroyWindow"); - _glfw.glx.GetProcAddress = - _glfw_dlsym(_glfw.glx.handle, "glXGetProcAddress"); - _glfw.glx.GetProcAddressARB = - _glfw_dlsym(_glfw.glx.handle, "glXGetProcAddressARB"); _glfw.glx.GetVisualFromFBConfig = _glfw_dlsym(_glfw.glx.handle, "glXGetVisualFromFBConfig"); @@ -325,8 +324,6 @@ GLFWbool _glfwInitGLX(void) !_glfw.glx.CreateNewContext || !_glfw.glx.CreateWindow || !_glfw.glx.DestroyWindow || - !_glfw.glx.GetProcAddress || - !_glfw.glx.GetProcAddressARB || !_glfw.glx.GetVisualFromFBConfig) { _glfwInputError(GLFW_PLATFORM_ERROR, @@ -334,6 +331,12 @@ GLFWbool _glfwInitGLX(void) return GLFW_FALSE; } + // NOTE: Unlike GLX 1.3 entry points these are not required to be present + _glfw.glx.GetProcAddress = (PFNGLXGETPROCADDRESSPROC) + _glfw_dlsym(_glfw.glx.handle, "glXGetProcAddress"); + _glfw.glx.GetProcAddressARB = (PFNGLXGETPROCADDRESSPROC) + _glfw_dlsym(_glfw.glx.handle, "glXGetProcAddressARB"); + if (!glXQueryExtension(_glfw.x11.display, &_glfw.glx.errorBase, &_glfw.glx.eventBase)) @@ -673,7 +676,7 @@ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_NATIVE_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return NULL; @@ -687,7 +690,7 @@ GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(None); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_NATIVE_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return None; diff --git a/third_party/penumbra/vendor/glfw/src/glx_context.h b/third_party/penumbra/vendor/glfw/src/glx_context.h index 12af20ef41d..df0233ebaf6 100644 --- a/third_party/penumbra/vendor/glfw/src/glx_context.h +++ b/third_party/penumbra/vendor/glfw/src/glx_context.h @@ -117,7 +117,6 @@ typedef struct _GLFWcontextGLX { GLXContext handle; GLXWindow window; - } _GLFWcontextGLX; // GLX-specific global data @@ -165,7 +164,6 @@ typedef struct _GLFWlibraryGLX GLFWbool EXT_create_context_es2_profile; GLFWbool ARB_create_context_no_error; GLFWbool ARB_context_flush_control; - } _GLFWlibraryGLX; GLFWbool _glfwInitGLX(void); diff --git a/third_party/penumbra/vendor/glfw/src/init.c b/third_party/penumbra/vendor/glfw/src/init.c index e44d0ca2263..cfdd512d8ab 100644 --- a/third_party/penumbra/vendor/glfw/src/init.c +++ b/third_party/penumbra/vendor/glfw/src/init.c @@ -28,7 +28,6 @@ //======================================================================== #include "internal.h" -#include "mappings.h" #include #include @@ -37,16 +36,15 @@ #include -// The global variables below comprise all mutable global data in GLFW -// -// Any other global variable is a bug +// NOTE: The global variables below comprise all mutable global data in GLFW +// Any other mutable global variable is a bug -// Global state shared between compilation units of GLFW +// This contains all mutable state shared between compilation units of GLFW // _GLFWlibrary _glfw = { GLFW_FALSE }; // These are outside of _glfw so they can be used before initialization and -// after termination +// after termination without special handling when _glfw is cleared to zero // static _GLFWerror _glfwMainThreadError; static GLFWerrorfun _glfwErrorCallback; @@ -113,6 +111,90 @@ static void terminate(void) ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// +// Encode a Unicode code point to a UTF-8 stream +// Based on cutef8 by Jeff Bezanson (Public Domain) +// +size_t _glfwEncodeUTF8(char* s, uint32_t codepoint) +{ + size_t count = 0; + + if (codepoint < 0x80) + s[count++] = (char) codepoint; + else if (codepoint < 0x800) + { + s[count++] = (codepoint >> 6) | 0xc0; + s[count++] = (codepoint & 0x3f) | 0x80; + } + else if (codepoint < 0x10000) + { + s[count++] = (codepoint >> 12) | 0xe0; + s[count++] = ((codepoint >> 6) & 0x3f) | 0x80; + s[count++] = (codepoint & 0x3f) | 0x80; + } + else if (codepoint < 0x110000) + { + s[count++] = (codepoint >> 18) | 0xf0; + s[count++] = ((codepoint >> 12) & 0x3f) | 0x80; + s[count++] = ((codepoint >> 6) & 0x3f) | 0x80; + s[count++] = (codepoint & 0x3f) | 0x80; + } + + return count; +} + +// Splits and translates a text/uri-list into separate file paths +// NOTE: This function destroys the provided string +// +char** _glfwParseUriList(char* text, int* count) +{ + const char* prefix = "file://"; + char** paths = NULL; + char* line; + + *count = 0; + + while ((line = strtok(text, "\r\n"))) + { + char* path; + + text = NULL; + + if (line[0] == '#') + continue; + + if (strncmp(line, prefix, strlen(prefix)) == 0) + { + line += strlen(prefix); + // TODO: Validate hostname + while (*line != '/') + line++; + } + + (*count)++; + + path = calloc(strlen(line) + 1, 1); + paths = realloc(paths, *count * sizeof(char*)); + paths[*count - 1] = path; + + while (*line) + { + if (line[0] == '%' && line[1] && line[2]) + { + const char digits[3] = { line[1], line[2], '\0' }; + *path = (char) strtol(digits, NULL, 16); + line += 2; + } + else + *path = *line; + + path++; + line++; + } + } + + return paths; +} + char* _glfw_strdup(const char* source) { const size_t length = strlen(source); @@ -121,6 +203,16 @@ char* _glfw_strdup(const char* source) return result; } +int _glfw_min(int a, int b) +{ + return a < b ? a : b; +} + +int _glfw_max(int a, int b) +{ + return a > b ? a : b; +} + float _glfw_fminf(float a, float b) { if (a != a) @@ -245,24 +337,12 @@ GLFWAPI int glfwInit(void) _glfwPlatformSetTls(&_glfw.errorSlot, &_glfwMainThreadError); + _glfwInitGamepadMappings(); + _glfw.initialized = GLFW_TRUE; _glfw.timer.offset = _glfwPlatformGetTimerValue(); glfwDefaultWindowHints(); - - { - int i; - - for (i = 0; _glfwDefaultMappings[i]; i++) - { - if (!glfwUpdateGamepadMappings(_glfwDefaultMappings[i])) - { - terminate(); - return GLFW_FALSE; - } - } - } - return GLFW_TRUE; } diff --git a/third_party/penumbra/vendor/glfw/src/input.c b/third_party/penumbra/vendor/glfw/src/input.c index 337d5cf0fc3..7ea1222c5e8 100644 --- a/third_party/penumbra/vendor/glfw/src/input.c +++ b/third_party/penumbra/vendor/glfw/src/input.c @@ -28,6 +28,7 @@ //======================================================================== #include "internal.h" +#include "mappings.h" #include #include @@ -85,25 +86,13 @@ static _GLFWmapping* findValidMapping(const _GLFWjoystick* js) for (i = 0; i <= GLFW_GAMEPAD_BUTTON_LAST; i++) { if (!isValidElementForJoystick(mapping->buttons + i, js)) - { - _glfwInputError(GLFW_INVALID_VALUE, - "Invalid button in gamepad mapping %s (%s)", - mapping->guid, - mapping->name); return NULL; - } } for (i = 0; i <= GLFW_GAMEPAD_AXIS_LAST; i++) { if (!isValidElementForJoystick(mapping->axes + i, js)) - { - _glfwInputError(GLFW_INVALID_VALUE, - "Invalid axis in gamepad mapping %s (%s)", - mapping->guid, - mapping->name); return NULL; - } } } @@ -289,7 +278,7 @@ void _glfwInputKey(_GLFWwindow* window, int key, int scancode, int action, int m // Notifies shared code of a Unicode codepoint input event // The 'plain' parameter determines whether to emit a regular character event // -void _glfwInputChar(_GLFWwindow* window, unsigned int codepoint, int mods, GLFWbool plain) +void _glfwInputChar(_GLFWwindow* window, uint32_t codepoint, int mods, GLFWbool plain) { if (codepoint < 32 || (codepoint > 126 && codepoint < 160)) return; @@ -371,6 +360,11 @@ void _glfwInputJoystick(_GLFWjoystick* js, int event) { const int jid = (int) (js - _glfw.joysticks); + if (event == GLFW_CONNECTED) + js->connected = GLFW_TRUE; + else if (event == GLFW_DISCONNECTED) + js->connected = GLFW_FALSE; + if (_glfw.callbacks.joystick) _glfw.callbacks.joystick(jid, event); } @@ -408,6 +402,29 @@ void _glfwInputJoystickHat(_GLFWjoystick* js, int hat, char value) ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// +// Adds the built-in set of gamepad mappings +// +void _glfwInitGamepadMappings(void) +{ + int jid; + size_t i; + const size_t count = sizeof(_glfwDefaultMappings) / sizeof(char*); + _glfw.mappings = calloc(count, sizeof(_GLFWmapping)); + + for (i = 0; i < count; i++) + { + if (parseMapping(&_glfw.mappings[_glfw.mappingCount], _glfwDefaultMappings[i])) + _glfw.mappingCount++; + } + + for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) + { + _GLFWjoystick* js = _glfw.joysticks + jid; + if (js->connected) + js->mapping = findValidMapping(js); + } +} + // Returns an available joystick object with arrays and name allocated // _GLFWjoystick* _glfwAllocJoystick(const char* name, @@ -421,7 +438,7 @@ _GLFWjoystick* _glfwAllocJoystick(const char* name, for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { - if (!_glfw.joysticks[jid].present) + if (!_glfw.joysticks[jid].allocated) break; } @@ -429,8 +446,7 @@ _GLFWjoystick* _glfwAllocJoystick(const char* name, return NULL; js = _glfw.joysticks + jid; - js->present = GLFW_TRUE; - js->name = _glfw_strdup(name); + js->allocated = GLFW_TRUE; js->axes = calloc(axisCount, sizeof(float)); js->buttons = calloc(buttonCount + (size_t) hatCount * 4, 1); js->hats = calloc(hatCount, 1); @@ -438,6 +454,7 @@ _GLFWjoystick* _glfwAllocJoystick(const char* name, js->buttonCount = buttonCount; js->hatCount = hatCount; + strncpy(js->name, name, sizeof(js->name) - 1); strncpy(js->guid, guid, sizeof(js->guid) - 1); js->mapping = findValidMapping(js); @@ -448,7 +465,6 @@ _GLFWjoystick* _glfwAllocJoystick(const char* name, // void _glfwFreeJoystick(_GLFWjoystick* js) { - free(js->name); free(js->axes); free(js->buttons); free(js->hats); @@ -732,9 +748,16 @@ GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot) _GLFWcursor* cursor; assert(image != NULL); + assert(image->pixels != NULL); _GLFW_REQUIRE_INIT_OR_RETURN(NULL); + if (image->width <= 0 || image->height <= 0) + { + _glfwInputError(GLFW_INVALID_VALUE, "Invalid image dimensions for cursor"); + return NULL; + } + cursor = calloc(1, sizeof(_GLFWcursor)); cursor->next = _glfw.cursorListHead; _glfw.cursorListHead = cursor; @@ -926,7 +949,7 @@ GLFWAPI int glfwJoystickPresent(int jid) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return GLFW_FALSE; return _glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE); @@ -951,7 +974,7 @@ GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_AXES)) @@ -980,7 +1003,7 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_BUTTONS)) @@ -1013,7 +1036,7 @@ GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_BUTTONS)) @@ -1039,7 +1062,7 @@ GLFWAPI const char* glfwGetJoystickName(int jid) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) @@ -1064,7 +1087,7 @@ GLFWAPI const char* glfwGetJoystickGUID(int jid) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) @@ -1083,7 +1106,7 @@ GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer) _GLFW_REQUIRE_INIT(); js = _glfw.joysticks + jid; - if (!js->present) + if (!js->allocated) return; js->userPointer = pointer; @@ -1099,7 +1122,7 @@ GLFWAPI void* glfwGetJoystickUserPointer(int jid) _GLFW_REQUIRE_INIT_OR_RETURN(NULL); js = _glfw.joysticks + jid; - if (!js->present) + if (!js->allocated) return NULL; return js->userPointer; @@ -1165,7 +1188,7 @@ GLFWAPI int glfwUpdateGamepadMappings(const char* string) for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { _GLFWjoystick* js = _glfw.joysticks + jid; - if (js->present) + if (js->connected) js->mapping = findValidMapping(js); } @@ -1188,7 +1211,7 @@ GLFWAPI int glfwJoystickIsGamepad(int jid) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return GLFW_FALSE; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) @@ -1213,7 +1236,7 @@ GLFWAPI const char* glfwGetGamepadName(int jid) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return NULL; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE)) @@ -1245,7 +1268,7 @@ GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state) } js = _glfw.joysticks + jid; - if (!js->present) + if (!js->connected) return GLFW_FALSE; if (!_glfwPlatformPollJoystick(js, _GLFW_POLL_ALL)) @@ -1354,3 +1377,4 @@ GLFWAPI uint64_t glfwGetTimerFrequency(void) _GLFW_REQUIRE_INIT_OR_RETURN(0); return _glfwPlatformGetTimerFrequency(); } + diff --git a/third_party/penumbra/vendor/glfw/src/internal.h b/third_party/penumbra/vendor/glfw/src/internal.h index 92b9497abbd..7734caa3a7b 100644 --- a/third_party/penumbra/vendor/glfw/src/internal.h +++ b/third_party/penumbra/vendor/glfw/src/internal.h @@ -342,9 +342,9 @@ struct _GLFWcontext int robustness; int release; - PFNGLGETSTRINGIPROC GetStringi; + PFNGLGETSTRINGIPROC GetStringi; PFNGLGETINTEGERVPROC GetIntegerv; - PFNGLGETSTRINGPROC GetString; + PFNGLGETSTRINGPROC GetString; _GLFWmakecontextcurrentfun makeCurrent; _GLFWswapbuffersfun swapBuffers; @@ -375,6 +375,7 @@ struct _GLFWwindow GLFWbool focusOnShow; GLFWbool shouldClose; void* userPointer; + GLFWbool doublebuffer; GLFWvidmode videoMode; _GLFWmonitor* monitor; _GLFWcursor* cursor; @@ -396,23 +397,23 @@ struct _GLFWwindow _GLFWcontext context; struct { - GLFWwindowposfun pos; - GLFWwindowsizefun size; - GLFWwindowclosefun close; - GLFWwindowrefreshfun refresh; - GLFWwindowfocusfun focus; - GLFWwindowiconifyfun iconify; - GLFWwindowmaximizefun maximize; - GLFWframebuffersizefun fbsize; + GLFWwindowposfun pos; + GLFWwindowsizefun size; + GLFWwindowclosefun close; + GLFWwindowrefreshfun refresh; + GLFWwindowfocusfun focus; + GLFWwindowiconifyfun iconify; + GLFWwindowmaximizefun maximize; + GLFWframebuffersizefun fbsize; GLFWwindowcontentscalefun scale; - GLFWmousebuttonfun mouseButton; - GLFWcursorposfun cursorPos; - GLFWcursorenterfun cursorEnter; - GLFWscrollfun scroll; - GLFWkeyfun key; - GLFWcharfun character; - GLFWcharmodsfun charmods; - GLFWdropfun drop; + GLFWmousebuttonfun mouseButton; + GLFWcursorposfun cursorPos; + GLFWcursorenterfun cursorEnter; + GLFWscrollfun scroll; + GLFWkeyfun key; + GLFWcharfun character; + GLFWcharmodsfun charmods; + GLFWdropfun drop; } callbacks; // This is defined in the window API's platform.h @@ -423,7 +424,7 @@ struct _GLFWwindow // struct _GLFWmonitor { - char* name; + char name[128]; void* userPointer; // Physical dimensions in millimeters. @@ -477,14 +478,15 @@ struct _GLFWmapping // struct _GLFWjoystick { - GLFWbool present; + GLFWbool allocated; + GLFWbool connected; float* axes; int axisCount; unsigned char* buttons; int buttonCount; unsigned char* hats; int hatCount; - char* name; + char name[128]; void* userPointer; char guid[33]; _GLFWmapping* mapping; @@ -717,7 +719,7 @@ void _glfwInputWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor); void _glfwInputKey(_GLFWwindow* window, int key, int scancode, int action, int mods); void _glfwInputChar(_GLFWwindow* window, - unsigned int codepoint, int mods, GLFWbool plain); + uint32_t codepoint, int mods, GLFWbool plain); void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset); void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods); void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos); @@ -760,6 +762,7 @@ void _glfwAllocGammaArrays(GLFWgammaramp* ramp, unsigned int size); void _glfwFreeGammaArrays(GLFWgammaramp* ramp); void _glfwSplitBPP(int bpp, int* red, int* green, int* blue); +void _glfwInitGamepadMappings(void); _GLFWjoystick* _glfwAllocJoystick(const char* name, const char* guid, int axisCount, @@ -772,7 +775,12 @@ GLFWbool _glfwInitVulkan(int mode); void _glfwTerminateVulkan(void); const char* _glfwGetVulkanResultString(VkResult result); +size_t _glfwEncodeUTF8(char* s, uint32_t codepoint); +char** _glfwParseUriList(char* text, int* count); + char* _glfw_strdup(const char* source); +int _glfw_min(int a, int b); +int _glfw_max(int a, int b); float _glfw_fminf(float a, float b); float _glfw_fmaxf(float a, float b); diff --git a/third_party/penumbra/vendor/glfw/src/linux_joystick.c b/third_party/penumbra/vendor/glfw/src/linux_joystick.c index 5a3b806c5ec..0894a726354 100644 --- a/third_party/penumbra/vendor/glfw/src/linux_joystick.c +++ b/third_party/penumbra/vendor/glfw/src/linux_joystick.c @@ -128,7 +128,7 @@ static GLFWbool openJoystickDevice(const char* path) { for (int jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { - if (!_glfw.joysticks[jid].present) + if (!_glfw.joysticks[jid].connected) continue; if (strcmp(_glfw.joysticks[jid].linjs.path, path) == 0) return GLFW_FALSE; @@ -245,9 +245,9 @@ static GLFWbool openJoystickDevice(const char* path) // static void closeJoystick(_GLFWjoystick* js) { + _glfwInputJoystick(js, GLFW_DISCONNECTED); close(js->linjs.fd); _glfwFreeJoystick(js); - _glfwInputJoystick(js, GLFW_DISCONNECTED); } // Lexically compare joysticks by name; used by qsort @@ -329,7 +329,7 @@ void _glfwTerminateJoysticksLinux(void) for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { _GLFWjoystick* js = _glfw.joysticks + jid; - if (js->present) + if (js->connected) closeJoystick(js); } @@ -424,7 +424,7 @@ int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode) handleAbsEvent(js, e.code, e.value); } - return js->present; + return js->connected; } void _glfwPlatformUpdateGamepadGUID(char* guid) diff --git a/third_party/penumbra/vendor/glfw/src/linux_joystick.h b/third_party/penumbra/vendor/glfw/src/linux_joystick.h index 2eabfa134e0..25a2a2eeb1b 100644 --- a/third_party/penumbra/vendor/glfw/src/linux_joystick.h +++ b/third_party/penumbra/vendor/glfw/src/linux_joystick.h @@ -32,6 +32,7 @@ #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE _GLFWlibraryLinux linjs #define _GLFW_PLATFORM_MAPPING_NAME "Linux" +#define GLFW_BUILD_LINUX_MAPPINGS // Linux-specific joystick data // diff --git a/third_party/penumbra/vendor/glfw/src/mappings.h b/third_party/penumbra/vendor/glfw/src/mappings.h index 606824a6257..11853a0ae10 100644 --- a/third_party/penumbra/vendor/glfw/src/mappings.h +++ b/third_party/penumbra/vendor/glfw/src/mappings.h @@ -31,7 +31,7 @@ // all available in SDL_GameControllerDB. Do not edit this file. Any gamepad // mappings not specific to GLFW should be submitted to SDL_GameControllerDB. // This file can be re-generated from mappings.h.in and the upstream -// gamecontrollerdb.txt with the GenerateMappings.cmake script. +// gamecontrollerdb.txt with the 'update_mappings' CMake target. //======================================================================== // All gamepad mappings not labeled GLFW are copied from the @@ -60,95 +60,262 @@ const char* _glfwDefaultMappings[] = { +#if defined(GLFW_BUILD_WIN32_MAPPINGS) "03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,", +"03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000951000000000000,8BitDo Dogbone Modkit,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,", +"03000000c82d000011ab000000000000,8BitDo F30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00005106000000000000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000151000000000000,8BitDo M30 ModKit,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00000451000000000000,8BitDo N30 Modkit,a:b1,b:b0,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,start:b11,platform:Windows,", +"03000000c82d00000190000000000000,8BitDo N30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00001590000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00006528000000000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", "03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", "03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00002867000000000000,8BitDo S30 Modkit,a:b0,b:b1,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", "03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00003028000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00004028000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00006228000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000351000000000000,8BitDo SN30 Modkit,a:b1,b:b0,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000121000000000000,8BitDo SN30 Pro for Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00000260000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000261000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00000031000000000000,8BitDo Wireless Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,", +"03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,", "03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,", -"030000008f0e00001200000000000000,Acme,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,", +"03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,", +"03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,", +"030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,", +"03000000c01100000355000011010000,ACRUX USB GAME PAD,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"030000006f0e00001413000000000000,Afterglow,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00000263000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001101000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001401000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000d62000001d57000000000000,Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,", +"03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows,", +"03000000ef0500000300000000000000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,", +"03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,", -"030000006b1400000055000000000000,bigben ps3padstreetnew,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000bc2000006321000000000000,BETOP CONTROLLER,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", +"03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", +"030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,", +"03000000120c0000210e000000000000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,", "03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", -"030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000005e0400008e02000000000000,Controller (XBOX 360 For Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"030000005e040000a102000000000000,Controller (Xbox 360 Wireless Receiver for Windows),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"030000005e040000ff02000000000000,Controller (Xbox One For Windows) - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"030000005e040000ea02000000000000,Controller (Xbox One For Windows) - Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", "03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,", "03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", +"03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000007d0400000840000000000000,Destroyer Tiltpad,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows,", "03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", -"030000004f04000023b3000000000000,Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000bd12000002e0000000000000,Dual USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,", +"030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,", +"030000006f0e00003001000000000000,EA SPORTS PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,", +"03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,", +"03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,", "03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000006f0e00008401000000000000,Faceoff Deluxe+ Audio Wired Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00008001000000000000,Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,", "030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,", "030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,", +"03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,", "03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,", +"03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00000d31000000000000,GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", "03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", -"03000000451300000010000000000000,Generic USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000009b2800003200000000000000,GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,", +"030000009b2800006000000000000000,GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,", +"030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,", +"03000000300f00000b01000000000000,GGE909 Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"03000000f0250000c283000000000000,Gioteck,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"030000007d0400000540000000000000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000001008000001e1000000000000,Havit HV-G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,", "03000000d81400000862000000000000,HitBox Edition Cthulhu+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", +"03000000632500002605000000000000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005f00000000000000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005e00000000000000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00001600000000007803,HORI Real Arcade Pro EX-SE (Xbox 360),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,", +"030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00005500000000000000,Horipad 4 FPS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00004d00000000000000,HORIPAD3 A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000250900000017000000000000,HRAP2 on PS/SS/N64 Joypad to USB BOX,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,", "030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows,", "03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000830500006020000000000000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Windows,", -"03000000b50700001403000000000000,IMPACT BLACK,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", -"030000006f0e00002401000000000000,INJUSTICE FightStick for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", +"030000006f0e00002401000000000000,INJUSTICE FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"03000000ac0500002c02000000000000,IPEGA,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", "03000000491900000204000000000000,Ipega PG-9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000491900000304000000000000,Ipega PG-9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,", +"030000006e0500000a20000000000000,JC-DUX60 ELECOM MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,", +"030000006e0500000520000000000000,JC-P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,", +"030000006e0500000320000000000000,JC-U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,", +"030000006e0500000720000000000000,JC-W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,", +"030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,", +"030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,", +"030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,", +"030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,", +"03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000bd12000003c0000000000000,JY-P70UR,a:b1,b:b0,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b4,x:b3,y:b2,platform:Windows,", +"03000000242f00002d00000000000000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000242f00008a00000000000000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,", +"03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", +"030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006d040000d2ca000000000000,Logitech Cordless Precision,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,", "030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006d0400001ac2000000000000,Logitech Precision Gamepad,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows,", +"03000000380700006652000000000000,Mad Catz C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700005082000000000000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"03000000380700008433000000000000,Mad Catz FightStick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", -"03000000380700008483000000000000,Mad Catz FightStick TE S+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b6,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000380700008433000000000000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000380700008483000000000000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008134000000000000,Mad Catz FightStick TE2+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008184000000000000,Mad Catz FightStick TE2+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000380700006252000000000000,Mad Catz Micro C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700008532000000000000,Madcatz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700003888000000000000,Madcatz Arcade Fightstick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000380700001888000000000000,MadCatz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"030000008305000031b0000000000000,MaxfireBlaze3,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,", +"030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", "03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows,", "03000000790000004418000000000000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000790000004318000000000000,Mayflash GameCube Controller Adapter,a:b1,b:b2,back:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b0,leftshoulder:b4,leftstick:b0,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", +"03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,", +"0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00001030000000000000,Mayflash USB Adapter for original Sega Saturn controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows,", "0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,", "03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", -"030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Windows,", +"03000000790000002418000000000000,Mega Drive,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows,", +"03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000c62400002a89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c62400002b89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c62400001a89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000c62400001b89000000000000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", +"03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", +"030000006b140000010c000000000000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000921200004b46000000000000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,", +"03000000790000004518000000000000,NEXILUX GAMECUBE Controller Adapter,platform:Windows,a:b1,b:b0,x:b2,y:b3,start:b9,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,", +"030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows,", +"03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", "03000000bd12000015d0000000000000,Nintendo Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,", "030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", -"030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,leftx:h0.6,lefty:h0.12,rightshoulder:b5,rightstick:a2,righttrigger:b7,rightx:h0.9,righty:h0.4,start:b9,x:b2,y:b3,platform:Windows,", +"030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,", +"03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,", +"030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,", +"03000000d620000013a7000000000000,NSW wired controller,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,", +"03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,", +"03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,", "03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,", "03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00000901000000000000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,", +"030000004c0500003713000000000000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", -"030000008f0e00007530000000000000,PS (R) Gamepad,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,", "03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", -"03000000100800000100000000000000,PS1 USB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", -"03000000100800000300000000000000,PS2 USB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", +"03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows,", +"030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,", +"030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows,", +"03000000632500007505000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000888800000803000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,", -"030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,", -"03000000250900000500000000000000,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,", +"030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000003807000056a8000000000000,PS3 RF pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000100000008200000000000000,PS360+ v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000ff000000cb01000000000000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,", "03000000300f00000011000000000000,QanBa Arcade JoyStick 1008,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b10,x:b0,y:b3,platform:Windows,", "03000000300f00001611000000000000,QanBa Arcade JoyStick 4018,a:b1,b:b2,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,", "03000000222c00000020000000000000,QANBA DRONE ARCADE JOYSTICK,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,platform:Windows,", @@ -157,320 +324,678 @@ const char* _glfwDefaultMappings[] = "03000000222c00000223000000000000,Qanba Obsidian Arcade Joystick PS3 Mode,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000222c00000023000000000000,Qanba Obsidian Arcade Joystick PS4 Mode,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"03000000321500000204000000000000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000321500000104000000000000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000321500000011000000000000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", "030000000d0f00001100000000000000,REAL ARCADE PRO.3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00008b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00007000000000000000,REAL ARCADE PRO.4 VLX,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00002200000000000000,REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", -"030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000000d0f00005b00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000000d0f00005c00000000000000,Real Arcade Pro.V4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000790000001100000000000000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,", +"03000000bd12000013d0000000000000,Retrolink USB SEGA Saturn Classic,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,", "0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,", "0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,", "030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", -"030000006f0e00001e01000000000000,Rock Candy Gamepad for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006b140000020d000000000000,Revolution Pro Controller 2(1/2),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000006b140000130d000000000000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "030000004f04000003d0000000000000,run'n'drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", -"03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,x:b0,y:b1,platform:Windows,", +"03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows,", +"03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows,", "03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", "03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,", "03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,", -"03000000300f00001101000000000000,saitek rumble pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", +"03000000a30600002106000000000000,Saitek PS1000,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", +"03000000a306000020f6000000000000,Saitek PS2700,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", +"03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", +"03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,", "0300000000050000289b000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,", "030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,", +"03000000a30c00002500000000000000,Sega Genesis Mini 3B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows,", +"03000000a30c00002400000000000000,Sega Mega Drive Mini 6B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,", "03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,", -"030000008f0e00000800000000000000,SpeedLink Strike FX Wireless,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,", +"03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000381000001214000000000000,SteelSeries Free,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,", +"03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,platform:Windows,", +"03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", "03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,platform:Windows,", +"03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000457500002211000000000000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000004f04000007d0000000000000,T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000004f0400000ab1000000000000,T.16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,", "03000000fa1900000706000000000000,Team 5,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000b50700001203000000000000,Techmobility X6-38V,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,", -"030000004f04000015b3000000000000,Thrustmaster Dual Analog 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,", +"030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,", +"030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"030000004f0400000ed0000000000000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", "030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows,", "030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,", "03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,", +"03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows,", "03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", -"03000000380700006652000000000000,UnKnown,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,", +"030000006e0500001320000000000000,U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000300f00000701000000000000,USB 4-Axis 12-Button Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", +"03000000341a00002308000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"030000005509000000b4000000000000,USB gamepad,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,platform:Windows,", +"030000006b1400000203000000000000,USB gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000790000000a00000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,", +"03000000f0250000c183000000000000,USB gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", +"03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,", "03000000632500002305000000000000,USB Vibration Joystick (BM),a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", +"03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,", "03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00000302000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"030000006f0e00000702000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,", +"0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows,", +"030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", +"03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", "03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,", +"03000000ac0500005b05000000000000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,", "03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,", "03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,", -"03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000790000004f18000000000000,ZD-T Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,", +"03000000120c0000101e000000000000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,", +"78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757402000000000000000000,XInput Wheel (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757403000000000000000000,XInput Arcade Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757404000000000000000000,XInput Flight Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +"78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", +#endif // GLFW_BUILD_WIN32_MAPPINGS + +#if defined(GLFW_BUILD_COCOA_MAPPINGS) +"030000008f0e00000300000009010000,2In1 USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000c82d00005106000000010000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"030000003512000012ab000001000000,8BitDo NES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000190000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00001290000001000000,8BitDo SN30 Gamepad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00004028000000010000,8Bitdo SN30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,dpup:-a1,dpdown:+a1,dpleft:-a0,dpright:+a0,platform:Mac OS X,", +"03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000260000001000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00000031000001000000,8BitDo Wireless Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", +"03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X,", "03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", +"03000000ef0500000300000000020000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Mac OS X,", +"03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,", +"03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,", +"03000000c62400001a89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b6,leftstick:b15,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:a4,rightx:a2,righty:a3,start:b13,x:b3,y:b4,platform:Mac OS X,", +"03000000c62400001b89000000010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000120c0000200e000000010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000120c0000210e000000010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,", "03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X,", "03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", +"03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000006f0e00000102000000000000,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000007d0400000540000001010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000280400000140000000020000,Gravis Gamepad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000008f0e00000300000007010000,GreenAsia Inc. USB Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X,", +"030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005f00000000010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005e00000000010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005f00000000000000,HORI Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00005e00000000000000,HORI Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006e00000000010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006600000000010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000000d0f00006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000000d0f0000ee00000000010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008f0e00001330000011010000,HuiJia SNES Controller,a:b4,b:b2,back:b16,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b12,rightshoulder:b14,start:b18,x:b6,y:b0,platform:Mac OS X,", "03000000830500006020000000010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,", "03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,", +"030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,", +"03000000242f00002d00000007010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000006d04000018c2000000010000,Logitech RumblePad 2 USB,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000380700008483000000010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,", "03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X,", +"0300000079000000d218000026010000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,", +"03000000790000000018000000010000,Mayflash Wii U Pro Controller Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,", "03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,", "03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", -"030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Mac OS X,", +"030000005e0400002700000001010000,Microsoft SideWinder Plug & Play Game Pad,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,leftx:a0,lefty:a1,righttrigger:b5,x:b2,y:b3,platform:Mac OS X,", +"03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,", +"03000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000c62400002b89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000632500007505000000020000,NEOGEO mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,", +"03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X,", +"030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000d620000011a7000000020000,Nintendo Switch Core (Plus) Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000d620000011a7000010050000,Nintendo Switch PowerA Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", +"030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,", +"03000000550900001472000025050000,NVIDIA Controller v01.04,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,", +"030000006f0e00000901000002010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008f0e00000300000000000000,Piranha xtreme,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,", -"030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,", +"030000004c050000da0c000000010000,Playstation Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", +"030000004c0500003713000000010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000100800000300000006010000,PS2 Adapter,a:b2,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,", +"030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,", "030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", -"030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"03000000321500000204000000010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000321500000011000000010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,", +"030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,", "0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000c6240000fefa000000000000,Rock Candy Gamepad for PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Mac OS X,", "03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X,", "03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,", "030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,", +"0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X,", +"030000004c050000e60c000000010000,Sony DualSense,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", -"030000005e0400008e02000001000000,Steam Virtual GamePad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,", +"030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X,", "03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,", "03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,", +"050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,", "03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,", "03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,", +"03000000457500002211000000010000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X,", +"030000004f0400000ed0000000020000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", "030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X,", -"03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000bd12000015d0000000000000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", +"03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,", "03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,", +"030000006f0e00000302000025040000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", +"030000006f0e00000702000003060000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,", +"03000000791d00000103000009010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,", "050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,", "050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,", "030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000006f0e00000104000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", -"030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000005e040000050b000003090000,Xbox Elite Wireless Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"03000000c62400003a54000000000000,Xbox One PowerA Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", +"030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", "030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,", -"030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", -"030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", "030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,", +"030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,", +"030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,", "03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,", "03000000120c0000100e000000010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", -"05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"03000000120c0000101e000000010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,", +#endif // GLFW_BUILD_COCOA_MAPPINGS + +#if defined(GLFW_BUILD_LINUX_MAPPINGS) +"03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,", +"03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000310000011010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,", +"05000000c82d00008010000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b9,righttrigger:b8,start:b11,x:b3,y:b4,platform:Linux,", "03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", "03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", -"05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", +"030000003512000012ab000010010000,8Bitdo SFC30 GamePad,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux,", "05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", -"05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,", +"05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00001290000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000260000011010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"05000000202800000900000000010000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", +"03000000c82d00000031000011010000,8BitDo Wireless Adapter (DInput),a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e0400008e02000020010000,8BitDo Wireless Adapter (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,", +"05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,", +"050000005e040000e002000030110000,8BitDo Zero 2 (XInput),a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,", "05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,", -"030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,", +"03000000c01100000355000011010000,ACRUX USB GAME PAD,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00003901000013020000,Afterglow Prismatic Wired Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000007c1800000006000010010000,Alienware Dual Compatible Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", +"05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,", +"05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", +"03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", +"03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", "05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,", +"05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,", +"03000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,", +"05000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,", +"03000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,", +"05000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,", +"03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,", +"03000000ef0500000300000000010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,", +"03000000c62400001b89000011010000,BDA MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000c21100000791000011010000,Be1 GC101 Controller 1.03 mode,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000c31100000791000011010000,Be1 GC101 GAMEPAD 1.03 mode,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e0400008e02000003030000,Be1 GC101 Xbox 360 Controller mode,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"05000000bc2000000055000001000000,BETOP AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", "03000000666600006706000000010000,boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,", +"03000000120c0000200e000011010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000120c0000210e000011010000,Brook Mars,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"03000000ffff0000ffff000000010000,Chinese-made Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", "03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,", "03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,", "03000000a306000022f6000011010000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", "03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,", "03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,", +"030000004f04000004b3000010010000,Dual Power 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", +"03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:a0,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:a3,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"030000006f0e00001f01000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000008f0e00000800000010010000,Gasia Co. Ltd PS(R) Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000007d0400000540000000010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "030000008f0e00000610000000010000,GreenAsia Electronics 4Axes 12Keys GamePad ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,", "030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", -"030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,", "03000000c9110000f055000011010000,HJC Game GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"03000000632500002605000010010000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", "030000000d0f00000d00000000010000,hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftx:b4,lefty:b5,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,", "030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000000d0f0000c100000011010000,HORI CO. LTD. HORIPAD S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000000d0f00008500000010010000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000000d0f00008600000002010000,Hori Fighting Commander,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000000d0f0000aa00000011010000,HORI Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000000d0f0000d800000072056800,HORI Real Arcade Pro S,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", +"030000000d0f00001600000000010000,Hori Real Arcade Pro.EX-SE (Xbox 360),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,", "030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000000d0f0000ee00000011010000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux,", +"03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000830500006020000010010000,iBuffalo SNES Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,", "050000006964726f69643a636f6e0000,idroid:con,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000b50700001503000010010000,impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,", +"03000000d80400008200000003000000,IMS PCU#0 Gamepad Interface,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,", "03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,", +"0500000049190000020400001b010000,Ipega PG-9069 - Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000632500007505000011010000,Ipega PG-9099 - Bluetooth Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,", "03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,", +"03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", +"030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,", +"050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,", +"030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,", +"050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,", +"03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000242f00002d00000011010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000242f00008a00000011010000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,", "030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006d040000d1ca000000000000,Logitech ChillStream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", -"030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006d0400001ec2000019200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"030000006d04000015c2000010010000,Logitech Logitech Extreme 3D,a:b0,b:b4,back:b6,guide:b8,leftshoulder:b9,leftstick:h0.8,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:h0.2,start:b7,x:b2,y:b5,platform:Linux,", +"030000006d0400000ac2000010010000,Logitech Inc. WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,", "030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux,", +"050000004d4f435554452d3035305800,M54-PC,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", "05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700005082000011010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700008034000011010000,Mad Catz fightstick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700008084000011010000,Mad Catz fightstick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", -"03000000380700008433000011010000,Mad Catz FightStick TE S+ PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", -"03000000380700008483000011010000,Mad Catz FightStick TE S+ PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000380700008433000011010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000380700008483000011010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller (SFIV),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", -"03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", +"03000000242f0000f700000001010000,Magic-S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", +"03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", +"03000000790000004318000010010000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,", +"03000000242f00007300000011010000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,", +"0300000079000000d218000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"0300000025090000e803000001010000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,", "03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", +"030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,", "030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000062230000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"050000005e040000050b000003090000,Microsoft X-Box One Elite 2 pad,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e040000e302000003020000,Microsoft X-Box One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000d102000001010000,Microsoft X-Box One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000d102000003020000,Microsoft X-Box One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", "030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", +"030000005e040000000b000008040000,Microsoft Xbox One Elite 2 pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000ea02000008040000,Microsoft Xbox One S pad - Wired,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c62400001a53000000010000,Mini PE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,", +"05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", "05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", -"030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,platform:Linux,", +"05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,", +"03000000c62400002b89000011010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"05000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"05000000c62400001a89000000010000,MOGA XP5-X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,", +"030000006b140000010c000010010000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000790000004518000010010000,NEXILUX GAMECUBE Controller Adapter,a:b1,b:b0,x:b2,y:b3,start:b9,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,platform:Linux,", +"030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux,", +"060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,", +"060000007e0500000820000000000000,Nintendo Combined Joy-Cons (joycond),a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,", +"030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux,", +"03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux,", +"050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b9,b:b8,back:b5,leftshoulder:b2,leftstick:b6,leftx:a1,lefty:a0~,rightshoulder:b4,start:b0,x:b7,y:b10,platform:Linux,", +"030000007e0500000920000011810000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,", "050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"050000007e0500000920000001800000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,", +"050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0~,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,", +"050000007e0500001720000001000000,Nintendo Switch SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,", "050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,", "05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,", "03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,", +"05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,", "03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"19000000010000000100000001010000,odroidgo2_joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,", +"19000000010000000200000011000000,odroidgo2_joypad_v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,", "030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,", +"03000000c0160000dc27000001010000,OnyxSoft Dual JoyDivision,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:Linux,", "05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,", "05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,", +"03000000830500005020000010010000,Padix Co. Ltd. Rockfire PSX/USB Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux,", +"03000000790000001c18000011010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000006f0e0000b802000001010000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e0000b802000013020000,PDP AFTERGLOW Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00008001000011010000,PDP CO. LTD. Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00008701000011010000,PDP Rock Candy Wired Controller for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000006f0e00000901000011010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e0000a802000023020000,PDP Wired Controller for Xbox One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"030000006f0e00008501000011010000,PDP Wired Fight Pad Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"0500000049190000030400001b010000,PG-9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"05000000491900000204000000000000,PG-9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000004c050000da0c000011010000,Playstation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", +"030000004c0500003713000011010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", +"03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000d62000000228000001010000,PowerA Wired Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c62400001a58000001010000,PowerA Xbox One Cabled,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c62400001a54000001010000,PowerA Xbox One Mini Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,", -"030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", -"050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", -"030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", -"050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", +"030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", -"060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", -"05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", -"050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"050000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", +"050000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", +"050000004c0500006802000000800000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"050000004c0500006802000000810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", +"060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,", "030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", -"050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", -"050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", -"050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004c050000cc09000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", -"030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "030000004c050000cc09000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", -"030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000c01100000140000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"050000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"050000004c050000c405000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000ff000000cb01000010010000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,", "03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,", +"030000009b2800004200000001010000,Raphnet Technologies Dual NES to USB v2.0,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux,", +"030000009b2800003200000001010000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,", +"030000009b2800006000000001010000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,", "030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,", "030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000321500000204000011010000,Razer Panthera (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"03000000321500000104000011010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000321500000810000011010000,Razer Panthera Evo Arcade Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000321500000011000011010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", "0300000032150000030a000001010000,Razer Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000790000001100000010010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,", -"0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", -"0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", +"0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux,", +"0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", "030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", -"030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", -"030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", -"03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,", +"03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux,", +"03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux,", +"03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux,", "03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,", +"03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,", "03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,", "03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,", "03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", -"03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,a:b12,b:b10,back:b4,dpdown:b2,dpleft:b3,dpright:b1,dpup:b0,leftshoulder:b9,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b8,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b5,x:b13,y:b11,platform:Linux,", +"03000000a306000020f6000011010000,Saitek PS2700 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,", +"03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux,", "03000000f025000021c1000010010000,ShanWan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000632500007505000010010000,SHANWAN PS3/PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000bc2000000055000010010000,ShanWan PS3/PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005f140000c501000010010000,SHANWAN Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"03000000341a00000908000010010000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"030000004c050000e60c000011810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", +"050000004c050000e60c000000810000,Sony DualSense ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,", "03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,", "030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", -"05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", -"03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", -"05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", -"03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,", +"03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,", +"03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", +"05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,", "03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000381000003014000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"03000000ad1b000038f0000090040000,Street Fighter IV FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000003b07000004a1000000010000,Suncom SFX Plus for USB,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux,", "03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,", +"0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,", +"03000000457500002211000010010000,SZMY-POWER CO. LTD. GAMEPAD,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"030000008f0e00000d31000010010000,SZMY-POWER CO. LTD. GAMEPAD 3 TURBO,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000008f0e00001431000010010000,SZMY-POWER CO. LTD. PS3 gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", "030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"030000004f0400000ed0000011010000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +"03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux,", +"030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux,", "030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux,", +"030000004f04000026b3000002040000,Thrustmaster Gamepad GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c6240000025b000002020000,Thrustmaster GPX Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", "030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000004f04000007d0000000010000,Thrustmaster T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,", +"030000004f04000012b3000010010000,Thrustmaster vibrating gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,", "03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,", "03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,", +"030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", "03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,", +"03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,", "03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,", +"030000006f0e00000302000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", +"030000006f0e00000702000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,", "05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,", -"030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"03000000791d00000103000010010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", +"050000000d0f0000f600000001000000,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", -"030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "030000005e040000a102000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000a102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,", +"030000005e040000a102000014010000,Xbox 360 Wireless Receiver (XBOX),a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e040000ea02000000000000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e040000ea02000001030000,Xbox One Wireless Controller (Model 1708),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,", +"030000005e040000120b000005050000,XBox Series pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", +"030000005e0400008e02000000010000,xbox360 Wireless EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,", "03000000450c00002043000010010000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,", +"03000000ac0500005b05000010010000,Xiaoji Gamesir-G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,", "05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,", "03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,", "03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", -"64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,", -"61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", -"4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", -"37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,", -"35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,", -"05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,", -"5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,", -"34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,", -"4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:iOS,", -"4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS,", -"05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,", - -"78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757402000000000000000000,XInput Wheel (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757403000000000000000000,XInput Arcade Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757404000000000000000000,XInput Flight Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -"78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -NULL +"03000000120c0000101e000011010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,", +#endif // GLFW_BUILD_LINUX_MAPPINGS }; diff --git a/third_party/penumbra/vendor/glfw/src/mappings.h.in b/third_party/penumbra/vendor/glfw/src/mappings.h.in index 72460b0d941..26b544bd391 100644 --- a/third_party/penumbra/vendor/glfw/src/mappings.h.in +++ b/third_party/penumbra/vendor/glfw/src/mappings.h.in @@ -31,7 +31,7 @@ // all available in SDL_GameControllerDB. Do not edit this file. Any gamepad // mappings not specific to GLFW should be submitted to SDL_GameControllerDB. // This file can be re-generated from mappings.h.in and the upstream -// gamecontrollerdb.txt with the GenerateMappings.cmake script. +// gamecontrollerdb.txt with the 'update_mappings' CMake target. //======================================================================== // All gamepad mappings not labeled GLFW are copied from the @@ -60,7 +60,8 @@ const char* _glfwDefaultMappings[] = { -@GLFW_GAMEPAD_MAPPINGS@ +#if defined(GLFW_BUILD_WIN32_MAPPINGS) +@GLFW_WIN32_MAPPINGS@ "78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757402000000000000000000,XInput Wheel (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757403000000000000000000,XInput Arcade Stick (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", @@ -68,6 +69,14 @@ const char* _glfwDefaultMappings[] = "78696e70757405000000000000000000,XInput Dance Pad (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757406000000000000000000,XInput Guitar (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", "78696e70757408000000000000000000,XInput Drum Kit (GLFW),platform:Windows,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,", -NULL +#endif // GLFW_BUILD_WIN32_MAPPINGS + +#if defined(GLFW_BUILD_COCOA_MAPPINGS) +@GLFW_COCOA_MAPPINGS@ +#endif // GLFW_BUILD_COCOA_MAPPINGS + +#if defined(GLFW_BUILD_LINUX_MAPPINGS) +@GLFW_LINUX_MAPPINGS@ +#endif // GLFW_BUILD_LINUX_MAPPINGS }; diff --git a/third_party/penumbra/vendor/glfw/src/monitor.c b/third_party/penumbra/vendor/glfw/src/monitor.c index c6bcfd395a9..2601d11b330 100644 --- a/third_party/penumbra/vendor/glfw/src/monitor.c +++ b/third_party/penumbra/vendor/glfw/src/monitor.c @@ -170,8 +170,7 @@ _GLFWmonitor* _glfwAllocMonitor(const char* name, int widthMM, int heightMM) monitor->widthMM = widthMM; monitor->heightMM = heightMM; - if (name) - monitor->name = _glfw_strdup(name); + strncpy(monitor->name, name, sizeof(monitor->name) - 1); return monitor; } @@ -189,7 +188,6 @@ void _glfwFreeMonitor(_GLFWmonitor* monitor) _glfwFreeGammaArrays(&monitor->currentRamp); free(monitor->modes); - free(monitor->name); free(monitor); } @@ -523,6 +521,8 @@ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* handle, const GLFWgammaramp* ramp) assert(ramp->green != NULL); assert(ramp->blue != NULL); + _GLFW_REQUIRE_INIT(); + if (ramp->size <= 0) { _glfwInputError(GLFW_INVALID_VALUE, @@ -531,8 +531,6 @@ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* handle, const GLFWgammaramp* ramp) return; } - _GLFW_REQUIRE_INIT(); - if (!monitor->originalRamp.size) { if (!_glfwPlatformGetGammaRamp(monitor, &monitor->originalRamp)) diff --git a/third_party/penumbra/vendor/glfw/src/nsgl_context.h b/third_party/penumbra/vendor/glfw/src/nsgl_context.h index a772b51117b..010ce4dc8cf 100644 --- a/third_party/penumbra/vendor/glfw/src/nsgl_context.h +++ b/third_party/penumbra/vendor/glfw/src/nsgl_context.h @@ -25,8 +25,10 @@ //======================================================================== // NOTE: Many Cocoa enum values have been renamed and we need to build across -// SDK versions where one is unavailable or the other deprecated -// We use the newer names in code and these macros to handle compatibility +// SDK versions where one is unavailable or deprecated. +// We use the newer names in code and replace them with the older names if +// the base SDK does not provide the newer names. + #if MAC_OS_X_VERSION_MAX_ALLOWED < 101400 #define NSOpenGLContextParameterSwapInterval NSOpenGLCPSwapInterval #define NSOpenGLContextParameterSurfaceOpacity NSOpenGLCPSurfaceOpacity @@ -44,7 +46,6 @@ typedef struct _GLFWcontextNSGL { id pixelFormat; id object; - } _GLFWcontextNSGL; // NSGL-specific global data @@ -53,7 +54,6 @@ typedef struct _GLFWlibraryNSGL { // dlopen handle for OpenGL.framework (for glfwGetProcAddress) CFBundleRef framework; - } _GLFWlibraryNSGL; diff --git a/third_party/penumbra/vendor/glfw/src/nsgl_context.m b/third_party/penumbra/vendor/glfw/src/nsgl_context.m index 3bcfafcc7a0..78d688c496a 100644 --- a/third_party/penumbra/vendor/glfw/src/nsgl_context.m +++ b/third_party/penumbra/vendor/glfw/src/nsgl_context.m @@ -51,7 +51,7 @@ static void swapBuffersNSGL(_GLFWwindow* window) // HACK: Simulate vsync with usleep as NSGL swap interval does not apply to // windows with a non-visible occlusion state - if (!([window->ns.object occlusionState] & NSWindowOcclusionStateVisible)) + if (window->ns.occluded) { int interval = 0; [window->context.nsgl.object getValues:&interval @@ -365,7 +365,7 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(nil); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_NATIVE_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return nil; diff --git a/third_party/penumbra/vendor/glfw/src/null_window.c b/third_party/penumbra/vendor/glfw/src/null_window.c index 045c76a200d..e61c2bdd372 100644 --- a/third_party/penumbra/vendor/glfw/src/null_window.c +++ b/third_party/penumbra/vendor/glfw/src/null_window.c @@ -67,6 +67,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwInputError(GLFW_API_UNAVAILABLE, "Null: EGL not available"); return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } return GLFW_TRUE; diff --git a/third_party/penumbra/vendor/glfw/src/osmesa_context.c b/third_party/penumbra/vendor/glfw/src/osmesa_context.c index c2fa49d4bcd..4072728bc61 100644 --- a/third_party/penumbra/vendor/glfw/src/osmesa_context.c +++ b/third_party/penumbra/vendor/glfw/src/osmesa_context.c @@ -124,6 +124,8 @@ GLFWbool _glfwInitOSMesa(void) "libOSMesa.8.dylib", #elif defined(__CYGWIN__) "libOSMesa-8.so", +#elif defined(__OpenBSD__) || defined(__NetBSD__) + "libOSMesa.so", #else "libOSMesa.so.8", "libOSMesa.so.6", @@ -302,6 +304,12 @@ GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* handle, int* width, _GLFW_REQUIRE_INIT_OR_RETURN(GLFW_FALSE); + if (window->context.source != GLFW_OSMESA_CONTEXT_API) + { + _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); + return GLFW_FALSE; + } + if (!OSMesaGetColorBuffer(window->context.osmesa.handle, &mesaWidth, &mesaHeight, &mesaFormat, &mesaBuffer)) @@ -335,6 +343,12 @@ GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* handle, _GLFW_REQUIRE_INIT_OR_RETURN(GLFW_FALSE); + if (window->context.source != GLFW_OSMESA_CONTEXT_API) + { + _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); + return GLFW_FALSE; + } + if (!OSMesaGetDepthBuffer(window->context.osmesa.handle, &mesaWidth, &mesaHeight, &mesaBytes, &mesaBuffer)) @@ -361,7 +375,7 @@ GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_OSMESA_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return NULL; diff --git a/third_party/penumbra/vendor/glfw/src/osmesa_context.h b/third_party/penumbra/vendor/glfw/src/osmesa_context.h index 2413188da53..6462637f4c4 100644 --- a/third_party/penumbra/vendor/glfw/src/osmesa_context.h +++ b/third_party/penumbra/vendor/glfw/src/osmesa_context.h @@ -66,7 +66,6 @@ typedef struct _GLFWcontextOSMesa int width; int height; void* buffer; - } _GLFWcontextOSMesa; // OSMesa-specific global data @@ -82,7 +81,6 @@ typedef struct _GLFWlibraryOSMesa PFN_OSMesaGetColorBuffer GetColorBuffer; PFN_OSMesaGetDepthBuffer GetDepthBuffer; PFN_OSMesaGetProcAddress GetProcAddress; - } _GLFWlibraryOSMesa; diff --git a/third_party/penumbra/vendor/glfw/src/posix_thread.h b/third_party/penumbra/vendor/glfw/src/posix_thread.h index 24452ba060d..1c6a5c4390f 100644 --- a/third_party/penumbra/vendor/glfw/src/posix_thread.h +++ b/third_party/penumbra/vendor/glfw/src/posix_thread.h @@ -37,7 +37,6 @@ typedef struct _GLFWtlsPOSIX { GLFWbool allocated; pthread_key_t key; - } _GLFWtlsPOSIX; // POSIX-specific mutex data @@ -46,6 +45,5 @@ typedef struct _GLFWmutexPOSIX { GLFWbool allocated; pthread_mutex_t handle; - } _GLFWmutexPOSIX; diff --git a/third_party/penumbra/vendor/glfw/src/posix_time.h b/third_party/penumbra/vendor/glfw/src/posix_time.h index 08cf4fcfd60..911399eff76 100644 --- a/third_party/penumbra/vendor/glfw/src/posix_time.h +++ b/third_party/penumbra/vendor/glfw/src/posix_time.h @@ -36,7 +36,6 @@ typedef struct _GLFWtimerPOSIX { GLFWbool monotonic; uint64_t frequency; - } _GLFWtimerPOSIX; diff --git a/third_party/penumbra/vendor/glfw/src/vulkan.c b/third_party/penumbra/vendor/glfw/src/vulkan.c index 22c54e4adcc..1b96579cad7 100644 --- a/third_party/penumbra/vendor/glfw/src/vulkan.c +++ b/third_party/penumbra/vendor/glfw/src/vulkan.c @@ -59,6 +59,8 @@ GLFWbool _glfwInitVulkan(int mode) _glfw.vk.handle = _glfw_dlopen("libvulkan.1.dylib"); if (!_glfw.vk.handle) _glfw.vk.handle = _glfwLoadLocalVulkanLoaderNS(); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.vk.handle = _glfw_dlopen("libvulkan.so"); #else _glfw.vk.handle = _glfw_dlopen("libvulkan.so.1"); #endif diff --git a/third_party/penumbra/vendor/glfw/src/wgl_context.c b/third_party/penumbra/vendor/glfw/src/wgl_context.c index b7d1c4d4691..72ad11dedb0 100644 --- a/third_party/penumbra/vendor/glfw/src/wgl_context.c +++ b/third_party/penumbra/vendor/glfw/src/wgl_context.c @@ -165,6 +165,9 @@ static int choosePixelFormat(_GLFWwindow* window, if (findAttribValue(WGL_ACCELERATION_ARB) == WGL_NO_ACCELERATION_ARB) continue; + if (findAttribValue(WGL_DOUBLE_BUFFER_ARB) != fbconfig->doublebuffer) + continue; + u->redBits = findAttribValue(WGL_RED_BITS_ARB); u->greenBits = findAttribValue(WGL_GREEN_BITS_ARB); u->blueBits = findAttribValue(WGL_BLUE_BITS_ARB); @@ -182,8 +185,6 @@ static int choosePixelFormat(_GLFWwindow* window, if (findAttribValue(WGL_STEREO_ARB)) u->stereo = GLFW_TRUE; - if (findAttribValue(WGL_DOUBLE_BUFFER_ARB)) - u->doublebuffer = GLFW_TRUE; if (_glfw.wgl.ARB_multisample) u->samples = findAttribValue(WGL_SAMPLES_ARB); @@ -239,6 +240,9 @@ static int choosePixelFormat(_GLFWwindow* window, if (pfd.iPixelType != PFD_TYPE_RGBA) continue; + if (!!(pfd.dwFlags & PFD_DOUBLEBUFFER) != fbconfig->doublebuffer) + continue; + u->redBits = pfd.cRedBits; u->greenBits = pfd.cGreenBits; u->blueBits = pfd.cBlueBits; @@ -256,8 +260,6 @@ static int choosePixelFormat(_GLFWwindow* window, if (pfd.dwFlags & PFD_STEREO) u->stereo = GLFW_TRUE; - if (pfd.dwFlags & PFD_DOUBLEBUFFER) - u->doublebuffer = GLFW_TRUE; } u->handle = pixelFormat; @@ -785,7 +787,7 @@ GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* handle) _GLFWwindow* window = (_GLFWwindow*) handle; _GLFW_REQUIRE_INIT_OR_RETURN(NULL); - if (window->context.client == GLFW_NO_API) + if (window->context.source != GLFW_NATIVE_CONTEXT_API) { _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); return NULL; diff --git a/third_party/penumbra/vendor/glfw/src/wgl_context.h b/third_party/penumbra/vendor/glfw/src/wgl_context.h index d982118809c..47f045927a0 100644 --- a/third_party/penumbra/vendor/glfw/src/wgl_context.h +++ b/third_party/penumbra/vendor/glfw/src/wgl_context.h @@ -104,10 +104,6 @@ typedef BOOL (WINAPI * PFN_wglShareLists)(HGLRC,HGLRC); #define wglMakeCurrent _glfw.wgl.MakeCurrent #define wglShareLists _glfw.wgl.ShareLists -#define _GLFW_RECREATION_NOT_NEEDED 0 -#define _GLFW_RECREATION_REQUIRED 1 -#define _GLFW_RECREATION_IMPOSSIBLE 2 - #define _GLFW_PLATFORM_CONTEXT_STATE _GLFWcontextWGL wgl #define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE _GLFWlibraryWGL wgl @@ -119,7 +115,6 @@ typedef struct _GLFWcontextWGL HDC dc; HGLRC handle; int interval; - } _GLFWcontextWGL; // WGL-specific global data @@ -152,7 +147,6 @@ typedef struct _GLFWlibraryWGL GLFWbool ARB_create_context_robustness; GLFWbool ARB_create_context_no_error; GLFWbool ARB_context_flush_control; - } _GLFWlibraryWGL; diff --git a/third_party/penumbra/vendor/glfw/src/win32_init.c b/third_party/penumbra/vendor/glfw/src/win32_init.c index b2aa0a3d51e..885f32fa973 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_init.c +++ b/third_party/penumbra/vendor/glfw/src/win32_init.c @@ -39,6 +39,10 @@ static const GUID _glfw_GUID_DEVINTERFACE_HID = #if defined(_GLFW_USE_HYBRID_HPG) || defined(_GLFW_USE_OPTIMUS_HPG) +#if defined(_GLFW_BUILD_DLL) + #pragma message("These symbols must be exported by the executable and have no effect in a DLL") +#endif + // Executables (but not DLLs) exporting this symbol with this value will be // automatically directed to the high-performance GPU on Nvidia Optimus systems // with up-to-date drivers @@ -68,17 +72,16 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) // static GLFWbool loadLibraries(void) { - _glfw.win32.winmm.instance = LoadLibraryA("winmm.dll"); - if (!_glfw.win32.winmm.instance) + if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (const WCHAR*) &_glfw, + (HMODULE*) &_glfw.win32.instance)) { _glfwInputErrorWin32(GLFW_PLATFORM_ERROR, - "Win32: Failed to load winmm.dll"); + "Win32: Failed to retrieve own module handle"); return GLFW_FALSE; } - _glfw.win32.winmm.GetTime = (PFN_timeGetTime) - GetProcAddress(_glfw.win32.winmm.instance, "timeGetTime"); - _glfw.win32.user32.instance = LoadLibraryA("user32.dll"); if (!_glfw.win32.user32.instance) { @@ -99,6 +102,8 @@ static GLFWbool loadLibraries(void) GetProcAddress(_glfw.win32.user32.instance, "GetDpiForWindow"); _glfw.win32.user32.AdjustWindowRectExForDpi_ = (PFN_AdjustWindowRectExForDpi) GetProcAddress(_glfw.win32.user32.instance, "AdjustWindowRectExForDpi"); + _glfw.win32.user32.GetSystemMetricsForDpi_ = (PFN_GetSystemMetricsForDpi) + GetProcAddress(_glfw.win32.user32.instance, "GetSystemMetricsForDpi"); _glfw.win32.dinput8.instance = LoadLibraryA("dinput8.dll"); if (_glfw.win32.dinput8.instance) @@ -143,6 +148,8 @@ static GLFWbool loadLibraries(void) GetProcAddress(_glfw.win32.dwmapi.instance, "DwmFlush"); _glfw.win32.dwmapi.EnableBlurBehindWindow = (PFN_DwmEnableBlurBehindWindow) GetProcAddress(_glfw.win32.dwmapi.instance, "DwmEnableBlurBehindWindow"); + _glfw.win32.dwmapi.GetColorizationColor = (PFN_DwmGetColorizationColor) + GetProcAddress(_glfw.win32.dwmapi.instance, "DwmGetColorizationColor"); } _glfw.win32.shcore.instance = LoadLibraryA("shcore.dll"); @@ -174,9 +181,6 @@ static void freeLibraries(void) if (_glfw.win32.dinput8.instance) FreeLibrary(_glfw.win32.dinput8.instance); - if (_glfw.win32.winmm.instance) - FreeLibrary(_glfw.win32.winmm.instance); - if (_glfw.win32.user32.instance) FreeLibrary(_glfw.win32.user32.instance); @@ -260,7 +264,6 @@ static void createKeyTables(void) _glfw.win32.keycodes[0x151] = GLFW_KEY_PAGE_DOWN; _glfw.win32.keycodes[0x149] = GLFW_KEY_PAGE_UP; _glfw.win32.keycodes[0x045] = GLFW_KEY_PAUSE; - _glfw.win32.keycodes[0x146] = GLFW_KEY_PAUSE; _glfw.win32.keycodes[0x039] = GLFW_KEY_SPACE; _glfw.win32.keycodes[0x00F] = GLFW_KEY_TAB; _glfw.win32.keycodes[0x03A] = GLFW_KEY_CAPS_LOCK; @@ -342,7 +345,7 @@ static GLFWbool createHelperWindow(void) WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, 1, 1, NULL, NULL, - GetModuleHandleW(NULL), + _glfw.win32.instance, NULL); if (!_glfw.win32.helperWindowHandle) @@ -492,7 +495,7 @@ void _glfwUpdateKeyNamesWin32(void) vk = vks[key - GLFW_KEY_KP_0]; } else - vk = MapVirtualKey(scancode, MAPVK_VSC_TO_VK); + vk = MapVirtualKeyW(scancode, MAPVK_VSC_TO_VK); length = ToUnicode(vk, scancode, state, chars, sizeof(chars) / sizeof(WCHAR), @@ -500,6 +503,8 @@ void _glfwUpdateKeyNamesWin32(void) if (length == -1) { + // This is a dead key, so we need a second simulated key press + // to make it output its own character (usually a diacritic) length = ToUnicode(vk, scancode, state, chars, sizeof(chars) / sizeof(WCHAR), 0); @@ -515,7 +520,8 @@ void _glfwUpdateKeyNamesWin32(void) } } -// Replacement for IsWindowsVersionOrGreater as MinGW lacks versionhelpers.h +// Replacement for IsWindowsVersionOrGreater, as we cannot rely on the +// application having a correct embedded manifest // BOOL _glfwIsWindowsVersionOrGreaterWin32(WORD major, WORD minor, WORD sp) { @@ -606,6 +612,7 @@ void _glfwPlatformTerminate(void) _glfwTerminateWGL(); _glfwTerminateEGL(); + _glfwTerminateOSMesa(); _glfwTerminateJoysticksWin32(); diff --git a/third_party/penumbra/vendor/glfw/src/win32_joystick.c b/third_party/penumbra/vendor/glfw/src/win32_joystick.c index 4ffc9fbf404..f471f0a9353 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_joystick.c +++ b/third_party/penumbra/vendor/glfw/src/win32_joystick.c @@ -256,6 +256,8 @@ static GLFWbool supportsXInput(const GUID* guid) // static void closeJoystick(_GLFWjoystick* js) { + _glfwInputJoystick(js, GLFW_DISCONNECTED); + if (js->win32.device) { IDirectInputDevice8_Unacquire(js->win32.device); @@ -263,9 +265,7 @@ static void closeJoystick(_GLFWjoystick* js) } free(js->win32.objects); - _glfwFreeJoystick(js); - _glfwInputJoystick(js, GLFW_DISCONNECTED); } // DirectInput device object enumeration callback @@ -356,8 +356,8 @@ static BOOL CALLBACK deviceCallback(const DIDEVICEINSTANCE* di, void* user) for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { - _GLFWjoystick* js = _glfw.joysticks + jid; - if (js->present) + js = _glfw.joysticks + jid; + if (js->connected) { if (memcmp(&js->win32.guid, &di->guidInstance, sizeof(GUID)) == 0) return DIENUM_CONTINUE; @@ -497,7 +497,7 @@ void _glfwInitJoysticksWin32(void) { if (_glfw.win32.dinput8.instance) { - if (FAILED(DirectInput8Create(GetModuleHandle(NULL), + if (FAILED(DirectInput8Create(_glfw.win32.instance, DIRECTINPUT_VERSION, &IID_IDirectInput8W, (void**) &_glfw.win32.dinput8.api, @@ -541,7 +541,7 @@ void _glfwDetectJoystickConnectionWin32(void) for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { - if (_glfw.joysticks[jid].present && + if (_glfw.joysticks[jid].connected && _glfw.joysticks[jid].win32.device == NULL && _glfw.joysticks[jid].win32.index == index) { @@ -593,7 +593,7 @@ void _glfwDetectJoystickDisconnectionWin32(void) for (jid = 0; jid <= GLFW_JOYSTICK_LAST; jid++) { _GLFWjoystick* js = _glfw.joysticks + jid; - if (js->present) + if (js->connected) _glfwPlatformPollJoystick(js, _GLFW_POLL_PRESENCE); } } @@ -609,7 +609,7 @@ int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode) { int i, ai = 0, bi = 0, pi = 0; HRESULT result; - DIJOYSTATE state; + DIJOYSTATE state = {0}; IDirectInputDevice8_Poll(js->win32.device); result = IDirectInputDevice8_GetDeviceState(js->win32.device, @@ -672,11 +672,11 @@ int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode) }; // Screams of horror are appropriate at this point - int state = LOWORD(*(DWORD*) data) / (45 * DI_DEGREES); - if (state < 0 || state > 8) - state = 8; + int stateIndex = LOWORD(*(DWORD*) data) / (45 * DI_DEGREES); + if (stateIndex < 0 || stateIndex > 8) + stateIndex = 8; - _glfwInputJoystickHat(js, pi, states[state]); + _glfwInputJoystickHat(js, pi, states[stateIndex]); pi++; break; } diff --git a/third_party/penumbra/vendor/glfw/src/win32_joystick.h b/third_party/penumbra/vendor/glfw/src/win32_joystick.h index 9ba46d906a6..d591a826288 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_joystick.h +++ b/third_party/penumbra/vendor/glfw/src/win32_joystick.h @@ -28,6 +28,7 @@ #define _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE struct { int dummyLibraryJoystick; } #define _GLFW_PLATFORM_MAPPING_NAME "Windows" +#define GLFW_BUILD_WIN32_MAPPINGS // Joystick element (axis, button or slider) // diff --git a/third_party/penumbra/vendor/glfw/src/win32_monitor.c b/third_party/penumbra/vendor/glfw/src/win32_monitor.c index 4f5af36a4c8..67337fd81b2 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_monitor.c +++ b/third_party/penumbra/vendor/glfw/src/win32_monitor.c @@ -185,6 +185,8 @@ void _glfwPollMonitorsWin32(void) display.DeviceName) == 0) { disconnected[i] = NULL; + // handle may have changed, update + EnumDisplayMonitors(NULL, NULL, monitorCallback, (LPARAM) _glfw.monitors[i]); break; } } @@ -316,8 +318,19 @@ void _glfwGetMonitorContentScaleWin32(HMONITOR handle, float* xscale, float* ysc { UINT xdpi, ydpi; + if (xscale) + *xscale = 0.f; + if (yscale) + *yscale = 0.f; + if (IsWindows8Point1OrGreater()) - GetDpiForMonitor(handle, MDT_EFFECTIVE_DPI, &xdpi, &ydpi); + { + if (GetDpiForMonitor(handle, MDT_EFFECTIVE_DPI, &xdpi, &ydpi) != S_OK) + { + _glfwInputError(GLFW_PLATFORM_ERROR, "Win32: Failed to query monitor DPI"); + return; + } + } else { const HDC dc = GetDC(NULL); @@ -369,7 +382,7 @@ void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* width, int* height) { MONITORINFO mi = { sizeof(mi) }; - GetMonitorInfo(monitor->win32.handle, &mi); + GetMonitorInfoW(monitor->win32.handle, &mi); if (xpos) *xpos = mi.rcWork.left; diff --git a/third_party/penumbra/vendor/glfw/src/win32_platform.h b/third_party/penumbra/vendor/glfw/src/win32_platform.h index be1dc54491a..bf703d7e607 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_platform.h +++ b/third_party/penumbra/vendor/glfw/src/win32_platform.h @@ -39,8 +39,8 @@ #endif // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for -// example to allow applications to correctly declare a GL_ARB_debug_output -// callback) but windows.h assumes no one will define APIENTRY before it does +// example to allow applications to correctly declare a GL_KHR_debug callback) +// but windows.h assumes no one will define APIENTRY before it does #undef APIENTRY // GLFW on Windows is Unicode only and does not work in MBCS mode @@ -77,6 +77,9 @@ #ifndef WM_DWMCOMPOSITIONCHANGED #define WM_DWMCOMPOSITIONCHANGED 0x031E #endif +#ifndef WM_DWMCOLORIZATIONCOLORCHANGED + #define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320 +#endif #ifndef WM_COPYGLOBALDATA #define WM_COPYGLOBALDATA 0x0049 #endif @@ -99,7 +102,7 @@ #define DISPLAY_DEVICE_ACTIVE 0x00000001 #endif #ifndef _WIN32_WINNT_WINBLUE - #define _WIN32_WINNT_WINBLUE 0x0602 + #define _WIN32_WINNT_WINBLUE 0x0603 #endif #ifndef _WIN32_WINNT_WIN8 #define _WIN32_WINNT_WIN8 0x0602 @@ -159,7 +162,9 @@ typedef enum #define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((HANDLE) -4) #endif /*DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2*/ -// HACK: Define versionhelpers.h functions manually as MinGW lacks the header +// Replacement for versionhelpers.h macros, as we cannot rely on the +// application having a correct embedded manifest +// #define IsWindowsXPOrGreater() \ _glfwIsWindowsVersionOrGreaterWin32(HIBYTE(_WIN32_WINNT_WINXP), \ LOBYTE(_WIN32_WINNT_WINXP), 0) @@ -215,10 +220,6 @@ typedef enum #define DIDFT_OPTIONAL 0x80000000 #endif -// winmm.dll function pointer typedefs -typedef DWORD (WINAPI * PFN_timeGetTime)(void); -#define timeGetTime _glfw.win32.winmm.GetTime - // xinput.dll function pointer typedefs typedef DWORD (WINAPI * PFN_XInputGetCapabilities)(DWORD,DWORD,XINPUT_CAPABILITIES*); typedef DWORD (WINAPI * PFN_XInputGetState)(DWORD,XINPUT_STATE*); @@ -236,20 +237,24 @@ typedef BOOL (WINAPI * PFN_EnableNonClientDpiScaling)(HWND); typedef BOOL (WINAPI * PFN_SetProcessDpiAwarenessContext)(HANDLE); typedef UINT (WINAPI * PFN_GetDpiForWindow)(HWND); typedef BOOL (WINAPI * PFN_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT); +typedef int (WINAPI * PFN_GetSystemMetricsForDpi)(int,UINT); #define SetProcessDPIAware _glfw.win32.user32.SetProcessDPIAware_ #define ChangeWindowMessageFilterEx _glfw.win32.user32.ChangeWindowMessageFilterEx_ #define EnableNonClientDpiScaling _glfw.win32.user32.EnableNonClientDpiScaling_ #define SetProcessDpiAwarenessContext _glfw.win32.user32.SetProcessDpiAwarenessContext_ #define GetDpiForWindow _glfw.win32.user32.GetDpiForWindow_ #define AdjustWindowRectExForDpi _glfw.win32.user32.AdjustWindowRectExForDpi_ +#define GetSystemMetricsForDpi _glfw.win32.user32.GetSystemMetricsForDpi_ // dwmapi.dll function pointer typedefs typedef HRESULT (WINAPI * PFN_DwmIsCompositionEnabled)(BOOL*); typedef HRESULT (WINAPI * PFN_DwmFlush)(VOID); typedef HRESULT(WINAPI * PFN_DwmEnableBlurBehindWindow)(HWND,const DWM_BLURBEHIND*); +typedef HRESULT (WINAPI * PFN_DwmGetColorizationColor)(DWORD*,BOOL*); #define DwmIsCompositionEnabled _glfw.win32.dwmapi.IsCompositionEnabled #define DwmFlush _glfw.win32.dwmapi.Flush #define DwmEnableBlurBehindWindow _glfw.win32.dwmapi.EnableBlurBehindWindow +#define DwmGetColorizationColor _glfw.win32.dwmapi.GetColorizationColor // shcore.dll function pointer typedefs typedef HRESULT (WINAPI * PFN_SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS); @@ -316,15 +321,20 @@ typedef struct _GLFWwindowWin32 GLFWbool transparent; GLFWbool scaleToMonitor; + // Cached size used to filter out duplicate events + int width, height; + // The last received cursor position, regardless of source int lastCursorPosX, lastCursorPosY; - + // The last recevied high surrogate when decoding pairs of UTF-16 messages + WCHAR highSurrogate; } _GLFWwindowWin32; // Win32-specific global data // typedef struct _GLFWlibraryWin32 { + HINSTANCE instance; HWND helperWindowHandle; HDEVNOTIFY deviceNotificationHandle; DWORD foregroundLockTimeout; @@ -341,11 +351,6 @@ typedef struct _GLFWlibraryWin32 int rawInputSize; UINT mouseTrailSize; - struct { - HINSTANCE instance; - PFN_timeGetTime GetTime; - } winmm; - struct { HINSTANCE instance; PFN_DirectInput8Create Create; @@ -366,6 +371,7 @@ typedef struct _GLFWlibraryWin32 PFN_SetProcessDpiAwarenessContext SetProcessDpiAwarenessContext_; PFN_GetDpiForWindow GetDpiForWindow_; PFN_AdjustWindowRectExForDpi AdjustWindowRectExForDpi_; + PFN_GetSystemMetricsForDpi GetSystemMetricsForDpi_; } user32; struct { @@ -373,6 +379,7 @@ typedef struct _GLFWlibraryWin32 PFN_DwmIsCompositionEnabled IsCompositionEnabled; PFN_DwmFlush Flush; PFN_DwmEnableBlurBehindWindow EnableBlurBehindWindow; + PFN_DwmGetColorizationColor GetColorizationColor; } dwmapi; struct { @@ -385,7 +392,6 @@ typedef struct _GLFWlibraryWin32 HINSTANCE instance; PFN_RtlVerifyVersionInfo RtlVerifyVersionInfo_; } ntdll; - } _GLFWlibraryWin32; // Win32-specific per-monitor data @@ -400,7 +406,6 @@ typedef struct _GLFWmonitorWin32 char publicDisplayName[32]; GLFWbool modesPruned; GLFWbool modeChanged; - } _GLFWmonitorWin32; // Win32-specific per-cursor data @@ -408,16 +413,13 @@ typedef struct _GLFWmonitorWin32 typedef struct _GLFWcursorWin32 { HCURSOR handle; - } _GLFWcursorWin32; // Win32-specific global timer data // typedef struct _GLFWtimerWin32 { - GLFWbool hasPC; uint64_t frequency; - } _GLFWtimerWin32; // Win32-specific thread local storage data @@ -426,7 +428,6 @@ typedef struct _GLFWtlsWin32 { GLFWbool allocated; DWORD index; - } _GLFWtlsWin32; // Win32-specific mutex data @@ -435,7 +436,6 @@ typedef struct _GLFWmutexWin32 { GLFWbool allocated; CRITICAL_SECTION section; - } _GLFWmutexWin32; diff --git a/third_party/penumbra/vendor/glfw/src/win32_time.c b/third_party/penumbra/vendor/glfw/src/win32_time.c index 75594637cd8..b4e31ab2765 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_time.c +++ b/third_party/penumbra/vendor/glfw/src/win32_time.c @@ -38,18 +38,7 @@ // void _glfwInitTimerWin32(void) { - uint64_t frequency; - - if (QueryPerformanceFrequency((LARGE_INTEGER*) &frequency)) - { - _glfw.timer.win32.hasPC = GLFW_TRUE; - _glfw.timer.win32.frequency = frequency; - } - else - { - _glfw.timer.win32.hasPC = GLFW_FALSE; - _glfw.timer.win32.frequency = 1000; - } + QueryPerformanceFrequency((LARGE_INTEGER*) &_glfw.timer.win32.frequency); } @@ -59,14 +48,9 @@ void _glfwInitTimerWin32(void) uint64_t _glfwPlatformGetTimerValue(void) { - if (_glfw.timer.win32.hasPC) - { - uint64_t value; - QueryPerformanceCounter((LARGE_INTEGER*) &value); - return value; - } - else - return (uint64_t) timeGetTime(); + uint64_t value; + QueryPerformanceCounter((LARGE_INTEGER*) &value); + return value; } uint64_t _glfwPlatformGetTimerFrequency(void) diff --git a/third_party/penumbra/vendor/glfw/src/win32_window.c b/third_party/penumbra/vendor/glfw/src/win32_window.c index 0ce22ee7ad2..073ceee918e 100644 --- a/third_party/penumbra/vendor/glfw/src/win32_window.c +++ b/third_party/penumbra/vendor/glfw/src/win32_window.c @@ -377,12 +377,17 @@ static void updateWindowStyles(const _GLFWwindow* window) // static void updateFramebufferTransparency(const _GLFWwindow* window) { - BOOL enabled; + BOOL composition, opaque; + DWORD color; if (!IsWindowsVistaOrGreater()) return; - if (SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled) + if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition) + return; + + if (IsWindows8OrGreater() || + (SUCCEEDED(DwmGetColorizationColor(&color, &opaque)) && !opaque)) { HRGN region = CreateRectRgn(0, 0, -1, -1); DWM_BLURBEHIND bb = {0}; @@ -390,37 +395,18 @@ static void updateFramebufferTransparency(const _GLFWwindow* window) bb.hRgnBlur = region; bb.fEnable = TRUE; - if (SUCCEEDED(DwmEnableBlurBehindWindow(window->win32.handle, &bb))) - { - // Decorated windows don't repaint the transparent background - // leaving a trail behind animations - // HACK: Making the window layered with a transparency color key - // seems to fix this. Normally, when specifying - // a transparency color key to be used when composing the - // layered window, all pixels painted by the window in this - // color will be transparent. That doesn't seem to be the - // case anymore, at least when used with blur behind window - // plus negative region. - LONG exStyle = GetWindowLongW(window->win32.handle, GWL_EXSTYLE); - exStyle |= WS_EX_LAYERED; - SetWindowLongW(window->win32.handle, GWL_EXSTYLE, exStyle); - - // Using a color key not equal to black to fix the trailing - // issue. When set to black, something is making the hit test - // not resize with the window frame. - SetLayeredWindowAttributes(window->win32.handle, - RGB(255, 0, 255), 255, LWA_COLORKEY); - } - + DwmEnableBlurBehindWindow(window->win32.handle, &bb); DeleteObject(region); } else { - LONG exStyle = GetWindowLongW(window->win32.handle, GWL_EXSTYLE); - exStyle &= ~WS_EX_LAYERED; - SetWindowLongW(window->win32.handle, GWL_EXSTYLE, exStyle); - RedrawWindow(window->win32.handle, NULL, NULL, - RDW_ERASE | RDW_INVALIDATE | RDW_FRAME); + // HACK: Disable framebuffer transparency on Windows 7 when the + // colorization color is opaque, because otherwise the window + // contents is blended additively with the previous frame instead + // of replacing it + DWM_BLURBEHIND bb = {0}; + bb.dwFlags = DWM_BB_ENABLE; + DwmEnableBlurBehindWindow(window->win32.handle, &bb); } } @@ -449,7 +435,7 @@ static int getKeyMods(void) static void fitToMonitor(_GLFWwindow* window) { MONITORINFO mi = { sizeof(mi) }; - GetMonitorInfo(window->monitor->win32.handle, &mi); + GetMonitorInfoW(window->monitor->win32.handle, &mi); SetWindowPos(window->win32.handle, HWND_TOPMOST, mi.rcMonitor.left, mi.rcMonitor.top, @@ -470,8 +456,8 @@ static void acquireMonitor(_GLFWwindow* window) // the OpenGL ICD switches to page flipping if (IsWindowsXPOrGreater()) { - SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &_glfw.win32.mouseTrailSize, 0); - SystemParametersInfo(SPI_SETMOUSETRAILS, 0, 0, 0); + SystemParametersInfoW(SPI_GETMOUSETRAILS, 0, &_glfw.win32.mouseTrailSize, 0); + SystemParametersInfoW(SPI_SETMOUSETRAILS, 0, 0, 0); } } @@ -496,13 +482,63 @@ static void releaseMonitor(_GLFWwindow* window) // HACK: Restore mouse trail length saved in acquireMonitor if (IsWindowsXPOrGreater()) - SystemParametersInfo(SPI_SETMOUSETRAILS, _glfw.win32.mouseTrailSize, 0, 0); + SystemParametersInfoW(SPI_SETMOUSETRAILS, _glfw.win32.mouseTrailSize, 0, 0); } _glfwInputMonitorWindow(window->monitor, NULL); _glfwRestoreVideoModeWin32(window->monitor); } +// Manually maximize the window, for when SW_MAXIMIZE cannot be used +// +static void maximizeWindowManually(_GLFWwindow* window) +{ + RECT rect; + DWORD style; + MONITORINFO mi = { sizeof(mi) }; + + GetMonitorInfoW(MonitorFromWindow(window->win32.handle, + MONITOR_DEFAULTTONEAREST), &mi); + + rect = mi.rcWork; + + if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) + { + rect.right = _glfw_min(rect.right, rect.left + window->maxwidth); + rect.bottom = _glfw_min(rect.bottom, rect.top + window->maxheight); + } + + style = GetWindowLongW(window->win32.handle, GWL_STYLE); + style |= WS_MAXIMIZE; + SetWindowLongW(window->win32.handle, GWL_STYLE, style); + + if (window->decorated) + { + const DWORD exStyle = GetWindowLongW(window->win32.handle, GWL_EXSTYLE); + + if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32()) + { + const UINT dpi = GetDpiForWindow(window->win32.handle); + AdjustWindowRectExForDpi(&rect, style, FALSE, exStyle, dpi); + OffsetRect(&rect, 0, GetSystemMetricsForDpi(SM_CYCAPTION, dpi)); + } + else + { + AdjustWindowRectEx(&rect, style, FALSE, exStyle); + OffsetRect(&rect, 0, GetSystemMetrics(SM_CYCAPTION)); + } + + rect.bottom = _glfw_min(rect.bottom, mi.rcWork.bottom); + } + + SetWindowPos(window->win32.handle, HWND_TOP, + rect.left, + rect.top, + rect.right - rect.left, + rect.bottom - rect.top, + SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); +} + // Window callback function (handles window messages) // static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, @@ -519,7 +555,17 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, case WM_NCCREATE: { if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32()) - EnableNonClientDpiScaling(hWnd); + { + const CREATESTRUCTW* cs = (const CREATESTRUCTW*) lParam; + const _GLFWwndconfig* wndconfig = cs->lpCreateParams; + + // On per-monitor DPI aware V1 systems, only enable + // non-client scaling for windows that scale the client area + // We need WM_GETDPISCALEDSIZE from V2 to keep the client + // area static when the non-client area is scaled + if (wndconfig && wndconfig->scaleToMonitor) + EnableNonClientDpiScaling(hWnd); + } break; } @@ -645,11 +691,35 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, case WM_CHAR: case WM_SYSCHAR: - case WM_UNICHAR: { - const GLFWbool plain = (uMsg != WM_SYSCHAR); + if (wParam >= 0xd800 && wParam <= 0xdbff) + window->win32.highSurrogate = (WCHAR) wParam; + else + { + uint32_t codepoint = 0; - if (uMsg == WM_UNICHAR && wParam == UNICODE_NOCHAR) + if (wParam >= 0xdc00 && wParam <= 0xdfff) + { + if (window->win32.highSurrogate) + { + codepoint += (window->win32.highSurrogate - 0xd800) << 10; + codepoint += (WCHAR) wParam - 0xdc00; + codepoint += 0x10000; + } + } + else + codepoint = (WCHAR) wParam; + + window->win32.highSurrogate = 0; + _glfwInputChar(window, codepoint, getKeyMods(), uMsg != WM_SYSCHAR); + } + + return 0; + } + + case WM_UNICHAR: + { + if (wParam == UNICODE_NOCHAR) { // WM_UNICHAR is not sent by Windows, but is sent by some // third-party input method engine @@ -657,7 +727,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, return TRUE; } - _glfwInputChar(window, (unsigned int) wParam, getKeyMods(), plain); + _glfwInputChar(window, (uint32_t) wParam, getKeyMods(), GLFW_TRUE); return 0; } @@ -678,6 +748,18 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, scancode = MapVirtualKeyW((UINT) wParam, MAPVK_VK_TO_VSC); } + // HACK: Alt+PrtSc has a different scancode than just PrtSc + if (scancode == 0x54) + scancode = 0x137; + + // HACK: Ctrl+Pause has a different scancode than just Pause + if (scancode == 0x146) + scancode = 0x45; + + // HACK: CJK IME sets the extended bit for right Shift + if (scancode == 0x136) + scancode = 0x36; + key = _glfw.win32.keycodes[scancode]; // The Ctrl keys require special handling @@ -944,6 +1026,8 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, case WM_SIZE: { + const int width = LOWORD(lParam); + const int height = HIWORD(lParam); const GLFWbool iconified = wParam == SIZE_MINIMIZED; const GLFWbool maximized = wParam == SIZE_MAXIMIZED || (window->win32.maximized && @@ -958,8 +1042,14 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, if (window->win32.maximized != maximized) _glfwInputWindowMaximize(window, maximized); - _glfwInputFramebufferSize(window, LOWORD(lParam), HIWORD(lParam)); - _glfwInputWindowSize(window, LOWORD(lParam), HIWORD(lParam)); + if (width != window->win32.width || height != window->win32.height) + { + window->win32.width = width; + window->win32.height = height; + + _glfwInputFramebufferSize(window, width, height); + _glfwInputWindowSize(window, width, height); + } if (window->monitor && window->win32.iconified != iconified) { @@ -1039,7 +1129,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, ZeroMemory(&mi, sizeof(mi)); mi.cbSize = sizeof(mi); - GetMonitorInfo(mh, &mi); + GetMonitorInfoW(mh, &mi); mmi->ptMaxPosition.x = mi.rcWork.left - mi.rcMonitor.left; mmi->ptMaxPosition.y = mi.rcWork.top - mi.rcMonitor.top; @@ -1073,6 +1163,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, } case WM_DWMCOMPOSITIONCHANGED: + case WM_DWMCOLORIZATIONCOLORCHANGED: { if (window->win32.transparent) updateFramebufferTransparency(window); @@ -1112,9 +1203,11 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, const float xscale = HIWORD(wParam) / (float) USER_DEFAULT_SCREEN_DPI; const float yscale = LOWORD(wParam) / (float) USER_DEFAULT_SCREEN_DPI; - // Only apply the suggested size if the OS is new enough to have - // sent a WM_GETDPISCALEDSIZE before this - if (_glfwIsWindows10CreatorsUpdateOrGreaterWin32()) + // Resize windowed mode windows that either permit rescaling or that + // need it to compensate for non-client area scaling + if (!window->monitor && + (window->win32.scaleToMonitor || + _glfwIsWindows10CreatorsUpdateOrGreaterWin32())) { RECT* suggested = (RECT*) lParam; SetWindowPos(window->win32.handle, HWND_TOP, @@ -1191,15 +1284,16 @@ static int createNativeWindow(_GLFWwindow* window, if (window->monitor) { - GLFWvidmode mode; + MONITORINFO mi = { sizeof(mi) }; + GetMonitorInfoW(window->monitor->win32.handle, &mi); // NOTE: This window placement is temporary and approximate, as the // correct position and size cannot be known until the monitor // video mode has been picked in _glfwSetVideoModeWin32 - _glfwPlatformGetMonitorPos(window->monitor, &xpos, &ypos); - _glfwPlatformGetVideoMode(window->monitor, &mode); - fullWidth = mode.width; - fullHeight = mode.height; + xpos = mi.rcMonitor.left; + ypos = mi.rcMonitor.top; + fullWidth = mi.rcMonitor.right - mi.rcMonitor.left; + fullHeight = mi.rcMonitor.bottom - mi.rcMonitor.top; } else { @@ -1228,8 +1322,8 @@ static int createNativeWindow(_GLFWwindow* window, fullWidth, fullHeight, NULL, // No parent window NULL, // No window menu - GetModuleHandleW(NULL), - NULL); + _glfw.win32.instance, + (LPVOID) wndconfig); free(wideTitle); @@ -1254,24 +1348,29 @@ static int createNativeWindow(_GLFWwindow* window, window->win32.scaleToMonitor = wndconfig->scaleToMonitor; - // Adjust window rect to account for DPI scaling of the window frame and - // (if enabled) DPI scaling of the content area - // This cannot be done until we know what monitor the window was placed on if (!window->monitor) { RECT rect = { 0, 0, wndconfig->width, wndconfig->height }; WINDOWPLACEMENT wp = { sizeof(wp) }; + const HMONITOR mh = MonitorFromWindow(window->win32.handle, + MONITOR_DEFAULTTONEAREST); + + // Adjust window rect to account for DPI scaling of the window frame and + // (if enabled) DPI scaling of the content area + // This cannot be done until we know what monitor the window was placed on + // Only update the restored window rect as the window may be maximized if (wndconfig->scaleToMonitor) { float xscale, yscale; - _glfwPlatformGetWindowContentScale(window, &xscale, &yscale); - rect.right = (int) (rect.right * xscale); - rect.bottom = (int) (rect.bottom * yscale); - } + _glfwGetMonitorContentScaleWin32(mh, &xscale, &yscale); - ClientToScreen(window->win32.handle, (POINT*) &rect.left); - ClientToScreen(window->win32.handle, (POINT*) &rect.right); + if (xscale > 0.f && yscale > 0.f) + { + rect.right = (int) (rect.right * xscale); + rect.bottom = (int) (rect.bottom * yscale); + } + } if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32()) { @@ -1281,11 +1380,30 @@ static int createNativeWindow(_GLFWwindow* window, else AdjustWindowRectEx(&rect, style, FALSE, exStyle); - // Only update the restored window rect as the window may be maximized GetWindowPlacement(window->win32.handle, &wp); + OffsetRect(&rect, + wp.rcNormalPosition.left - rect.left, + wp.rcNormalPosition.top - rect.top); + wp.rcNormalPosition = rect; wp.showCmd = SW_HIDE; SetWindowPlacement(window->win32.handle, &wp); + + // Adjust rect of maximized undecorated window, because by default Windows will + // make such a window cover the whole monitor instead of its workarea + + if (wndconfig->maximized && !wndconfig->decorated) + { + MONITORINFO mi = { sizeof(mi) }; + GetMonitorInfoW(mh, &mi); + + SetWindowPos(window->win32.handle, HWND_TOP, + mi.rcWork.left, + mi.rcWork.top, + mi.rcWork.right - mi.rcWork.left, + mi.rcWork.bottom - mi.rcWork.top, + SWP_NOACTIVATE | SWP_NOZORDER); + } } DragAcceptFiles(window->win32.handle, TRUE); @@ -1296,6 +1414,8 @@ static int createNativeWindow(_GLFWwindow* window, window->win32.transparent = GLFW_TRUE; } + _glfwPlatformGetWindowSize(window, &window->win32.width, &window->win32.height); + return GLFW_TRUE; } @@ -1313,8 +1433,8 @@ GLFWbool _glfwRegisterWindowClassWin32(void) ZeroMemory(&wc, sizeof(wc)); wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; - wc.lpfnWndProc = (WNDPROC) windowProc; - wc.hInstance = GetModuleHandleW(NULL); + wc.lpfnWndProc = windowProc; + wc.hInstance = _glfw.win32.instance; wc.hCursor = LoadCursorW(NULL, IDC_ARROW); wc.lpszClassName = _GLFW_WNDCLASSNAME; @@ -1344,7 +1464,7 @@ GLFWbool _glfwRegisterWindowClassWin32(void) // void _glfwUnregisterWindowClassWin32(void) { - UnregisterClassW(_GLFW_WNDCLASSNAME, GetModuleHandleW(NULL)); + UnregisterClassW(_GLFW_WNDCLASSNAME, _glfw.win32.instance); } @@ -1383,6 +1503,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -1391,6 +1514,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformFocusWindow(window); acquireMonitor(window); fitToMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } return GLFW_TRUE; @@ -1454,8 +1589,8 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window, smallIcon = (HICON) GetClassLongPtrW(window->win32.handle, GCLP_HICONSM); } - SendMessage(window->win32.handle, WM_SETICON, ICON_BIG, (LPARAM) bigIcon); - SendMessage(window->win32.handle, WM_SETICON, ICON_SMALL, (LPARAM) smallIcon); + SendMessageW(window->win32.handle, WM_SETICON, ICON_BIG, (LPARAM) bigIcon); + SendMessageW(window->win32.handle, WM_SETICON, ICON_SMALL, (LPARAM) smallIcon); if (window->win32.bigIcon) DestroyIcon(window->win32.bigIcon); @@ -1635,7 +1770,10 @@ void _glfwPlatformRestoreWindow(_GLFWwindow* window) void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { - ShowWindow(window->win32.handle, SW_MAXIMIZE); + if (IsWindowVisible(window->win32.handle)) + ShowWindow(window->win32.handle, SW_MAXIMIZE); + else + maximizeWindowManually(window); } void _glfwPlatformShowWindow(_GLFWwindow* window) @@ -1722,7 +1860,7 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, acquireMonitor(window); - GetMonitorInfo(window->monitor->win32.handle, &mi); + GetMonitorInfoW(window->monitor->win32.handle, &mi); SetWindowPos(window->win32.handle, HWND_TOPMOST, mi.rcMonitor.left, mi.rcMonitor.top, @@ -1797,7 +1935,8 @@ int _glfwPlatformWindowHovered(_GLFWwindow* window) int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { - BOOL enabled; + BOOL composition, opaque; + DWORD color; if (!window->win32.transparent) return GLFW_FALSE; @@ -1805,7 +1944,20 @@ int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) if (!IsWindowsVistaOrGreater()) return GLFW_FALSE; - return SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled; + if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition) + return GLFW_FALSE; + + if (!IsWindows8OrGreater()) + { + // HACK: Disable framebuffer transparency on Windows 7 when the + // colorization color is opaque, because otherwise the window + // contents is blended additively with the previous frame instead + // of replacing it + if (FAILED(DwmGetColorizationColor(&color, &opaque)) || opaque) + return GLFW_FALSE; + } + + return GLFW_TRUE; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled) @@ -1972,7 +2124,7 @@ void _glfwPlatformWaitEventsTimeout(double timeout) void _glfwPlatformPostEmptyEvent(void) { - PostMessage(_glfw.win32.helperWindowHandle, WM_NULL, 0, 0); + PostMessageW(_glfw.win32.helperWindowHandle, WM_NULL, 0, 0); } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) @@ -2020,7 +2172,7 @@ const char* _glfwPlatformGetScancodeName(int scancode) if (scancode < 0 || scancode > (KF_EXTENDED | 0xff) || _glfw.win32.keycodes[scancode] == GLFW_KEY_UNKNOWN) { - _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode"); + _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } @@ -2216,7 +2368,7 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, memset(&sci, 0, sizeof(sci)); sci.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; - sci.hinstance = GetModuleHandle(NULL); + sci.hinstance = _glfw.win32.instance; sci.hwnd = window->win32.handle; err = vkCreateWin32SurfaceKHR(instance, &sci, allocator, surface); diff --git a/third_party/penumbra/vendor/glfw/src/window.c b/third_party/penumbra/vendor/glfw/src/window.c index 4b356b21677..5d80e43656c 100644 --- a/third_party/penumbra/vendor/glfw/src/window.c +++ b/third_party/penumbra/vendor/glfw/src/window.c @@ -205,6 +205,8 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, window->focusOnShow = wndconfig.focusOnShow; window->cursorMode = GLFW_CURSOR_NORMAL; + window->doublebuffer = fbconfig.doublebuffer; + window->minwidth = GLFW_DONT_CARE; window->minheight = GLFW_DONT_CARE; window->maxwidth = GLFW_DONT_CARE; @@ -219,30 +221,6 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, return NULL; } - if (ctxconfig.client != GLFW_NO_API) - { - if (!_glfwRefreshContextAttribs(window, &ctxconfig)) - { - glfwDestroyWindow((GLFWwindow*) window); - return NULL; - } - } - - if (window->monitor) - { - if (wndconfig.centerCursor) - _glfwCenterCursorInContentArea(window); - } - else - { - if (wndconfig.visible) - { - _glfwPlatformShowWindow(window); - if (wndconfig.focused) - _glfwPlatformFocusWindow(window); - } - } - return (GLFWwindow*) window; } @@ -502,12 +480,33 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* handle, const char* title) GLFWAPI void glfwSetWindowIcon(GLFWwindow* handle, int count, const GLFWimage* images) { + int i; _GLFWwindow* window = (_GLFWwindow*) handle; + assert(window != NULL); assert(count >= 0); assert(count == 0 || images != NULL); _GLFW_REQUIRE_INIT(); + + if (count < 0) + { + _glfwInputError(GLFW_INVALID_VALUE, "Invalid image count for window icon"); + return; + } + + for (i = 0; i < count; i++) + { + assert(images[i].pixels != NULL); + + if (images[i].width <= 0 || images[i].height <= 0) + { + _glfwInputError(GLFW_INVALID_VALUE, + "Invalid image dimensions for window icon"); + return; + } + } + _glfwPlatformSetWindowIcon(window, count, images); } @@ -1099,3 +1098,4 @@ GLFWAPI void glfwPostEmptyEvent(void) _GLFW_REQUIRE_INIT(); _glfwPlatformPostEmptyEvent(); } + diff --git a/third_party/penumbra/vendor/glfw/src/wl_init.c b/third_party/penumbra/vendor/glfw/src/wl_init.c index 97b53673f17..e041d261400 100644 --- a/third_party/penumbra/vendor/glfw/src/wl_init.c +++ b/third_party/penumbra/vendor/glfw/src/wl_init.c @@ -26,9 +26,10 @@ // It is fine to use C99 in this file because it will not be built with VS //======================================================================== +#define _POSIX_C_SOURCE 200809L + #include "internal.h" -#include #include #include #include @@ -40,753 +41,19 @@ #include #include - -static inline int min(int n1, int n2) -{ - return n1 < n2 ? n1 : n2; -} - -static _GLFWwindow* findWindowFromDecorationSurface(struct wl_surface* surface, - int* which) -{ - int focus; - _GLFWwindow* window = _glfw.windowListHead; - if (!which) - which = &focus; - while (window) - { - if (surface == window->wl.decorations.top.surface) - { - *which = topDecoration; - break; - } - if (surface == window->wl.decorations.left.surface) - { - *which = leftDecoration; - break; - } - if (surface == window->wl.decorations.right.surface) - { - *which = rightDecoration; - break; - } - if (surface == window->wl.decorations.bottom.surface) - { - *which = bottomDecoration; - break; - } - window = window->next; - } - return window; -} - -static void pointerHandleEnter(void* data, - struct wl_pointer* pointer, - uint32_t serial, - struct wl_surface* surface, - wl_fixed_t sx, - wl_fixed_t sy) -{ - // Happens in the case we just destroyed the surface. - if (!surface) - return; - - int focus = 0; - _GLFWwindow* window = wl_surface_get_user_data(surface); - if (!window) - { - window = findWindowFromDecorationSurface(surface, &focus); - if (!window) - return; - } - - window->wl.decorations.focus = focus; - _glfw.wl.serial = serial; - _glfw.wl.pointerFocus = window; - - window->wl.hovered = GLFW_TRUE; - - _glfwPlatformSetCursor(window, window->wl.currentCursor); - _glfwInputCursorEnter(window, GLFW_TRUE); -} - -static void pointerHandleLeave(void* data, - struct wl_pointer* pointer, - uint32_t serial, - struct wl_surface* surface) -{ - _GLFWwindow* window = _glfw.wl.pointerFocus; - - if (!window) - return; - - window->wl.hovered = GLFW_FALSE; - - _glfw.wl.serial = serial; - _glfw.wl.pointerFocus = NULL; - _glfwInputCursorEnter(window, GLFW_FALSE); - _glfw.wl.cursorPreviousName = NULL; -} - -static void setCursor(_GLFWwindow* window, const char* name) -{ - struct wl_buffer* buffer; - struct wl_cursor* cursor; - struct wl_cursor_image* image; - struct wl_surface* surface = _glfw.wl.cursorSurface; - struct wl_cursor_theme* theme = _glfw.wl.cursorTheme; - int scale = 1; - - if (window->wl.scale > 1 && _glfw.wl.cursorThemeHiDPI) - { - // We only support up to scale=2 for now, since libwayland-cursor - // requires us to load a different theme for each size. - scale = 2; - theme = _glfw.wl.cursorThemeHiDPI; - } - - cursor = wl_cursor_theme_get_cursor(theme, name); - if (!cursor) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Standard cursor not found"); - return; - } - // TODO: handle animated cursors too. - image = cursor->images[0]; - - if (!image) - return; - - buffer = wl_cursor_image_get_buffer(image); - if (!buffer) - return; - wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.serial, - surface, - image->hotspot_x / scale, - image->hotspot_y / scale); - wl_surface_set_buffer_scale(surface, scale); - wl_surface_attach(surface, buffer, 0, 0); - wl_surface_damage(surface, 0, 0, - image->width, image->height); - wl_surface_commit(surface); - _glfw.wl.cursorPreviousName = name; -} - -static void pointerHandleMotion(void* data, - struct wl_pointer* pointer, - uint32_t time, - wl_fixed_t sx, - wl_fixed_t sy) -{ - _GLFWwindow* window = _glfw.wl.pointerFocus; - const char* cursorName = NULL; - double x, y; - - if (!window) - return; - - if (window->cursorMode == GLFW_CURSOR_DISABLED) - return; - x = wl_fixed_to_double(sx); - y = wl_fixed_to_double(sy); - - switch (window->wl.decorations.focus) - { - case mainWindow: - window->wl.cursorPosX = x; - window->wl.cursorPosY = y; - _glfwInputCursorPos(window, x, y); - _glfw.wl.cursorPreviousName = NULL; - return; - case topDecoration: - if (y < _GLFW_DECORATION_WIDTH) - cursorName = "n-resize"; - else - cursorName = "left_ptr"; - break; - case leftDecoration: - if (y < _GLFW_DECORATION_WIDTH) - cursorName = "nw-resize"; - else - cursorName = "w-resize"; - break; - case rightDecoration: - if (y < _GLFW_DECORATION_WIDTH) - cursorName = "ne-resize"; - else - cursorName = "e-resize"; - break; - case bottomDecoration: - if (x < _GLFW_DECORATION_WIDTH) - cursorName = "sw-resize"; - else if (x > window->wl.width + _GLFW_DECORATION_WIDTH) - cursorName = "se-resize"; - else - cursorName = "s-resize"; - break; - default: - assert(0); - } - if (_glfw.wl.cursorPreviousName != cursorName) - setCursor(window, cursorName); -} - -static void pointerHandleButton(void* data, - struct wl_pointer* pointer, - uint32_t serial, - uint32_t time, - uint32_t button, - uint32_t state) -{ - _GLFWwindow* window = _glfw.wl.pointerFocus; - int glfwButton; - - // Both xdg-shell and wl_shell use the same values. - uint32_t edges = WL_SHELL_SURFACE_RESIZE_NONE; - - if (!window) - return; - if (button == BTN_LEFT) - { - switch (window->wl.decorations.focus) - { - case mainWindow: - break; - case topDecoration: - if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) - edges = WL_SHELL_SURFACE_RESIZE_TOP; - else - { - if (window->wl.xdg.toplevel) - xdg_toplevel_move(window->wl.xdg.toplevel, _glfw.wl.seat, serial); - else - wl_shell_surface_move(window->wl.shellSurface, _glfw.wl.seat, serial); - } - break; - case leftDecoration: - if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) - edges = WL_SHELL_SURFACE_RESIZE_TOP_LEFT; - else - edges = WL_SHELL_SURFACE_RESIZE_LEFT; - break; - case rightDecoration: - if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) - edges = WL_SHELL_SURFACE_RESIZE_TOP_RIGHT; - else - edges = WL_SHELL_SURFACE_RESIZE_RIGHT; - break; - case bottomDecoration: - if (window->wl.cursorPosX < _GLFW_DECORATION_WIDTH) - edges = WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT; - else if (window->wl.cursorPosX > window->wl.width + _GLFW_DECORATION_WIDTH) - edges = WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT; - else - edges = WL_SHELL_SURFACE_RESIZE_BOTTOM; - break; - default: - assert(0); - } - if (edges != WL_SHELL_SURFACE_RESIZE_NONE) - { - if (window->wl.xdg.toplevel) - xdg_toplevel_resize(window->wl.xdg.toplevel, _glfw.wl.seat, - serial, edges); - else - wl_shell_surface_resize(window->wl.shellSurface, _glfw.wl.seat, - serial, edges); - } - } - else if (button == BTN_RIGHT) - { - if (window->wl.decorations.focus != mainWindow && window->wl.xdg.toplevel) - { - xdg_toplevel_show_window_menu(window->wl.xdg.toplevel, - _glfw.wl.seat, serial, - window->wl.cursorPosX, - window->wl.cursorPosY); - return; - } - } - - // Don’t pass the button to the user if it was related to a decoration. - if (window->wl.decorations.focus != mainWindow) - return; - - _glfw.wl.serial = serial; - - /* Makes left, right and middle 0, 1 and 2. Overall order follows evdev - * codes. */ - glfwButton = button - BTN_LEFT; - - _glfwInputMouseClick(window, - glfwButton, - state == WL_POINTER_BUTTON_STATE_PRESSED - ? GLFW_PRESS - : GLFW_RELEASE, - _glfw.wl.xkb.modifiers); -} - -static void pointerHandleAxis(void* data, - struct wl_pointer* pointer, - uint32_t time, - uint32_t axis, - wl_fixed_t value) -{ - _GLFWwindow* window = _glfw.wl.pointerFocus; - double x = 0.0, y = 0.0; - // Wayland scroll events are in pointer motion coordinate space (think two - // finger scroll). The factor 10 is commonly used to convert to "scroll - // step means 1.0. - const double scrollFactor = 1.0 / 10.0; - - if (!window) - return; - - assert(axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL || - axis == WL_POINTER_AXIS_VERTICAL_SCROLL); - - if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL) - x = wl_fixed_to_double(value) * scrollFactor; - else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL) - y = wl_fixed_to_double(value) * scrollFactor; - - _glfwInputScroll(window, x, y); -} - -static const struct wl_pointer_listener pointerListener = { - pointerHandleEnter, - pointerHandleLeave, - pointerHandleMotion, - pointerHandleButton, - pointerHandleAxis, -}; - -static void keyboardHandleKeymap(void* data, - struct wl_keyboard* keyboard, - uint32_t format, - int fd, - uint32_t size) -{ - struct xkb_keymap* keymap; - struct xkb_state* state; - -#ifdef HAVE_XKBCOMMON_COMPOSE_H - struct xkb_compose_table* composeTable; - struct xkb_compose_state* composeState; -#endif - - char* mapStr; - const char* locale; - - if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) - { - close(fd); - return; - } - - mapStr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (mapStr == MAP_FAILED) { - close(fd); - return; - } - - keymap = xkb_keymap_new_from_string(_glfw.wl.xkb.context, - mapStr, - XKB_KEYMAP_FORMAT_TEXT_V1, - 0); - munmap(mapStr, size); - close(fd); - - if (!keymap) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to compile keymap"); - return; - } - - state = xkb_state_new(keymap); - if (!state) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to create XKB state"); - xkb_keymap_unref(keymap); - return; - } - - // Look up the preferred locale, falling back to "C" as default. - locale = getenv("LC_ALL"); - if (!locale) - locale = getenv("LC_CTYPE"); - if (!locale) - locale = getenv("LANG"); - if (!locale) - locale = "C"; - -#ifdef HAVE_XKBCOMMON_COMPOSE_H - composeTable = - xkb_compose_table_new_from_locale(_glfw.wl.xkb.context, locale, - XKB_COMPOSE_COMPILE_NO_FLAGS); - if (composeTable) - { - composeState = - xkb_compose_state_new(composeTable, XKB_COMPOSE_STATE_NO_FLAGS); - xkb_compose_table_unref(composeTable); - if (composeState) - _glfw.wl.xkb.composeState = composeState; - else - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to create XKB compose state"); - } - else - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to create XKB compose table"); - } -#endif - - xkb_keymap_unref(_glfw.wl.xkb.keymap); - xkb_state_unref(_glfw.wl.xkb.state); - _glfw.wl.xkb.keymap = keymap; - _glfw.wl.xkb.state = state; - - _glfw.wl.xkb.controlMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Control"); - _glfw.wl.xkb.altMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod1"); - _glfw.wl.xkb.shiftMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Shift"); - _glfw.wl.xkb.superMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod4"); - _glfw.wl.xkb.capsLockMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Lock"); - _glfw.wl.xkb.numLockMask = - 1 << xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod2"); -} - -static void keyboardHandleEnter(void* data, - struct wl_keyboard* keyboard, - uint32_t serial, - struct wl_surface* surface, - struct wl_array* keys) -{ - // Happens in the case we just destroyed the surface. - if (!surface) - return; - - _GLFWwindow* window = wl_surface_get_user_data(surface); - if (!window) - { - window = findWindowFromDecorationSurface(surface, NULL); - if (!window) - return; - } - - _glfw.wl.serial = serial; - _glfw.wl.keyboardFocus = window; - _glfwInputWindowFocus(window, GLFW_TRUE); -} - -static void keyboardHandleLeave(void* data, - struct wl_keyboard* keyboard, - uint32_t serial, - struct wl_surface* surface) -{ - _GLFWwindow* window = _glfw.wl.keyboardFocus; - - if (!window) - return; - - _glfw.wl.serial = serial; - _glfw.wl.keyboardFocus = NULL; - _glfwInputWindowFocus(window, GLFW_FALSE); -} - -static int toGLFWKeyCode(uint32_t key) -{ - if (key < sizeof(_glfw.wl.keycodes) / sizeof(_glfw.wl.keycodes[0])) - return _glfw.wl.keycodes[key]; - - return GLFW_KEY_UNKNOWN; -} - -#ifdef HAVE_XKBCOMMON_COMPOSE_H -static xkb_keysym_t composeSymbol(xkb_keysym_t sym) -{ - if (sym == XKB_KEY_NoSymbol || !_glfw.wl.xkb.composeState) - return sym; - if (xkb_compose_state_feed(_glfw.wl.xkb.composeState, sym) - != XKB_COMPOSE_FEED_ACCEPTED) - return sym; - switch (xkb_compose_state_get_status(_glfw.wl.xkb.composeState)) - { - case XKB_COMPOSE_COMPOSED: - return xkb_compose_state_get_one_sym(_glfw.wl.xkb.composeState); - case XKB_COMPOSE_COMPOSING: - case XKB_COMPOSE_CANCELLED: - return XKB_KEY_NoSymbol; - case XKB_COMPOSE_NOTHING: - default: - return sym; - } -} -#endif - -static GLFWbool inputChar(_GLFWwindow* window, uint32_t key) -{ - uint32_t code, numSyms; - long cp; - const xkb_keysym_t *syms; - xkb_keysym_t sym; - - code = key + 8; - numSyms = xkb_state_key_get_syms(_glfw.wl.xkb.state, code, &syms); - - if (numSyms == 1) - { -#ifdef HAVE_XKBCOMMON_COMPOSE_H - sym = composeSymbol(syms[0]); -#else - sym = syms[0]; -#endif - cp = _glfwKeySym2Unicode(sym); - if (cp != -1) - { - const int mods = _glfw.wl.xkb.modifiers; - const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT)); - _glfwInputChar(window, cp, mods, plain); - } - } - - return xkb_keymap_key_repeats(_glfw.wl.xkb.keymap, syms[0]); -} - -static void keyboardHandleKey(void* data, - struct wl_keyboard* keyboard, - uint32_t serial, - uint32_t time, - uint32_t key, - uint32_t state) -{ - int keyCode; - int action; - _GLFWwindow* window = _glfw.wl.keyboardFocus; - GLFWbool shouldRepeat; - struct itimerspec timer = {}; - - if (!window) - return; - - keyCode = toGLFWKeyCode(key); - action = state == WL_KEYBOARD_KEY_STATE_PRESSED - ? GLFW_PRESS : GLFW_RELEASE; - - _glfw.wl.serial = serial; - _glfwInputKey(window, keyCode, key, action, - _glfw.wl.xkb.modifiers); - - if (action == GLFW_PRESS) - { - shouldRepeat = inputChar(window, key); - - if (shouldRepeat && _glfw.wl.keyboardRepeatRate > 0) - { - _glfw.wl.keyboardLastKey = keyCode; - _glfw.wl.keyboardLastScancode = key; - if (_glfw.wl.keyboardRepeatRate > 1) - timer.it_interval.tv_nsec = 1000000000 / _glfw.wl.keyboardRepeatRate; - else - timer.it_interval.tv_sec = 1; - timer.it_value.tv_sec = _glfw.wl.keyboardRepeatDelay / 1000; - timer.it_value.tv_nsec = (_glfw.wl.keyboardRepeatDelay % 1000) * 1000000; - } - } - timerfd_settime(_glfw.wl.timerfd, 0, &timer, NULL); -} - -static void keyboardHandleModifiers(void* data, - struct wl_keyboard* keyboard, - uint32_t serial, - uint32_t modsDepressed, - uint32_t modsLatched, - uint32_t modsLocked, - uint32_t group) -{ - xkb_mod_mask_t mask; - unsigned int modifiers = 0; - - _glfw.wl.serial = serial; - - if (!_glfw.wl.xkb.keymap) - return; - - xkb_state_update_mask(_glfw.wl.xkb.state, - modsDepressed, - modsLatched, - modsLocked, - 0, - 0, - group); - - mask = xkb_state_serialize_mods(_glfw.wl.xkb.state, - XKB_STATE_MODS_DEPRESSED | - XKB_STATE_LAYOUT_DEPRESSED | - XKB_STATE_MODS_LATCHED | - XKB_STATE_LAYOUT_LATCHED); - if (mask & _glfw.wl.xkb.controlMask) - modifiers |= GLFW_MOD_CONTROL; - if (mask & _glfw.wl.xkb.altMask) - modifiers |= GLFW_MOD_ALT; - if (mask & _glfw.wl.xkb.shiftMask) - modifiers |= GLFW_MOD_SHIFT; - if (mask & _glfw.wl.xkb.superMask) - modifiers |= GLFW_MOD_SUPER; - if (mask & _glfw.wl.xkb.capsLockMask) - modifiers |= GLFW_MOD_CAPS_LOCK; - if (mask & _glfw.wl.xkb.numLockMask) - modifiers |= GLFW_MOD_NUM_LOCK; - _glfw.wl.xkb.modifiers = modifiers; -} - -#ifdef WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION -static void keyboardHandleRepeatInfo(void* data, - struct wl_keyboard* keyboard, - int32_t rate, - int32_t delay) -{ - if (keyboard != _glfw.wl.keyboard) - return; - - _glfw.wl.keyboardRepeatRate = rate; - _glfw.wl.keyboardRepeatDelay = delay; -} -#endif - -static const struct wl_keyboard_listener keyboardListener = { - keyboardHandleKeymap, - keyboardHandleEnter, - keyboardHandleLeave, - keyboardHandleKey, - keyboardHandleModifiers, -#ifdef WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION - keyboardHandleRepeatInfo, -#endif -}; - -static void seatHandleCapabilities(void* data, - struct wl_seat* seat, - enum wl_seat_capability caps) -{ - if ((caps & WL_SEAT_CAPABILITY_POINTER) && !_glfw.wl.pointer) - { - _glfw.wl.pointer = wl_seat_get_pointer(seat); - wl_pointer_add_listener(_glfw.wl.pointer, &pointerListener, NULL); - } - else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && _glfw.wl.pointer) - { - wl_pointer_destroy(_glfw.wl.pointer); - _glfw.wl.pointer = NULL; - } - - if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !_glfw.wl.keyboard) - { - _glfw.wl.keyboard = wl_seat_get_keyboard(seat); - wl_keyboard_add_listener(_glfw.wl.keyboard, &keyboardListener, NULL); - } - else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && _glfw.wl.keyboard) - { - wl_keyboard_destroy(_glfw.wl.keyboard); - _glfw.wl.keyboard = NULL; - } -} - -static void seatHandleName(void* data, - struct wl_seat* seat, - const char* name) -{ -} - -static const struct wl_seat_listener seatListener = { - seatHandleCapabilities, - seatHandleName, -}; - -static void dataOfferHandleOffer(void* data, - struct wl_data_offer* dataOffer, - const char* mimeType) -{ -} - -static const struct wl_data_offer_listener dataOfferListener = { - dataOfferHandleOffer, -}; - -static void dataDeviceHandleDataOffer(void* data, - struct wl_data_device* dataDevice, - struct wl_data_offer* id) -{ - if (_glfw.wl.dataOffer) - wl_data_offer_destroy(_glfw.wl.dataOffer); - - _glfw.wl.dataOffer = id; - wl_data_offer_add_listener(_glfw.wl.dataOffer, &dataOfferListener, NULL); -} - -static void dataDeviceHandleEnter(void* data, - struct wl_data_device* dataDevice, - uint32_t serial, - struct wl_surface *surface, - wl_fixed_t x, - wl_fixed_t y, - struct wl_data_offer *id) -{ -} - -static void dataDeviceHandleLeave(void* data, - struct wl_data_device* dataDevice) -{ -} - -static void dataDeviceHandleMotion(void* data, - struct wl_data_device* dataDevice, - uint32_t time, - wl_fixed_t x, - wl_fixed_t y) -{ -} - -static void dataDeviceHandleDrop(void* data, - struct wl_data_device* dataDevice) -{ -} - -static void dataDeviceHandleSelection(void* data, - struct wl_data_device* dataDevice, - struct wl_data_offer* id) -{ -} - -static const struct wl_data_device_listener dataDeviceListener = { - dataDeviceHandleDataOffer, - dataDeviceHandleEnter, - dataDeviceHandleLeave, - dataDeviceHandleMotion, - dataDeviceHandleDrop, - dataDeviceHandleSelection, -}; - -static void wmBaseHandlePing(void* data, +static void wmBaseHandlePing(void* userData, struct xdg_wm_base* wmBase, uint32_t serial) { xdg_wm_base_pong(wmBase, serial); } -static const struct xdg_wm_base_listener wmBaseListener = { +static const struct xdg_wm_base_listener wmBaseListener = +{ wmBaseHandlePing }; -static void registryHandleGlobal(void* data, +static void registryHandleGlobal(void* userData, struct wl_registry* registry, uint32_t name, const char* interface, @@ -794,7 +61,7 @@ static void registryHandleGlobal(void* data, { if (strcmp(interface, "wl_compositor") == 0) { - _glfw.wl.compositorVersion = min(3, version); + _glfw.wl.compositorVersion = _glfw_min(3, version); _glfw.wl.compositor = wl_registry_bind(registry, name, &wl_compositor_interface, _glfw.wl.compositorVersion); @@ -809,11 +76,6 @@ static void registryHandleGlobal(void* data, _glfw.wl.shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); } - else if (strcmp(interface, "wl_shell") == 0) - { - _glfw.wl.shell = - wl_registry_bind(registry, name, &wl_shell_interface, 1); - } else if (strcmp(interface, "wl_output") == 0) { _glfwAddOutputWayland(name, version); @@ -822,11 +84,11 @@ static void registryHandleGlobal(void* data, { if (!_glfw.wl.seat) { - _glfw.wl.seatVersion = min(4, version); + _glfw.wl.seatVersion = _glfw_min(4, version); _glfw.wl.seat = wl_registry_bind(registry, name, &wl_seat_interface, _glfw.wl.seatVersion); - wl_seat_add_listener(_glfw.wl.seat, &seatListener, NULL); + _glfwAddSeatListenerWayland(_glfw.wl.seat); } } else if (strcmp(interface, "wl_data_device_manager") == 0) @@ -879,16 +141,15 @@ static void registryHandleGlobal(void* data, } } -static void registryHandleGlobalRemove(void *data, - struct wl_registry *registry, +static void registryHandleGlobalRemove(void* userData, + struct wl_registry* registry, uint32_t name) { int i; - _GLFWmonitor* monitor; for (i = 0; i < _glfw.monitorCount; ++i) { - monitor = _glfw.monitors[i]; + _GLFWmonitor* monitor = _glfw.monitors[i]; if (monitor->wl.name == name) { _glfwInputMonitor(monitor, GLFW_DISCONNECTED, 0); @@ -898,7 +159,8 @@ static void registryHandleGlobalRemove(void *data, } -static const struct wl_registry_listener registryListener = { +static const struct wl_registry_listener registryListener = +{ registryHandleGlobal, registryHandleGlobalRemove }; @@ -970,7 +232,7 @@ static void createKeyTables(void) _glfw.wl.keycodes[KEY_RIGHTALT] = GLFW_KEY_RIGHT_ALT; _glfw.wl.keycodes[KEY_LEFTMETA] = GLFW_KEY_LEFT_SUPER; _glfw.wl.keycodes[KEY_RIGHTMETA] = GLFW_KEY_RIGHT_SUPER; - _glfw.wl.keycodes[KEY_MENU] = GLFW_KEY_MENU; + _glfw.wl.keycodes[KEY_COMPOSE] = GLFW_KEY_MENU; _glfw.wl.keycodes[KEY_NUMLOCK] = GLFW_KEY_NUM_LOCK; _glfw.wl.keycodes[KEY_CAPSLOCK] = GLFW_KEY_CAPS_LOCK; _glfw.wl.keycodes[KEY_PRINT] = GLFW_KEY_PRINT_SCREEN; @@ -1013,7 +275,7 @@ static void createKeyTables(void) _glfw.wl.keycodes[KEY_F23] = GLFW_KEY_F23; _glfw.wl.keycodes[KEY_F24] = GLFW_KEY_F24; _glfw.wl.keycodes[KEY_KPSLASH] = GLFW_KEY_KP_DIVIDE; - _glfw.wl.keycodes[KEY_KPDOT] = GLFW_KEY_KP_MULTIPLY; + _glfw.wl.keycodes[KEY_KPASTERISK] = GLFW_KEY_KP_MULTIPLY; _glfw.wl.keycodes[KEY_KPMINUS] = GLFW_KEY_KP_SUBTRACT; _glfw.wl.keycodes[KEY_KPPLUS] = GLFW_KEY_KP_ADD; _glfw.wl.keycodes[KEY_KP0] = GLFW_KEY_KP_0; @@ -1026,9 +288,10 @@ static void createKeyTables(void) _glfw.wl.keycodes[KEY_KP7] = GLFW_KEY_KP_7; _glfw.wl.keycodes[KEY_KP8] = GLFW_KEY_KP_8; _glfw.wl.keycodes[KEY_KP9] = GLFW_KEY_KP_9; - _glfw.wl.keycodes[KEY_KPCOMMA] = GLFW_KEY_KP_DECIMAL; + _glfw.wl.keycodes[KEY_KPDOT] = GLFW_KEY_KP_DECIMAL; _glfw.wl.keycodes[KEY_KPEQUAL] = GLFW_KEY_KP_EQUAL; _glfw.wl.keycodes[KEY_KPENTER] = GLFW_KEY_KP_ENTER; + _glfw.wl.keycodes[KEY_102ND] = GLFW_KEY_WORLD_2; for (scancode = 0; scancode < 256; scancode++) { @@ -1044,17 +307,21 @@ static void createKeyTables(void) int _glfwPlatformInit(void) { - const char *cursorTheme; - const char *cursorSizeStr; - char *cursorSizeEnd; + const char* cursorTheme; + const char* cursorSizeStr; + char* cursorSizeEnd; long cursorSizeLong; int cursorSize; + // These must be set before any failure checks + _glfw.wl.timerfd = -1; + _glfw.wl.cursorTimerfd = -1; + _glfw.wl.cursor.handle = _glfw_dlopen("libwayland-cursor.so.0"); if (!_glfw.wl.cursor.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to open libwayland-cursor"); + "Wayland: Failed to load libwayland-cursor"); return GLFW_FALSE; } @@ -1071,7 +338,7 @@ int _glfwPlatformInit(void) if (!_glfw.wl.egl.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to open libwayland-egl"); + "Wayland: Failed to load libwayland-egl"); return GLFW_FALSE; } @@ -1086,7 +353,7 @@ int _glfwPlatformInit(void) if (!_glfw.wl.xkb.handle) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Failed to open libxkbcommon"); + "Wayland: Failed to load libxkbcommon"); return GLFW_FALSE; } @@ -1102,6 +369,8 @@ int _glfwPlatformInit(void) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_keymap_mod_get_index"); _glfw.wl.xkb.keymap_key_repeats = (PFN_xkb_keymap_key_repeats) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_keymap_key_repeats"); + _glfw.wl.xkb.keymap_key_get_syms_by_level = (PFN_xkb_keymap_key_get_syms_by_level) + _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_keymap_key_get_syms_by_level"); _glfw.wl.xkb.state_new = (PFN_xkb_state_new) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_new"); _glfw.wl.xkb.state_unref = (PFN_xkb_state_unref) @@ -1110,10 +379,11 @@ int _glfwPlatformInit(void) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_key_get_syms"); _glfw.wl.xkb.state_update_mask = (PFN_xkb_state_update_mask) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_update_mask"); - _glfw.wl.xkb.state_serialize_mods = (PFN_xkb_state_serialize_mods) - _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_serialize_mods"); + _glfw.wl.xkb.state_key_get_layout = (PFN_xkb_state_key_get_layout) + _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_key_get_layout"); + _glfw.wl.xkb.state_mod_index_is_active = (PFN_xkb_state_mod_index_is_active) + _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_state_mod_index_is_active"); -#ifdef HAVE_XKBCOMMON_COMPOSE_H _glfw.wl.xkb.compose_table_new_from_locale = (PFN_xkb_compose_table_new_from_locale) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_compose_table_new_from_locale"); _glfw.wl.xkb.compose_table_unref = (PFN_xkb_compose_table_unref) @@ -1128,7 +398,6 @@ int _glfwPlatformInit(void) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_compose_state_get_status"); _glfw.wl.xkb.compose_state_get_one_sym = (PFN_xkb_compose_state_get_one_sym) _glfw_dlsym(_glfw.wl.xkb.handle, "xkb_compose_state_get_one_sym"); -#endif _glfw.wl.display = wl_display_connect(NULL); if (!_glfw.wl.display) @@ -1164,9 +433,17 @@ int _glfwPlatformInit(void) _glfwInitTimerPOSIX(); - _glfw.wl.timerfd = -1; - if (_glfw.wl.seatVersion >= 4) - _glfw.wl.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); +#ifdef WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION + if (_glfw.wl.seatVersion >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) + _glfw.wl.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK); +#endif + + if (!_glfw.wl.wmBase) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to find xdg-shell in your compositor"); + return GLFW_FALSE; + } if (_glfw.wl.pointer && _glfw.wl.shm) { @@ -1185,7 +462,7 @@ int _glfwPlatformInit(void) if (!_glfw.wl.cursorTheme) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Unable to load default cursor theme"); + "Wayland: Failed to load default cursor theme"); return GLFW_FALSE; } // If this happens to be NULL, we just fallback to the scale=1 version. @@ -1193,7 +470,7 @@ int _glfwPlatformInit(void) wl_cursor_theme_load(cursorTheme, 2 * cursorSize, _glfw.wl.shm); _glfw.wl.cursorSurface = wl_compositor_create_surface(_glfw.wl.compositor); - _glfw.wl.cursorTimerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); + _glfw.wl.cursorTimerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK); } if (_glfw.wl.seat && _glfw.wl.dataDeviceManager) @@ -1201,15 +478,7 @@ int _glfwPlatformInit(void) _glfw.wl.dataDevice = wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager, _glfw.wl.seat); - wl_data_device_add_listener(_glfw.wl.dataDevice, &dataDeviceListener, NULL); - _glfw.wl.clipboardString = malloc(4096); - if (!_glfw.wl.clipboardString) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Unable to allocate clipboard memory"); - return GLFW_FALSE; - } - _glfw.wl.clipboardSize = 4096; + _glfwAddDataDeviceListenerWayland(_glfw.wl.dataDevice); } return GLFW_TRUE; @@ -1221,16 +490,16 @@ void _glfwPlatformTerminate(void) _glfwTerminateJoysticksLinux(); #endif _glfwTerminateEGL(); + _glfwTerminateOSMesa(); + if (_glfw.wl.egl.handle) { _glfw_dlclose(_glfw.wl.egl.handle); _glfw.wl.egl.handle = NULL; } -#ifdef HAVE_XKBCOMMON_COMPOSE_H if (_glfw.wl.xkb.composeState) xkb_compose_state_unref(_glfw.wl.xkb.composeState); -#endif if (_glfw.wl.xkb.keymap) xkb_keymap_unref(_glfw.wl.xkb.keymap); if (_glfw.wl.xkb.state) @@ -1253,6 +522,11 @@ void _glfwPlatformTerminate(void) _glfw.wl.cursor.handle = NULL; } + for (unsigned int i = 0; i < _glfw.wl.offerCount; i++) + wl_data_offer_destroy(_glfw.wl.offers[i].offer); + + free(_glfw.wl.offers); + if (_glfw.wl.cursorSurface) wl_surface_destroy(_glfw.wl.cursorSurface); if (_glfw.wl.subcompositor) @@ -1261,20 +535,20 @@ void _glfwPlatformTerminate(void) wl_compositor_destroy(_glfw.wl.compositor); if (_glfw.wl.shm) wl_shm_destroy(_glfw.wl.shm); - if (_glfw.wl.shell) - wl_shell_destroy(_glfw.wl.shell); if (_glfw.wl.viewporter) wp_viewporter_destroy(_glfw.wl.viewporter); if (_glfw.wl.decorationManager) zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager); if (_glfw.wl.wmBase) xdg_wm_base_destroy(_glfw.wl.wmBase); - if (_glfw.wl.dataSource) - wl_data_source_destroy(_glfw.wl.dataSource); + if (_glfw.wl.selectionOffer) + wl_data_offer_destroy(_glfw.wl.selectionOffer); + if (_glfw.wl.dragOffer) + wl_data_offer_destroy(_glfw.wl.dragOffer); + if (_glfw.wl.selectionSource) + wl_data_source_destroy(_glfw.wl.selectionSource); if (_glfw.wl.dataDevice) wl_data_device_destroy(_glfw.wl.dataDevice); - if (_glfw.wl.dataOffer) - wl_data_offer_destroy(_glfw.wl.dataOffer); if (_glfw.wl.dataDeviceManager) wl_data_device_manager_destroy(_glfw.wl.dataDeviceManager); if (_glfw.wl.pointer) @@ -1302,10 +576,7 @@ void _glfwPlatformTerminate(void) if (_glfw.wl.cursorTimerfd >= 0) close(_glfw.wl.cursorTimerfd); - if (_glfw.wl.clipboardString) - free(_glfw.wl.clipboardString); - if (_glfw.wl.clipboardSendString) - free(_glfw.wl.clipboardSendString); + free(_glfw.wl.clipboardString); } const char* _glfwPlatformGetVersionString(void) diff --git a/third_party/penumbra/vendor/glfw/src/wl_monitor.c b/third_party/penumbra/vendor/glfw/src/wl_monitor.c index 48b25b9ff6e..99de89333cf 100644 --- a/third_party/penumbra/vendor/glfw/src/wl_monitor.c +++ b/third_party/penumbra/vendor/glfw/src/wl_monitor.c @@ -35,7 +35,7 @@ #include -static void outputHandleGeometry(void* data, +static void outputHandleGeometry(void* userData, struct wl_output* output, int32_t x, int32_t y, @@ -46,26 +46,25 @@ static void outputHandleGeometry(void* data, const char* model, int32_t transform) { - struct _GLFWmonitor *monitor = data; - char name[1024]; + struct _GLFWmonitor* monitor = userData; monitor->wl.x = x; monitor->wl.y = y; monitor->widthMM = physicalWidth; monitor->heightMM = physicalHeight; - snprintf(name, sizeof(name), "%s %s", make, model); - monitor->name = _glfw_strdup(name); + if (strlen(monitor->name) == 0) + snprintf(monitor->name, sizeof(monitor->name), "%s %s", make, model); } -static void outputHandleMode(void* data, +static void outputHandleMode(void* userData, struct wl_output* output, uint32_t flags, int32_t width, int32_t height, int32_t refresh) { - struct _GLFWmonitor *monitor = data; + struct _GLFWmonitor* monitor = userData; GLFWvidmode mode; mode.width = width; @@ -84,27 +83,75 @@ static void outputHandleMode(void* data, monitor->wl.currentMode = monitor->modeCount - 1; } -static void outputHandleDone(void* data, struct wl_output* output) +static void outputHandleDone(void* userData, struct wl_output* output) { - struct _GLFWmonitor *monitor = data; + struct _GLFWmonitor* monitor = userData; + + if (monitor->widthMM <= 0 || monitor->heightMM <= 0) + { + // If Wayland does not provide a physical size, assume the default 96 DPI + const GLFWvidmode* mode = &monitor->modes[monitor->wl.currentMode]; + monitor->widthMM = (int) (mode->width * 25.4f / 96.f); + monitor->heightMM = (int) (mode->height * 25.4f / 96.f); + } + + for (int i = 0; i < _glfw.monitorCount; i++) + { + if (_glfw.monitors[i] == monitor) + return; + } _glfwInputMonitor(monitor, GLFW_CONNECTED, _GLFW_INSERT_LAST); } -static void outputHandleScale(void* data, +static void outputHandleScale(void* userData, struct wl_output* output, int32_t factor) { - struct _GLFWmonitor *monitor = data; + struct _GLFWmonitor* monitor = userData; monitor->wl.scale = factor; + + for (_GLFWwindow* window = _glfw.windowListHead; window; window = window->next) + { + for (int i = 0; i < window->wl.monitorsCount; i++) + { + if (window->wl.monitors[i] == monitor) + { + _glfwUpdateContentScaleWayland(window); + break; + } + } + } +} + +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + +void outputHandleName(void* userData, struct wl_output* wl_output, const char* name) +{ + struct _GLFWmonitor* monitor = userData; + + strncpy(monitor->name, name, sizeof(monitor->name) - 1); +} + +void outputHandleDescription(void* userData, + struct wl_output* wl_output, + const char* description) +{ } -static const struct wl_output_listener outputListener = { +#endif // WL_OUTPUT_NAME_SINCE_VERSION + +static const struct wl_output_listener outputListener = +{ outputHandleGeometry, outputHandleMode, outputHandleDone, outputHandleScale, +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + outputHandleName, + outputHandleDescription, +#endif }; @@ -114,9 +161,6 @@ static const struct wl_output_listener outputListener = { void _glfwAddOutputWayland(uint32_t name, uint32_t version) { - _GLFWmonitor *monitor; - struct wl_output *output; - if (version < 2) { _glfwInputError(GLFW_PLATFORM_ERROR, @@ -124,19 +168,21 @@ void _glfwAddOutputWayland(uint32_t name, uint32_t version) return; } - // The actual name of this output will be set in the geometry handler. - monitor = _glfwAllocMonitor(NULL, 0, 0); +#ifdef WL_OUTPUT_NAME_SINCE_VERSION + version = _glfw_min(version, WL_OUTPUT_NAME_SINCE_VERSION); +#else + version = 2; +#endif - output = wl_registry_bind(_glfw.wl.registry, - name, - &wl_output_interface, - 2); + struct wl_output* output = wl_registry_bind(_glfw.wl.registry, + name, + &wl_output_interface, + version); if (!output) - { - _glfwFreeMonitor(monitor); return; - } + // The actual name of this output will be set in the geometry handler + _GLFWmonitor* monitor = _glfwAllocMonitor("", 0, 0); monitor->wl.scale = 1; monitor->wl.output = output; monitor->wl.name = name; diff --git a/third_party/penumbra/vendor/glfw/src/wl_platform.h b/third_party/penumbra/vendor/glfw/src/wl_platform.h index 41a7fdfa7a5..2146e2ad0cb 100644 --- a/third_party/penumbra/vendor/glfw/src/wl_platform.h +++ b/third_party/penumbra/vendor/glfw/src/wl_platform.h @@ -26,9 +26,7 @@ #include #include -#ifdef HAVE_XKBCOMMON_COMPOSE_H #include -#endif #include typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; @@ -67,7 +65,7 @@ typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR #define _glfw_dlclose(handle) dlclose(handle) #define _glfw_dlsym(handle, name) dlsym(handle, name) -#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->wl.native) +#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType) window->wl.egl.window) #define _GLFW_EGL_NATIVE_DISPLAY ((EGLNativeDisplayType) _glfw.wl.display) #define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowWayland wl @@ -112,24 +110,27 @@ typedef struct xkb_keymap* (* PFN_xkb_keymap_new_from_string)(struct xkb_context typedef void (* PFN_xkb_keymap_unref)(struct xkb_keymap*); typedef xkb_mod_index_t (* PFN_xkb_keymap_mod_get_index)(struct xkb_keymap*, const char*); typedef int (* PFN_xkb_keymap_key_repeats)(struct xkb_keymap*, xkb_keycode_t); +typedef int (* PFN_xkb_keymap_key_get_syms_by_level)(struct xkb_keymap*,xkb_keycode_t,xkb_layout_index_t,xkb_level_index_t,const xkb_keysym_t**); typedef struct xkb_state* (* PFN_xkb_state_new)(struct xkb_keymap*); typedef void (* PFN_xkb_state_unref)(struct xkb_state*); typedef int (* PFN_xkb_state_key_get_syms)(struct xkb_state*, xkb_keycode_t, const xkb_keysym_t**); typedef enum xkb_state_component (* PFN_xkb_state_update_mask)(struct xkb_state*, xkb_mod_mask_t, xkb_mod_mask_t, xkb_mod_mask_t, xkb_layout_index_t, xkb_layout_index_t, xkb_layout_index_t); -typedef xkb_mod_mask_t (* PFN_xkb_state_serialize_mods)(struct xkb_state*, enum xkb_state_component); +typedef xkb_layout_index_t (* PFN_xkb_state_key_get_layout)(struct xkb_state*,xkb_keycode_t); +typedef int (* PFN_xkb_state_mod_index_is_active)(struct xkb_state*,xkb_mod_index_t,enum xkb_state_component); #define xkb_context_new _glfw.wl.xkb.context_new #define xkb_context_unref _glfw.wl.xkb.context_unref #define xkb_keymap_new_from_string _glfw.wl.xkb.keymap_new_from_string #define xkb_keymap_unref _glfw.wl.xkb.keymap_unref #define xkb_keymap_mod_get_index _glfw.wl.xkb.keymap_mod_get_index #define xkb_keymap_key_repeats _glfw.wl.xkb.keymap_key_repeats +#define xkb_keymap_key_get_syms_by_level _glfw.wl.xkb.keymap_key_get_syms_by_level #define xkb_state_new _glfw.wl.xkb.state_new #define xkb_state_unref _glfw.wl.xkb.state_unref #define xkb_state_key_get_syms _glfw.wl.xkb.state_key_get_syms #define xkb_state_update_mask _glfw.wl.xkb.state_update_mask -#define xkb_state_serialize_mods _glfw.wl.xkb.state_serialize_mods +#define xkb_state_key_get_layout _glfw.wl.xkb.state_key_get_layout +#define xkb_state_mod_index_is_active _glfw.wl.xkb.state_mod_index_is_active -#ifdef HAVE_XKBCOMMON_COMPOSE_H typedef struct xkb_compose_table* (* PFN_xkb_compose_table_new_from_locale)(struct xkb_context*, const char*, enum xkb_compose_compile_flags); typedef void (* PFN_xkb_compose_table_unref)(struct xkb_compose_table*); typedef struct xkb_compose_state* (* PFN_xkb_compose_state_new)(struct xkb_compose_table*, enum xkb_compose_state_flags); @@ -144,12 +145,6 @@ typedef xkb_keysym_t (* PFN_xkb_compose_state_get_one_sym)(struct xkb_compose_st #define xkb_compose_state_feed _glfw.wl.xkb.compose_state_feed #define xkb_compose_state_get_status _glfw.wl.xkb.compose_state_get_status #define xkb_compose_state_get_one_sym _glfw.wl.xkb.compose_state_get_one_sym -#endif - -#define _GLFW_DECORATION_WIDTH 4 -#define _GLFW_DECORATION_TOP 24 -#define _GLFW_DECORATION_VERTICAL (_GLFW_DECORATION_TOP + _GLFW_DECORATION_WIDTH) -#define _GLFW_DECORATION_HORIZONTAL (2 * _GLFW_DECORATION_WIDTH) typedef enum _GLFWdecorationSideWayland { @@ -158,7 +153,6 @@ typedef enum _GLFWdecorationSideWayland leftDecoration, rightDecoration, bottomDecoration, - } _GLFWdecorationSideWayland; typedef struct _GLFWdecorationWayland @@ -166,9 +160,15 @@ typedef struct _GLFWdecorationWayland struct wl_surface* surface; struct wl_subsurface* subsurface; struct wp_viewport* viewport; - } _GLFWdecorationWayland; +typedef struct _GLFWofferWayland +{ + struct wl_data_offer* offer; + GLFWbool text_plain_utf8; + GLFWbool text_uri_list; +} _GLFWofferWayland; + // Wayland-specific per-window data // typedef struct _GLFWwindowWayland @@ -176,17 +176,30 @@ typedef struct _GLFWwindowWayland int width, height; GLFWbool visible; GLFWbool maximized; + GLFWbool activated; + GLFWbool fullscreen; GLFWbool hovered; GLFWbool transparent; struct wl_surface* surface; - struct wl_egl_window* native; - struct wl_shell_surface* shellSurface; struct wl_callback* callback; + struct { + struct wl_egl_window* window; + } egl; + + struct { + int width, height; + GLFWbool maximized; + GLFWbool iconified; + GLFWbool activated; + GLFWbool fullscreen; + } pending; + struct { struct xdg_surface* surface; struct xdg_toplevel* toplevel; struct zxdg_toplevel_decoration_v1* decoration; + uint32_t decorationMode; } xdg; _GLFWcursor* currentCursor; @@ -208,15 +221,11 @@ typedef struct _GLFWwindowWayland struct zwp_idle_inhibitor_v1* idleInhibitor; - GLFWbool wasFullscreen; - struct { - GLFWbool serverSide; struct wl_buffer* buffer; _GLFWdecorationWayland top, left, right, bottom; - int focus; + _GLFWdecorationSideWayland focus; } decorations; - } _GLFWwindowWayland; // Wayland-specific global data @@ -227,15 +236,12 @@ typedef struct _GLFWlibraryWayland struct wl_registry* registry; struct wl_compositor* compositor; struct wl_subcompositor* subcompositor; - struct wl_shell* shell; struct wl_shm* shm; struct wl_seat* seat; struct wl_pointer* pointer; struct wl_keyboard* keyboard; struct wl_data_device_manager* dataDeviceManager; struct wl_data_device* dataDevice; - struct wl_data_offer* dataOffer; - struct wl_data_source* dataSource; struct xdg_wm_base* wmBase; struct zxdg_decoration_manager_v1* decorationManager; struct wp_viewporter* viewporter; @@ -243,6 +249,16 @@ typedef struct _GLFWlibraryWayland struct zwp_pointer_constraints_v1* pointerConstraints; struct zwp_idle_inhibit_manager_v1* idleInhibitManager; + _GLFWofferWayland* offers; + unsigned int offerCount; + + struct wl_data_offer* selectionOffer; + struct wl_data_source* selectionSource; + + struct wl_data_offer* dragOffer; + _GLFWwindow* dragFocus; + uint32_t dragSerial; + int compositorVersion; int seatVersion; @@ -252,35 +268,31 @@ typedef struct _GLFWlibraryWayland const char* cursorPreviousName; int cursorTimerfd; uint32_t serial; + uint32_t pointerEnterSerial; int32_t keyboardRepeatRate; int32_t keyboardRepeatDelay; int keyboardLastKey; int keyboardLastScancode; char* clipboardString; - size_t clipboardSize; - char* clipboardSendString; - size_t clipboardSendSize; int timerfd; short int keycodes[256]; short int scancodes[GLFW_KEY_LAST + 1]; + char keynames[GLFW_KEY_LAST + 1][5]; struct { void* handle; struct xkb_context* context; struct xkb_keymap* keymap; struct xkb_state* state; - -#ifdef HAVE_XKBCOMMON_COMPOSE_H struct xkb_compose_state* composeState; -#endif - xkb_mod_mask_t controlMask; - xkb_mod_mask_t altMask; - xkb_mod_mask_t shiftMask; - xkb_mod_mask_t superMask; - xkb_mod_mask_t capsLockMask; - xkb_mod_mask_t numLockMask; + xkb_mod_index_t controlIndex; + xkb_mod_index_t altIndex; + xkb_mod_index_t shiftIndex; + xkb_mod_index_t superIndex; + xkb_mod_index_t capsLockIndex; + xkb_mod_index_t numLockIndex; unsigned int modifiers; PFN_xkb_context_new context_new; @@ -289,13 +301,14 @@ typedef struct _GLFWlibraryWayland PFN_xkb_keymap_unref keymap_unref; PFN_xkb_keymap_mod_get_index keymap_mod_get_index; PFN_xkb_keymap_key_repeats keymap_key_repeats; + PFN_xkb_keymap_key_get_syms_by_level keymap_key_get_syms_by_level; PFN_xkb_state_new state_new; PFN_xkb_state_unref state_unref; PFN_xkb_state_key_get_syms state_key_get_syms; PFN_xkb_state_update_mask state_update_mask; - PFN_xkb_state_serialize_mods state_serialize_mods; + PFN_xkb_state_key_get_layout state_key_get_layout; + PFN_xkb_state_mod_index_is_active state_mod_index_is_active; -#ifdef HAVE_XKBCOMMON_COMPOSE_H PFN_xkb_compose_table_new_from_locale compose_table_new_from_locale; PFN_xkb_compose_table_unref compose_table_unref; PFN_xkb_compose_state_new compose_state_new; @@ -303,7 +316,6 @@ typedef struct _GLFWlibraryWayland PFN_xkb_compose_state_feed compose_state_feed; PFN_xkb_compose_state_get_status compose_state_get_status; PFN_xkb_compose_state_get_one_sym compose_state_get_one_sym; -#endif } xkb; _GLFWwindow* pointerFocus; @@ -325,7 +337,6 @@ typedef struct _GLFWlibraryWayland PFN_wl_egl_window_destroy window_destroy; PFN_wl_egl_window_resize window_resize; } egl; - } _GLFWlibraryWayland; // Wayland-specific per-monitor data @@ -339,7 +350,6 @@ typedef struct _GLFWmonitorWayland int x; int y; int scale; - } _GLFWmonitorWayland; // Wayland-specific per-cursor data @@ -354,6 +364,10 @@ typedef struct _GLFWcursorWayland int currentImage; } _GLFWcursorWayland; - void _glfwAddOutputWayland(uint32_t name, uint32_t version); +void _glfwUpdateContentScaleWayland(_GLFWwindow* window); +GLFWbool _glfwInputTextWayland(_GLFWwindow* window, uint32_t scancode); + +void _glfwAddSeatListenerWayland(struct wl_seat* seat); +void _glfwAddDataDeviceListenerWayland(struct wl_data_device* device); diff --git a/third_party/penumbra/vendor/glfw/src/wl_window.c b/third_party/penumbra/vendor/glfw/src/wl_window.c index a90257189c6..53cbd33b179 100644 --- a/third_party/penumbra/vendor/glfw/src/wl_window.c +++ b/third_party/penumbra/vendor/glfw/src/wl_window.c @@ -33,79 +33,18 @@ #include #include #include +#include #include #include #include #include #include #include +#include +#include - -static void shellSurfaceHandlePing(void* data, - struct wl_shell_surface* shellSurface, - uint32_t serial) -{ - wl_shell_surface_pong(shellSurface, serial); -} - -static void shellSurfaceHandleConfigure(void* data, - struct wl_shell_surface* shellSurface, - uint32_t edges, - int32_t width, - int32_t height) -{ - _GLFWwindow* window = data; - float aspectRatio; - float targetRatio; - - if (!window->monitor) - { - if (_glfw.wl.viewporter && window->decorated) - { - width -= _GLFW_DECORATION_HORIZONTAL; - height -= _GLFW_DECORATION_VERTICAL; - } - if (width < 1) - width = 1; - if (height < 1) - height = 1; - - if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) - { - aspectRatio = (float)width / (float)height; - targetRatio = (float)window->numer / (float)window->denom; - if (aspectRatio < targetRatio) - height = width / targetRatio; - else if (aspectRatio > targetRatio) - width = height * targetRatio; - } - - if (window->minwidth != GLFW_DONT_CARE && width < window->minwidth) - width = window->minwidth; - else if (window->maxwidth != GLFW_DONT_CARE && width > window->maxwidth) - width = window->maxwidth; - - if (window->minheight != GLFW_DONT_CARE && height < window->minheight) - height = window->minheight; - else if (window->maxheight != GLFW_DONT_CARE && height > window->maxheight) - height = window->maxheight; - } - - _glfwInputWindowSize(window, width, height); - _glfwPlatformSetWindowSize(window, width, height); - _glfwInputWindowDamage(window); -} - -static void shellSurfaceHandlePopupDone(void* data, - struct wl_shell_surface* shellSurface) -{ -} - -static const struct wl_shell_surface_listener shellSurfaceListener = { - shellSurfaceHandlePing, - shellSurfaceHandleConfigure, - shellSurfaceHandlePopupDone -}; +#define GLFW_BORDER_SIZE 4 +#define GLFW_CAPTION_HEIGHT 24 static int createTmpfileCloexec(char* tmpname) { @@ -208,8 +147,8 @@ static struct wl_buffer* createShmBuffer(const GLFWimage* image) if (fd < 0) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Creating a buffer file for %d B failed: %m", - length); + "Wayland: Failed to create buffer file of size %d: %s", + length, strerror(errno)); return NULL; } @@ -217,7 +156,7 @@ static struct wl_buffer* createShmBuffer(const GLFWimage* image) if (data == MAP_FAILED) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: mmap failed: %m"); + "Wayland: Failed to map file: %s", strerror(errno)); close(fd); return NULL; } @@ -248,14 +187,59 @@ static struct wl_buffer* createShmBuffer(const GLFWimage* image) return buffer; } -static void createDecoration(_GLFWdecorationWayland* decoration, - struct wl_surface* parent, - struct wl_buffer* buffer, GLFWbool opaque, - int x, int y, - int width, int height) +// Wait for data to arrive on any of the specified file descriptors +// +static GLFWbool waitForData(struct pollfd* fds, nfds_t count, double* timeout) { - struct wl_region* region; + for (;;) + { + if (timeout) + { + const uint64_t base = _glfwPlatformGetTimerValue(); + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) + const time_t seconds = (time_t) *timeout; + const long nanoseconds = (long) ((*timeout - seconds) * 1e9); + const struct timespec ts = { seconds, nanoseconds }; + const int result = ppoll(fds, count, &ts, NULL); +#elif defined(__NetBSD__) + const time_t seconds = (time_t) *timeout; + const long nanoseconds = (long) ((*timeout - seconds) * 1e9); + const struct timespec ts = { seconds, nanoseconds }; + const int result = pollts(fds, count, &ts, NULL); +#else + const int milliseconds = (int) (*timeout * 1e3); + const int result = poll(fds, count, milliseconds); +#endif + const int error = errno; // clock_gettime may overwrite our error + + *timeout -= (_glfwPlatformGetTimerValue() - base) / + (double) _glfwPlatformGetTimerFrequency(); + + if (result > 0) + return GLFW_TRUE; + else if (result == -1 && error != EINTR && error != EAGAIN) + return GLFW_FALSE; + else if (*timeout <= 0.0) + return GLFW_FALSE; + } + else + { + const int result = poll(fds, count, -1); + if (result > 0) + return GLFW_TRUE; + else if (result == -1 && errno != EINTR && errno != EAGAIN) + return GLFW_FALSE; + } + } +} +static void createFallbackDecoration(_GLFWdecorationWayland* decoration, + struct wl_surface* parent, + struct wl_buffer* buffer, + int x, int y, + int width, int height) +{ decoration->surface = wl_compositor_create_surface(_glfw.wl.compositor); decoration->subsurface = wl_subcompositor_get_subsurface(_glfw.wl.subcompositor, @@ -266,25 +250,19 @@ static void createDecoration(_GLFWdecorationWayland* decoration, wp_viewport_set_destination(decoration->viewport, width, height); wl_surface_attach(decoration->surface, buffer, 0, 0); - if (opaque) - { - region = wl_compositor_create_region(_glfw.wl.compositor); - wl_region_add(region, 0, 0, width, height); - wl_surface_set_opaque_region(decoration->surface, region); - wl_surface_commit(decoration->surface); - wl_region_destroy(region); - } - else - wl_surface_commit(decoration->surface); + struct wl_region* region = wl_compositor_create_region(_glfw.wl.compositor); + wl_region_add(region, 0, 0, width, height); + wl_surface_set_opaque_region(decoration->surface, region); + wl_surface_commit(decoration->surface); + wl_region_destroy(region); } -static void createDecorations(_GLFWwindow* window) +static void createFallbackDecorations(_GLFWwindow* window) { unsigned char data[] = { 224, 224, 224, 255 }; const GLFWimage image = { 1, 1, data }; - GLFWbool opaque = (data[3] == 255); - if (!_glfw.wl.viewporter || !window->decorated || window->wl.decorations.serverSide) + if (!_glfw.wl.viewporter) return; if (!window->wl.decorations.buffer) @@ -292,30 +270,30 @@ static void createDecorations(_GLFWwindow* window) if (!window->wl.decorations.buffer) return; - createDecoration(&window->wl.decorations.top, window->wl.surface, - window->wl.decorations.buffer, opaque, - 0, -_GLFW_DECORATION_TOP, - window->wl.width, _GLFW_DECORATION_TOP); - createDecoration(&window->wl.decorations.left, window->wl.surface, - window->wl.decorations.buffer, opaque, - -_GLFW_DECORATION_WIDTH, -_GLFW_DECORATION_TOP, - _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); - createDecoration(&window->wl.decorations.right, window->wl.surface, - window->wl.decorations.buffer, opaque, - window->wl.width, -_GLFW_DECORATION_TOP, - _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); - createDecoration(&window->wl.decorations.bottom, window->wl.surface, - window->wl.decorations.buffer, opaque, - -_GLFW_DECORATION_WIDTH, window->wl.height, - window->wl.width + _GLFW_DECORATION_HORIZONTAL, _GLFW_DECORATION_WIDTH); -} - -static void destroyDecoration(_GLFWdecorationWayland* decoration) + createFallbackDecoration(&window->wl.decorations.top, window->wl.surface, + window->wl.decorations.buffer, + 0, -GLFW_CAPTION_HEIGHT, + window->wl.width, GLFW_CAPTION_HEIGHT); + createFallbackDecoration(&window->wl.decorations.left, window->wl.surface, + window->wl.decorations.buffer, + -GLFW_BORDER_SIZE, -GLFW_CAPTION_HEIGHT, + GLFW_BORDER_SIZE, window->wl.height + GLFW_CAPTION_HEIGHT); + createFallbackDecoration(&window->wl.decorations.right, window->wl.surface, + window->wl.decorations.buffer, + window->wl.width, -GLFW_CAPTION_HEIGHT, + GLFW_BORDER_SIZE, window->wl.height + GLFW_CAPTION_HEIGHT); + createFallbackDecoration(&window->wl.decorations.bottom, window->wl.surface, + window->wl.decorations.buffer, + -GLFW_BORDER_SIZE, window->wl.height, + window->wl.width + GLFW_BORDER_SIZE * 2, GLFW_BORDER_SIZE); +} + +static void destroyFallbackDecoration(_GLFWdecorationWayland* decoration) { - if (decoration->surface) - wl_surface_destroy(decoration->surface); if (decoration->subsurface) wl_subsurface_destroy(decoration->subsurface); + if (decoration->surface) + wl_surface_destroy(decoration->surface); if (decoration->viewport) wp_viewport_destroy(decoration->viewport); decoration->surface = NULL; @@ -323,32 +301,38 @@ static void destroyDecoration(_GLFWdecorationWayland* decoration) decoration->viewport = NULL; } -static void destroyDecorations(_GLFWwindow* window) +static void destroyFallbackDecorations(_GLFWwindow* window) { - destroyDecoration(&window->wl.decorations.top); - destroyDecoration(&window->wl.decorations.left); - destroyDecoration(&window->wl.decorations.right); - destroyDecoration(&window->wl.decorations.bottom); + destroyFallbackDecoration(&window->wl.decorations.top); + destroyFallbackDecoration(&window->wl.decorations.left); + destroyFallbackDecoration(&window->wl.decorations.right); + destroyFallbackDecoration(&window->wl.decorations.bottom); } -static void xdgDecorationHandleConfigure(void* data, +static void xdgDecorationHandleConfigure(void* userData, struct zxdg_toplevel_decoration_v1* decoration, uint32_t mode) { - _GLFWwindow* window = data; + _GLFWwindow* window = userData; - window->wl.decorations.serverSide = (mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + window->wl.xdg.decorationMode = mode; - if (!window->wl.decorations.serverSide) - createDecorations(window); + if (mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE) + { + if (window->decorated && !window->monitor) + createFallbackDecorations(window); + } + else + destroyFallbackDecorations(window); } -static const struct zxdg_toplevel_decoration_v1_listener xdgDecorationListener = { +static const struct zxdg_toplevel_decoration_v1_listener xdgDecorationListener = +{ xdgDecorationHandleConfigure, }; // Makes the surface considered as XRGB instead of ARGB. -static void setOpaqueRegion(_GLFWwindow* window) +static void setContentAreaOpaque(_GLFWwindow* window) { struct wl_region* region; @@ -358,7 +342,6 @@ static void setOpaqueRegion(_GLFWwindow* window) wl_region_add(region, 0, 0, window->wl.width, window->wl.height); wl_surface_set_opaque_region(window->wl.surface, region); - wl_surface_commit(window->wl.surface); wl_region_destroy(region); } @@ -368,72 +351,63 @@ static void resizeWindow(_GLFWwindow* window) int scale = window->wl.scale; int scaledWidth = window->wl.width * scale; int scaledHeight = window->wl.height * scale; - wl_egl_window_resize(window->wl.native, scaledWidth, scaledHeight, 0, 0); + + if (window->wl.egl.window) + wl_egl_window_resize(window->wl.egl.window, scaledWidth, scaledHeight, 0, 0); if (!window->wl.transparent) - setOpaqueRegion(window); + setContentAreaOpaque(window); _glfwInputFramebufferSize(window, scaledWidth, scaledHeight); - _glfwInputWindowContentScale(window, scale, scale); if (!window->wl.decorations.top.surface) return; - // Top decoration. wp_viewport_set_destination(window->wl.decorations.top.viewport, - window->wl.width, _GLFW_DECORATION_TOP); + window->wl.width, GLFW_CAPTION_HEIGHT); wl_surface_commit(window->wl.decorations.top.surface); - // Left decoration. wp_viewport_set_destination(window->wl.decorations.left.viewport, - _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); + GLFW_BORDER_SIZE, window->wl.height + GLFW_CAPTION_HEIGHT); wl_surface_commit(window->wl.decorations.left.surface); - // Right decoration. wl_subsurface_set_position(window->wl.decorations.right.subsurface, - window->wl.width, -_GLFW_DECORATION_TOP); + window->wl.width, -GLFW_CAPTION_HEIGHT); wp_viewport_set_destination(window->wl.decorations.right.viewport, - _GLFW_DECORATION_WIDTH, window->wl.height + _GLFW_DECORATION_TOP); + GLFW_BORDER_SIZE, window->wl.height + GLFW_CAPTION_HEIGHT); wl_surface_commit(window->wl.decorations.right.surface); - // Bottom decoration. wl_subsurface_set_position(window->wl.decorations.bottom.subsurface, - -_GLFW_DECORATION_WIDTH, window->wl.height); + -GLFW_BORDER_SIZE, window->wl.height); wp_viewport_set_destination(window->wl.decorations.bottom.viewport, - window->wl.width + _GLFW_DECORATION_HORIZONTAL, _GLFW_DECORATION_WIDTH); + window->wl.width + GLFW_BORDER_SIZE * 2, GLFW_BORDER_SIZE); wl_surface_commit(window->wl.decorations.bottom.surface); } -static void checkScaleChange(_GLFWwindow* window) +void _glfwUpdateContentScaleWayland(_GLFWwindow* window) { - int scale = 1; - int i; - int monitorScale; - - // Check if we will be able to set the buffer scale or not. - if (_glfw.wl.compositorVersion < 3) + if (_glfw.wl.compositorVersion < WL_SURFACE_SET_BUFFER_SCALE_SINCE_VERSION) return; // Get the scale factor from the highest scale monitor. - for (i = 0; i < window->wl.monitorsCount; ++i) - { - monitorScale = window->wl.monitors[i]->wl.scale; - if (scale < monitorScale) - scale = monitorScale; - } + int maxScale = 1; + + for (int i = 0; i < window->wl.monitorsCount; i++) + maxScale = _glfw_max(window->wl.monitors[i]->wl.scale, maxScale); // Only change the framebuffer size if the scale changed. - if (scale != window->wl.scale) + if (window->wl.scale != maxScale) { - window->wl.scale = scale; - wl_surface_set_buffer_scale(window->wl.surface, scale); + window->wl.scale = maxScale; + wl_surface_set_buffer_scale(window->wl.surface, maxScale); + _glfwInputWindowContentScale(window, maxScale, maxScale); resizeWindow(window); } } -static void surfaceHandleEnter(void *data, - struct wl_surface *surface, - struct wl_output *output) +static void surfaceHandleEnter(void* userData, + struct wl_surface* surface, + struct wl_output* output) { - _GLFWwindow* window = data; + _GLFWwindow* window = userData; _GLFWmonitor* monitor = wl_output_get_user_data(output); if (window->wl.monitorsCount + 1 > window->wl.monitorsSize) @@ -446,14 +420,14 @@ static void surfaceHandleEnter(void *data, window->wl.monitors[window->wl.monitorsCount++] = monitor; - checkScaleChange(window); + _glfwUpdateContentScaleWayland(window); } -static void surfaceHandleLeave(void *data, - struct wl_surface *surface, - struct wl_output *output) +static void surfaceHandleLeave(void* userData, + struct wl_surface* surface, + struct wl_output* output) { - _GLFWwindow* window = data; + _GLFWwindow* window = userData; _GLFWmonitor* monitor = wl_output_get_user_data(output); GLFWbool found; int i; @@ -467,10 +441,11 @@ static void surfaceHandleLeave(void *data, } window->wl.monitors[--window->wl.monitorsCount] = NULL; - checkScaleChange(window); + _glfwUpdateContentScaleWayland(window); } -static const struct wl_surface_listener surfaceListener = { +static const struct wl_surface_listener surfaceListener = +{ surfaceHandleEnter, surfaceHandleLeave }; @@ -484,7 +459,7 @@ static void setIdleInhibitor(_GLFWwindow* window, GLFWbool enable) _glfw.wl.idleInhibitManager, window->wl.surface); if (!window->wl.idleInhibitor) _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Idle inhibitor creation failed"); + "Wayland: Failed to create idle inhibitor"); } else if (!enable && window->wl.idleInhibitor) { @@ -493,266 +468,263 @@ static void setIdleInhibitor(_GLFWwindow* window, GLFWbool enable) } } -static GLFWbool createSurface(_GLFWwindow* window, - const _GLFWwndconfig* wndconfig) -{ - window->wl.surface = wl_compositor_create_surface(_glfw.wl.compositor); - if (!window->wl.surface) - return GLFW_FALSE; - - wl_surface_add_listener(window->wl.surface, - &surfaceListener, - window); - - wl_surface_set_user_data(window->wl.surface, window); - - window->wl.native = wl_egl_window_create(window->wl.surface, - wndconfig->width, - wndconfig->height); - if (!window->wl.native) - return GLFW_FALSE; - - window->wl.width = wndconfig->width; - window->wl.height = wndconfig->height; - window->wl.scale = 1; - - if (!window->wl.transparent) - setOpaqueRegion(window); - - return GLFW_TRUE; -} - -static void setFullscreen(_GLFWwindow* window, _GLFWmonitor* monitor, - int refreshRate) +// Make the specified window and its video mode active on its monitor +// +static void acquireMonitor(_GLFWwindow* window) { if (window->wl.xdg.toplevel) { - xdg_toplevel_set_fullscreen( - window->wl.xdg.toplevel, - monitor->wl.output); - } - else if (window->wl.shellSurface) - { - wl_shell_surface_set_fullscreen( - window->wl.shellSurface, - WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, - refreshRate * 1000, // Convert Hz to mHz. - monitor->wl.output); + xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, + window->monitor->wl.output); } + setIdleInhibitor(window, GLFW_TRUE); - if (!window->wl.decorations.serverSide) - destroyDecorations(window); + + if (window->wl.decorations.top.surface) + destroyFallbackDecorations(window); } -static GLFWbool createShellSurface(_GLFWwindow* window) +// Remove the window and restore the original video mode +// +static void releaseMonitor(_GLFWwindow* window) { - if (!_glfw.wl.shell) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: wl_shell protocol not available"); - return GLFW_FALSE; - } - - window->wl.shellSurface = wl_shell_get_shell_surface(_glfw.wl.shell, - window->wl.surface); - if (!window->wl.shellSurface) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Shell surface creation failed"); - return GLFW_FALSE; - } - - wl_shell_surface_add_listener(window->wl.shellSurface, - &shellSurfaceListener, - window); + if (window->wl.xdg.toplevel) + xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); - if (window->wl.title) - wl_shell_surface_set_title(window->wl.shellSurface, window->wl.title); + setIdleInhibitor(window, GLFW_FALSE); - if (window->monitor) - { - setFullscreen(window, window->monitor, 0); - } - else if (window->wl.maximized) + if (window->wl.xdg.decorationMode != ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE) { - wl_shell_surface_set_maximized(window->wl.shellSurface, NULL); - setIdleInhibitor(window, GLFW_FALSE); - createDecorations(window); - } - else - { - wl_shell_surface_set_toplevel(window->wl.shellSurface); - setIdleInhibitor(window, GLFW_FALSE); - createDecorations(window); + if (window->decorated) + createFallbackDecorations(window); } - - wl_surface_commit(window->wl.surface); - - return GLFW_TRUE; } -static void xdgToplevelHandleConfigure(void* data, +static void xdgToplevelHandleConfigure(void* userData, struct xdg_toplevel* toplevel, int32_t width, int32_t height, struct wl_array* states) { - _GLFWwindow* window = data; - float aspectRatio; - float targetRatio; + _GLFWwindow* window = userData; uint32_t* state; - GLFWbool maximized = GLFW_FALSE; - GLFWbool fullscreen = GLFW_FALSE; - GLFWbool activated = GLFW_FALSE; + + window->wl.pending.activated = GLFW_FALSE; + window->wl.pending.maximized = GLFW_FALSE; + window->wl.pending.fullscreen = GLFW_FALSE; wl_array_for_each(state, states) { switch (*state) { case XDG_TOPLEVEL_STATE_MAXIMIZED: - maximized = GLFW_TRUE; + window->wl.pending.maximized = GLFW_TRUE; break; case XDG_TOPLEVEL_STATE_FULLSCREEN: - fullscreen = GLFW_TRUE; + window->wl.pending.fullscreen = GLFW_TRUE; break; case XDG_TOPLEVEL_STATE_RESIZING: break; case XDG_TOPLEVEL_STATE_ACTIVATED: - activated = GLFW_TRUE; + window->wl.pending.activated = GLFW_TRUE; break; } } - if (width != 0 && height != 0) + if (width && height) { - if (!maximized && !fullscreen) + if (window->wl.decorations.top.surface) { - if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) - { - aspectRatio = (float)width / (float)height; - targetRatio = (float)window->numer / (float)window->denom; - if (aspectRatio < targetRatio) - height = width / targetRatio; - else if (aspectRatio > targetRatio) - width = height * targetRatio; - } + window->wl.pending.width = _glfw_max(0, width - GLFW_BORDER_SIZE * 2); + window->wl.pending.height = + _glfw_max(0, height - GLFW_BORDER_SIZE - GLFW_CAPTION_HEIGHT); } - - _glfwInputWindowSize(window, width, height); - _glfwPlatformSetWindowSize(window, width, height); - _glfwInputWindowDamage(window); - } - - if (window->wl.wasFullscreen && window->autoIconify) - { - if (!activated || !fullscreen) + else { - _glfwPlatformIconifyWindow(window); - window->wl.wasFullscreen = GLFW_FALSE; + window->wl.pending.width = width; + window->wl.pending.height = height; } } - if (fullscreen && activated) - window->wl.wasFullscreen = GLFW_TRUE; - _glfwInputWindowFocus(window, activated); + else + { + window->wl.pending.width = window->wl.width; + window->wl.pending.height = window->wl.height; + } } -static void xdgToplevelHandleClose(void* data, +static void xdgToplevelHandleClose(void* userData, struct xdg_toplevel* toplevel) { - _GLFWwindow* window = data; + _GLFWwindow* window = userData; _glfwInputWindowCloseRequest(window); } -static const struct xdg_toplevel_listener xdgToplevelListener = { +static const struct xdg_toplevel_listener xdgToplevelListener = +{ xdgToplevelHandleConfigure, xdgToplevelHandleClose }; -static void xdgSurfaceHandleConfigure(void* data, +static void xdgSurfaceHandleConfigure(void* userData, struct xdg_surface* surface, uint32_t serial) { + _GLFWwindow* window = userData; + xdg_surface_ack_configure(surface, serial); -} -static const struct xdg_surface_listener xdgSurfaceListener = { - xdgSurfaceHandleConfigure -}; + if (window->wl.activated != window->wl.pending.activated) + { + window->wl.activated = window->wl.pending.activated; + if (!window->wl.activated) + { + if (window->monitor && window->autoIconify) + xdg_toplevel_set_minimized(window->wl.xdg.toplevel); + } + } -static void setXdgDecorations(_GLFWwindow* window) -{ - if (_glfw.wl.decorationManager) + if (window->wl.maximized != window->wl.pending.maximized) { - window->wl.xdg.decoration = - zxdg_decoration_manager_v1_get_toplevel_decoration( - _glfw.wl.decorationManager, window->wl.xdg.toplevel); - zxdg_toplevel_decoration_v1_add_listener(window->wl.xdg.decoration, - &xdgDecorationListener, - window); - zxdg_toplevel_decoration_v1_set_mode( - window->wl.xdg.decoration, - ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + window->wl.maximized = window->wl.pending.maximized; + _glfwInputWindowMaximize(window, window->wl.maximized); } - else + + window->wl.fullscreen = window->wl.pending.fullscreen; + + int width = window->wl.pending.width; + int height = window->wl.pending.height; + + if (!window->wl.maximized && !window->wl.fullscreen) + { + if (window->numer != GLFW_DONT_CARE && window->denom != GLFW_DONT_CARE) + { + const float aspectRatio = (float) width / (float) height; + const float targetRatio = (float) window->numer / (float) window->denom; + if (aspectRatio < targetRatio) + height = width / targetRatio; + else if (aspectRatio > targetRatio) + width = height * targetRatio; + } + } + + if (width != window->wl.width || height != window->wl.height) + { + window->wl.width = width; + window->wl.height = height; + resizeWindow(window); + + _glfwInputWindowSize(window, width, height); + + if (window->wl.visible) + _glfwInputWindowDamage(window); + } + + if (!window->wl.visible) { - window->wl.decorations.serverSide = GLFW_FALSE; - createDecorations(window); + // Allow the window to be mapped only if it either has no XDG + // decorations or they have already received a configure event + if (!window->wl.xdg.decoration || window->wl.xdg.decorationMode) + { + window->wl.visible = GLFW_TRUE; + _glfwInputWindowDamage(window); + } } } -static GLFWbool createXdgSurface(_GLFWwindow* window) +static const struct xdg_surface_listener xdgSurfaceListener = +{ + xdgSurfaceHandleConfigure +}; + +static GLFWbool createShellObjects(_GLFWwindow* window) { window->wl.xdg.surface = xdg_wm_base_get_xdg_surface(_glfw.wl.wmBase, window->wl.surface); if (!window->wl.xdg.surface) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: xdg-surface creation failed"); + "Wayland: Failed to create xdg-surface for window"); return GLFW_FALSE; } - xdg_surface_add_listener(window->wl.xdg.surface, - &xdgSurfaceListener, - window); + xdg_surface_add_listener(window->wl.xdg.surface, &xdgSurfaceListener, window); window->wl.xdg.toplevel = xdg_surface_get_toplevel(window->wl.xdg.surface); if (!window->wl.xdg.toplevel) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: xdg-toplevel creation failed"); + "Wayland: Failed to create xdg-toplevel for window"); return GLFW_FALSE; } - xdg_toplevel_add_listener(window->wl.xdg.toplevel, - &xdgToplevelListener, - window); + xdg_toplevel_add_listener(window->wl.xdg.toplevel, &xdgToplevelListener, window); if (window->wl.title) xdg_toplevel_set_title(window->wl.xdg.toplevel, window->wl.title); - if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE) - xdg_toplevel_set_min_size(window->wl.xdg.toplevel, - window->minwidth, window->minheight); - if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) - xdg_toplevel_set_max_size(window->wl.xdg.toplevel, - window->maxwidth, window->maxheight); - if (window->monitor) { - xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, - window->monitor->wl.output); + xdg_toplevel_set_fullscreen(window->wl.xdg.toplevel, window->monitor->wl.output); setIdleInhibitor(window, GLFW_TRUE); } - else if (window->wl.maximized) + else { - xdg_toplevel_set_maximized(window->wl.xdg.toplevel); + if (window->wl.maximized) + xdg_toplevel_set_maximized(window->wl.xdg.toplevel); + setIdleInhibitor(window, GLFW_FALSE); - setXdgDecorations(window); + + if (_glfw.wl.decorationManager) + { + window->wl.xdg.decoration = + zxdg_decoration_manager_v1_get_toplevel_decoration( + _glfw.wl.decorationManager, window->wl.xdg.toplevel); + zxdg_toplevel_decoration_v1_add_listener(window->wl.xdg.decoration, + &xdgDecorationListener, + window); + + uint32_t mode; + + if (window->decorated) + mode = ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE; + else + mode = ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE; + + zxdg_toplevel_decoration_v1_set_mode(window->wl.xdg.decoration, mode); + } + else + { + if (window->decorated) + createFallbackDecorations(window); + } } - else + + if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE) { - setIdleInhibitor(window, GLFW_FALSE); - setXdgDecorations(window); + int minwidth = window->minwidth; + int minheight = window->minheight; + + if (window->wl.decorations.top.surface) + { + minwidth += GLFW_BORDER_SIZE * 2; + minheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE; + } + + xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight); + } + + if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE) + { + int maxwidth = window->maxwidth; + int maxheight = window->maxheight; + + if (window->wl.decorations.top.surface) + { + maxwidth += GLFW_BORDER_SIZE * 2; + maxheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE; + } + + xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight); } wl_surface_commit(window->wl.surface); @@ -761,6 +733,56 @@ static GLFWbool createXdgSurface(_GLFWwindow* window) return GLFW_TRUE; } +static void destroyShellObjects(_GLFWwindow* window) +{ + destroyFallbackDecorations(window); + + if (window->wl.xdg.decoration) + zxdg_toplevel_decoration_v1_destroy(window->wl.xdg.decoration); + + if (window->wl.xdg.toplevel) + xdg_toplevel_destroy(window->wl.xdg.toplevel); + + if (window->wl.xdg.surface) + xdg_surface_destroy(window->wl.xdg.surface); + + window->wl.xdg.decoration = NULL; + window->wl.xdg.decorationMode = 0; + window->wl.xdg.toplevel = NULL; + window->wl.xdg.surface = NULL; +} + +static GLFWbool createNativeSurface(_GLFWwindow* window, + const _GLFWwndconfig* wndconfig, + const _GLFWfbconfig* fbconfig) +{ + window->wl.surface = wl_compositor_create_surface(_glfw.wl.compositor); + if (!window->wl.surface) + { + _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Failed to create window surface"); + return GLFW_FALSE; + } + + wl_surface_add_listener(window->wl.surface, + &surfaceListener, + window); + + wl_surface_set_user_data(window->wl.surface, window); + + window->wl.width = wndconfig->width; + window->wl.height = wndconfig->height; + window->wl.scale = 1; + window->wl.title = _glfw_strdup(wndconfig->title); + + window->wl.maximized = wndconfig->maximized; + + window->wl.transparent = fbconfig->transparent; + if (!window->wl.transparent) + setContentAreaOpaque(window); + + return GLFW_TRUE; +} + static void setCursorImage(_GLFWwindow* window, _GLFWcursorWayland* cursorWayland) { @@ -796,7 +818,7 @@ static void setCursorImage(_GLFWwindow* window, cursorWayland->yhot = image->hotspot_y; } - wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.serial, + wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial, surface, cursorWayland->xhot / scale, cursorWayland->yhot / scale); @@ -823,74 +845,979 @@ static void incrementCursorImage(_GLFWwindow* window) } } -static void handleEvents(int timeout) +static GLFWbool flushDisplay(void) +{ + while (wl_display_flush(_glfw.wl.display) == -1) + { + if (errno != EAGAIN) + return GLFW_FALSE; + + struct pollfd fd = { wl_display_get_fd(_glfw.wl.display), POLLOUT }; + + while (poll(&fd, 1, -1) == -1) + { + if (errno != EINTR && errno != EAGAIN) + return GLFW_FALSE; + } + } + + return GLFW_TRUE; +} + +static void handleEvents(double* timeout) +{ + GLFWbool event = GLFW_FALSE; + struct pollfd fds[] = + { + { wl_display_get_fd(_glfw.wl.display), POLLIN }, + { _glfw.wl.timerfd, POLLIN }, + { _glfw.wl.cursorTimerfd, POLLIN }, + }; + + while (!event) + { + while (wl_display_prepare_read(_glfw.wl.display) != 0) + wl_display_dispatch_pending(_glfw.wl.display); + + // If an error other than EAGAIN happens, we have likely been disconnected + // from the Wayland session; try to handle that the best we can. + if (!flushDisplay()) + { + wl_display_cancel_read(_glfw.wl.display); + + _GLFWwindow* window = _glfw.windowListHead; + while (window) + { + _glfwInputWindowCloseRequest(window); + window = window->next; + } + + return; + } + + if (!waitForData(fds, 3, timeout)) + { + wl_display_cancel_read(_glfw.wl.display); + return; + } + + if (fds[0].revents & POLLIN) + { + wl_display_read_events(_glfw.wl.display); + if (wl_display_dispatch_pending(_glfw.wl.display) > 0) + event = GLFW_TRUE; + } + else + wl_display_cancel_read(_glfw.wl.display); + + if (fds[1].revents & POLLIN) + { + uint64_t repeats; + + if (read(_glfw.wl.timerfd, &repeats, sizeof(repeats)) == 8) + { + for (uint64_t i = 0; i < repeats; i++) + { + _glfwInputKey(_glfw.wl.keyboardFocus, + _glfw.wl.keyboardLastKey, + _glfw.wl.keyboardLastScancode, + GLFW_PRESS, + _glfw.wl.xkb.modifiers); + _glfwInputTextWayland(_glfw.wl.keyboardFocus, + _glfw.wl.keyboardLastScancode); + } + + event = GLFW_TRUE; + } + } + + if (fds[2].revents & POLLIN) + { + uint64_t repeats; + + if (read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats)) == 8) + { + incrementCursorImage(_glfw.wl.pointerFocus); + event = GLFW_TRUE; + } + } + } +} + +// Reads the specified data offer as the specified MIME type +// +static char* readDataOfferAsString(struct wl_data_offer* offer, const char* mimeType) +{ + int fds[2]; + + if (pipe2(fds, O_CLOEXEC) == -1) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to create pipe for data offer: %s", + strerror(errno)); + return NULL; + } + + wl_data_offer_receive(offer, mimeType, fds[1]); + flushDisplay(); + close(fds[1]); + + char* string = NULL; + size_t size = 0; + size_t length = 0; + + for (;;) + { + const size_t readSize = 4096; + const size_t requiredSize = length + readSize + 1; + if (requiredSize > size) + { + char* longer = realloc(string, requiredSize); + if (!longer) + { + _glfwInputError(GLFW_OUT_OF_MEMORY, NULL); + close(fds[0]); + return NULL; + } + + string = longer; + size = requiredSize; + } + + const ssize_t result = read(fds[0], string + length, readSize); + if (result == 0) + break; + else if (result == -1) + { + if (errno == EINTR) + continue; + + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to read from data offer pipe: %s", + strerror(errno)); + close(fds[0]); + return NULL; + } + + length += result; + } + + close(fds[0]); + + string[length] = '\0'; + return string; +} + +static _GLFWwindow* findWindowFromDecorationSurface(struct wl_surface* surface, + _GLFWdecorationSideWayland* which) +{ + _GLFWdecorationSideWayland focus; + _GLFWwindow* window = _glfw.windowListHead; + if (!which) + which = &focus; + while (window) + { + if (surface == window->wl.decorations.top.surface) + { + *which = topDecoration; + break; + } + if (surface == window->wl.decorations.left.surface) + { + *which = leftDecoration; + break; + } + if (surface == window->wl.decorations.right.surface) + { + *which = rightDecoration; + break; + } + if (surface == window->wl.decorations.bottom.surface) + { + *which = bottomDecoration; + break; + } + window = window->next; + } + return window; +} + +static void pointerHandleEnter(void* userData, + struct wl_pointer* pointer, + uint32_t serial, + struct wl_surface* surface, + wl_fixed_t sx, + wl_fixed_t sy) +{ + // Happens in the case we just destroyed the surface. + if (!surface) + return; + + _GLFWdecorationSideWayland focus = mainWindow; + _GLFWwindow* window = wl_surface_get_user_data(surface); + if (!window) + { + window = findWindowFromDecorationSurface(surface, &focus); + if (!window) + return; + } + + window->wl.decorations.focus = focus; + _glfw.wl.serial = serial; + _glfw.wl.pointerEnterSerial = serial; + _glfw.wl.pointerFocus = window; + + window->wl.hovered = GLFW_TRUE; + + _glfwPlatformSetCursor(window, window->wl.currentCursor); + _glfwInputCursorEnter(window, GLFW_TRUE); +} + +static void pointerHandleLeave(void* userData, + struct wl_pointer* pointer, + uint32_t serial, + struct wl_surface* surface) +{ + _GLFWwindow* window = _glfw.wl.pointerFocus; + + if (!window) + return; + + window->wl.hovered = GLFW_FALSE; + + _glfw.wl.serial = serial; + _glfw.wl.pointerFocus = NULL; + _glfwInputCursorEnter(window, GLFW_FALSE); + _glfw.wl.cursorPreviousName = NULL; +} + +static void setCursor(_GLFWwindow* window, const char* name) +{ + struct wl_buffer* buffer; + struct wl_cursor* cursor; + struct wl_cursor_image* image; + struct wl_surface* surface = _glfw.wl.cursorSurface; + struct wl_cursor_theme* theme = _glfw.wl.cursorTheme; + int scale = 1; + + if (window->wl.scale > 1 && _glfw.wl.cursorThemeHiDPI) + { + // We only support up to scale=2 for now, since libwayland-cursor + // requires us to load a different theme for each size. + scale = 2; + theme = _glfw.wl.cursorThemeHiDPI; + } + + cursor = wl_cursor_theme_get_cursor(theme, name); + if (!cursor) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Standard cursor shape unavailable"); + return; + } + // TODO: handle animated cursors too. + image = cursor->images[0]; + + if (!image) + return; + + buffer = wl_cursor_image_get_buffer(image); + if (!buffer) + return; + wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial, + surface, + image->hotspot_x / scale, + image->hotspot_y / scale); + wl_surface_set_buffer_scale(surface, scale); + wl_surface_attach(surface, buffer, 0, 0); + wl_surface_damage(surface, 0, 0, + image->width, image->height); + wl_surface_commit(surface); + _glfw.wl.cursorPreviousName = name; +} + +static void pointerHandleMotion(void* userData, + struct wl_pointer* pointer, + uint32_t time, + wl_fixed_t sx, + wl_fixed_t sy) +{ + _GLFWwindow* window = _glfw.wl.pointerFocus; + const char* cursorName = NULL; + double x, y; + + if (!window) + return; + + if (window->cursorMode == GLFW_CURSOR_DISABLED) + return; + x = wl_fixed_to_double(sx); + y = wl_fixed_to_double(sy); + window->wl.cursorPosX = x; + window->wl.cursorPosY = y; + + switch (window->wl.decorations.focus) + { + case mainWindow: + _glfwInputCursorPos(window, x, y); + _glfw.wl.cursorPreviousName = NULL; + return; + case topDecoration: + if (y < GLFW_BORDER_SIZE) + cursorName = "n-resize"; + else + cursorName = "left_ptr"; + break; + case leftDecoration: + if (y < GLFW_BORDER_SIZE) + cursorName = "nw-resize"; + else + cursorName = "w-resize"; + break; + case rightDecoration: + if (y < GLFW_BORDER_SIZE) + cursorName = "ne-resize"; + else + cursorName = "e-resize"; + break; + case bottomDecoration: + if (x < GLFW_BORDER_SIZE) + cursorName = "sw-resize"; + else if (x > window->wl.width + GLFW_BORDER_SIZE) + cursorName = "se-resize"; + else + cursorName = "s-resize"; + break; + default: + assert(0); + } + if (_glfw.wl.cursorPreviousName != cursorName) + setCursor(window, cursorName); +} + +static void pointerHandleButton(void* userData, + struct wl_pointer* pointer, + uint32_t serial, + uint32_t time, + uint32_t button, + uint32_t state) +{ + _GLFWwindow* window = _glfw.wl.pointerFocus; + int glfwButton; + + uint32_t edges = XDG_TOPLEVEL_RESIZE_EDGE_NONE; + + if (!window) + return; + if (button == BTN_LEFT) + { + switch (window->wl.decorations.focus) + { + case mainWindow: + break; + case topDecoration: + if (window->wl.cursorPosY < GLFW_BORDER_SIZE) + edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP; + else + { + xdg_toplevel_move(window->wl.xdg.toplevel, _glfw.wl.seat, serial); + } + break; + case leftDecoration: + if (window->wl.cursorPosY < GLFW_BORDER_SIZE) + edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT; + else + edges = XDG_TOPLEVEL_RESIZE_EDGE_LEFT; + break; + case rightDecoration: + if (window->wl.cursorPosY < GLFW_BORDER_SIZE) + edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT; + else + edges = XDG_TOPLEVEL_RESIZE_EDGE_RIGHT; + break; + case bottomDecoration: + if (window->wl.cursorPosX < GLFW_BORDER_SIZE) + edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT; + else if (window->wl.cursorPosX > window->wl.width + GLFW_BORDER_SIZE) + edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT; + else + edges = XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM; + break; + default: + assert(0); + } + if (edges != XDG_TOPLEVEL_RESIZE_EDGE_NONE) + { + xdg_toplevel_resize(window->wl.xdg.toplevel, _glfw.wl.seat, + serial, edges); + return; + } + } + else if (button == BTN_RIGHT) + { + if (window->wl.decorations.focus != mainWindow && window->wl.xdg.toplevel) + { + xdg_toplevel_show_window_menu(window->wl.xdg.toplevel, + _glfw.wl.seat, serial, + window->wl.cursorPosX, + window->wl.cursorPosY); + return; + } + } + + // Don’t pass the button to the user if it was related to a decoration. + if (window->wl.decorations.focus != mainWindow) + return; + + _glfw.wl.serial = serial; + + /* Makes left, right and middle 0, 1 and 2. Overall order follows evdev + * codes. */ + glfwButton = button - BTN_LEFT; + + _glfwInputMouseClick(window, + glfwButton, + state == WL_POINTER_BUTTON_STATE_PRESSED + ? GLFW_PRESS + : GLFW_RELEASE, + _glfw.wl.xkb.modifiers); +} + +static void pointerHandleAxis(void* userData, + struct wl_pointer* pointer, + uint32_t time, + uint32_t axis, + wl_fixed_t value) +{ + _GLFWwindow* window = _glfw.wl.pointerFocus; + double x = 0.0, y = 0.0; + // Wayland scroll events are in pointer motion coordinate space (think two + // finger scroll). The factor 10 is commonly used to convert to "scroll + // step means 1.0. + const double scrollFactor = 1.0 / 10.0; + + if (!window) + return; + + assert(axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL || + axis == WL_POINTER_AXIS_VERTICAL_SCROLL); + + if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL) + x = -wl_fixed_to_double(value) * scrollFactor; + else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL) + y = -wl_fixed_to_double(value) * scrollFactor; + + _glfwInputScroll(window, x, y); +} + +static const struct wl_pointer_listener pointerListener = +{ + pointerHandleEnter, + pointerHandleLeave, + pointerHandleMotion, + pointerHandleButton, + pointerHandleAxis, +}; + +static void keyboardHandleKeymap(void* userData, + struct wl_keyboard* keyboard, + uint32_t format, + int fd, + uint32_t size) +{ + struct xkb_keymap* keymap; + struct xkb_state* state; + struct xkb_compose_table* composeTable; + struct xkb_compose_state* composeState; + char* mapStr; + const char* locale; + + if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) + { + close(fd); + return; + } + + mapStr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); + if (mapStr == MAP_FAILED) { + close(fd); + return; + } + + keymap = xkb_keymap_new_from_string(_glfw.wl.xkb.context, + mapStr, + XKB_KEYMAP_FORMAT_TEXT_V1, + 0); + munmap(mapStr, size); + close(fd); + + if (!keymap) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to compile keymap"); + return; + } + + state = xkb_state_new(keymap); + if (!state) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to create XKB state"); + xkb_keymap_unref(keymap); + return; + } + + // Look up the preferred locale, falling back to "C" as default. + locale = getenv("LC_ALL"); + if (!locale) + locale = getenv("LC_CTYPE"); + if (!locale) + locale = getenv("LANG"); + if (!locale) + locale = "C"; + + composeTable = + xkb_compose_table_new_from_locale(_glfw.wl.xkb.context, locale, + XKB_COMPOSE_COMPILE_NO_FLAGS); + if (composeTable) + { + composeState = + xkb_compose_state_new(composeTable, XKB_COMPOSE_STATE_NO_FLAGS); + xkb_compose_table_unref(composeTable); + if (composeState) + _glfw.wl.xkb.composeState = composeState; + else + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to create XKB compose state"); + } + else + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to create XKB compose table"); + } + + xkb_keymap_unref(_glfw.wl.xkb.keymap); + xkb_state_unref(_glfw.wl.xkb.state); + _glfw.wl.xkb.keymap = keymap; + _glfw.wl.xkb.state = state; + + _glfw.wl.xkb.controlIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Control"); + _glfw.wl.xkb.altIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod1"); + _glfw.wl.xkb.shiftIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Shift"); + _glfw.wl.xkb.superIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod4"); + _glfw.wl.xkb.capsLockIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Lock"); + _glfw.wl.xkb.numLockIndex = xkb_keymap_mod_get_index(_glfw.wl.xkb.keymap, "Mod2"); +} + +static void keyboardHandleEnter(void* userData, + struct wl_keyboard* keyboard, + uint32_t serial, + struct wl_surface* surface, + struct wl_array* keys) +{ + // Happens in the case we just destroyed the surface. + if (!surface) + return; + + _GLFWwindow* window = wl_surface_get_user_data(surface); + if (!window) + { + window = findWindowFromDecorationSurface(surface, NULL); + if (!window) + return; + } + + _glfw.wl.serial = serial; + _glfw.wl.keyboardFocus = window; + _glfwInputWindowFocus(window, GLFW_TRUE); +} + +static void keyboardHandleLeave(void* userData, + struct wl_keyboard* keyboard, + uint32_t serial, + struct wl_surface* surface) +{ + _GLFWwindow* window = _glfw.wl.keyboardFocus; + + if (!window) + return; + + struct itimerspec timer = {}; + timerfd_settime(_glfw.wl.timerfd, 0, &timer, NULL); + + _glfw.wl.serial = serial; + _glfw.wl.keyboardFocus = NULL; + _glfwInputWindowFocus(window, GLFW_FALSE); +} + +static int translateKey(uint32_t scancode) +{ + if (scancode < sizeof(_glfw.wl.keycodes) / sizeof(_glfw.wl.keycodes[0])) + return _glfw.wl.keycodes[scancode]; + + return GLFW_KEY_UNKNOWN; +} + +static xkb_keysym_t composeSymbol(xkb_keysym_t sym) +{ + if (sym == XKB_KEY_NoSymbol || !_glfw.wl.xkb.composeState) + return sym; + if (xkb_compose_state_feed(_glfw.wl.xkb.composeState, sym) + != XKB_COMPOSE_FEED_ACCEPTED) + return sym; + switch (xkb_compose_state_get_status(_glfw.wl.xkb.composeState)) + { + case XKB_COMPOSE_COMPOSED: + return xkb_compose_state_get_one_sym(_glfw.wl.xkb.composeState); + case XKB_COMPOSE_COMPOSING: + case XKB_COMPOSE_CANCELLED: + return XKB_KEY_NoSymbol; + case XKB_COMPOSE_NOTHING: + default: + return sym; + } +} + +GLFWbool _glfwInputTextWayland(_GLFWwindow* window, uint32_t scancode) +{ + const xkb_keysym_t* keysyms; + const xkb_keycode_t keycode = scancode + 8; + + if (xkb_state_key_get_syms(_glfw.wl.xkb.state, keycode, &keysyms) == 1) + { + const xkb_keysym_t keysym = composeSymbol(keysyms[0]); + const uint32_t codepoint = _glfwKeySym2Unicode(keysym); + if (codepoint != GLFW_INVALID_CODEPOINT) + { + const int mods = _glfw.wl.xkb.modifiers; + const int plain = !(mods & (GLFW_MOD_CONTROL | GLFW_MOD_ALT)); + _glfwInputChar(window, codepoint, mods, plain); + } + } + + return xkb_keymap_key_repeats(_glfw.wl.xkb.keymap, keycode); +} + +static void keyboardHandleKey(void* userData, + struct wl_keyboard* keyboard, + uint32_t serial, + uint32_t time, + uint32_t scancode, + uint32_t state) +{ + _GLFWwindow* window = _glfw.wl.keyboardFocus; + if (!window) + return; + + const int key = translateKey(scancode); + const int action = + state == WL_KEYBOARD_KEY_STATE_PRESSED ? GLFW_PRESS : GLFW_RELEASE; + + _glfw.wl.serial = serial; + _glfwInputKey(window, key, scancode, action, _glfw.wl.xkb.modifiers); + + struct itimerspec timer = {}; + + if (action == GLFW_PRESS) + { + const GLFWbool shouldRepeat = _glfwInputTextWayland(window, scancode); + + if (shouldRepeat && _glfw.wl.keyboardRepeatRate > 0) + { + _glfw.wl.keyboardLastKey = key; + _glfw.wl.keyboardLastScancode = scancode; + if (_glfw.wl.keyboardRepeatRate > 1) + timer.it_interval.tv_nsec = 1000000000 / _glfw.wl.keyboardRepeatRate; + else + timer.it_interval.tv_sec = 1; + + timer.it_value.tv_sec = _glfw.wl.keyboardRepeatDelay / 1000; + timer.it_value.tv_nsec = (_glfw.wl.keyboardRepeatDelay % 1000) * 1000000; + } + } + + timerfd_settime(_glfw.wl.timerfd, 0, &timer, NULL); +} + +static void keyboardHandleModifiers(void* userData, + struct wl_keyboard* keyboard, + uint32_t serial, + uint32_t modsDepressed, + uint32_t modsLatched, + uint32_t modsLocked, + uint32_t group) +{ + _glfw.wl.serial = serial; + + if (!_glfw.wl.xkb.keymap) + return; + + xkb_state_update_mask(_glfw.wl.xkb.state, + modsDepressed, + modsLatched, + modsLocked, + 0, + 0, + group); + + _glfw.wl.xkb.modifiers = 0; + + struct + { + xkb_mod_index_t index; + unsigned int bit; + } modifiers[] = + { + { _glfw.wl.xkb.controlIndex, GLFW_MOD_CONTROL }, + { _glfw.wl.xkb.altIndex, GLFW_MOD_ALT }, + { _glfw.wl.xkb.shiftIndex, GLFW_MOD_SHIFT }, + { _glfw.wl.xkb.superIndex, GLFW_MOD_SUPER }, + { _glfw.wl.xkb.capsLockIndex, GLFW_MOD_CAPS_LOCK }, + { _glfw.wl.xkb.numLockIndex, GLFW_MOD_NUM_LOCK } + }; + + for (size_t i = 0; i < sizeof(modifiers) / sizeof(modifiers[0]); i++) + { + if (xkb_state_mod_index_is_active(_glfw.wl.xkb.state, + modifiers[i].index, + XKB_STATE_MODS_EFFECTIVE) == 1) + { + _glfw.wl.xkb.modifiers |= modifiers[i].bit; + } + } +} + +#ifdef WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION +static void keyboardHandleRepeatInfo(void* userData, + struct wl_keyboard* keyboard, + int32_t rate, + int32_t delay) +{ + if (keyboard != _glfw.wl.keyboard) + return; + + _glfw.wl.keyboardRepeatRate = rate; + _glfw.wl.keyboardRepeatDelay = delay; +} +#endif + +static const struct wl_keyboard_listener keyboardListener = +{ + keyboardHandleKeymap, + keyboardHandleEnter, + keyboardHandleLeave, + keyboardHandleKey, + keyboardHandleModifiers, +#ifdef WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION + keyboardHandleRepeatInfo, +#endif +}; + +static void seatHandleCapabilities(void* userData, + struct wl_seat* seat, + enum wl_seat_capability caps) +{ + if ((caps & WL_SEAT_CAPABILITY_POINTER) && !_glfw.wl.pointer) + { + _glfw.wl.pointer = wl_seat_get_pointer(seat); + wl_pointer_add_listener(_glfw.wl.pointer, &pointerListener, NULL); + } + else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && _glfw.wl.pointer) + { + wl_pointer_destroy(_glfw.wl.pointer); + _glfw.wl.pointer = NULL; + } + + if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !_glfw.wl.keyboard) + { + _glfw.wl.keyboard = wl_seat_get_keyboard(seat); + wl_keyboard_add_listener(_glfw.wl.keyboard, &keyboardListener, NULL); + } + else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && _glfw.wl.keyboard) + { + wl_keyboard_destroy(_glfw.wl.keyboard); + _glfw.wl.keyboard = NULL; + } +} + +static void seatHandleName(void* userData, + struct wl_seat* seat, + const char* name) +{ +} + +static const struct wl_seat_listener seatListener = +{ + seatHandleCapabilities, + seatHandleName, +}; + +static void dataOfferHandleOffer(void* userData, + struct wl_data_offer* offer, + const char* mimeType) +{ + for (unsigned int i = 0; i < _glfw.wl.offerCount; i++) + { + if (_glfw.wl.offers[i].offer == offer) + { + if (strcmp(mimeType, "text/plain;charset=utf-8") == 0) + _glfw.wl.offers[i].text_plain_utf8 = GLFW_TRUE; + else if (strcmp(mimeType, "text/uri-list") == 0) + _glfw.wl.offers[i].text_uri_list = GLFW_TRUE; + + break; + } + } +} + +static const struct wl_data_offer_listener dataOfferListener = +{ + dataOfferHandleOffer +}; + +static void dataDeviceHandleDataOffer(void* userData, + struct wl_data_device* device, + struct wl_data_offer* offer) +{ + _GLFWofferWayland* offers = + realloc(_glfw.wl.offers, _glfw.wl.offerCount + 1); + if (!offers) + { + _glfwInputError(GLFW_OUT_OF_MEMORY, NULL); + return; + } + + _glfw.wl.offers = offers; + _glfw.wl.offerCount++; + + _glfw.wl.offers[_glfw.wl.offerCount - 1] = (_GLFWofferWayland) { offer }; + wl_data_offer_add_listener(offer, &dataOfferListener, NULL); +} + +static void dataDeviceHandleEnter(void* userData, + struct wl_data_device* device, + uint32_t serial, + struct wl_surface* surface, + wl_fixed_t x, + wl_fixed_t y, + struct wl_data_offer* offer) +{ + if (_glfw.wl.dragOffer) + { + wl_data_offer_destroy(_glfw.wl.dragOffer); + _glfw.wl.dragOffer = NULL; + _glfw.wl.dragFocus = NULL; + } + + for (unsigned int i = 0; i < _glfw.wl.offerCount; i++) + { + if (_glfw.wl.offers[i].offer == offer) + { + _GLFWwindow* window = NULL; + + if (surface) + window = wl_surface_get_user_data(surface); + + if (window && _glfw.wl.offers[i].text_uri_list) + { + _glfw.wl.dragOffer = offer; + _glfw.wl.dragFocus = window; + _glfw.wl.dragSerial = serial; + } + + _glfw.wl.offers[i] = _glfw.wl.offers[_glfw.wl.offerCount - 1]; + _glfw.wl.offerCount--; + break; + } + } + + if (_glfw.wl.dragOffer) + wl_data_offer_accept(offer, serial, "text/uri-list"); + else + { + wl_data_offer_accept(offer, serial, NULL); + wl_data_offer_destroy(offer); + } +} + +static void dataDeviceHandleLeave(void* userData, + struct wl_data_device* device) +{ + if (_glfw.wl.dragOffer) + { + wl_data_offer_destroy(_glfw.wl.dragOffer); + _glfw.wl.dragOffer = NULL; + _glfw.wl.dragFocus = NULL; + } +} + +static void dataDeviceHandleMotion(void* userData, + struct wl_data_device* device, + uint32_t time, + wl_fixed_t x, + wl_fixed_t y) { - struct wl_display* display = _glfw.wl.display; - struct pollfd fds[] = { - { wl_display_get_fd(display), POLLIN }, - { _glfw.wl.timerfd, POLLIN }, - { _glfw.wl.cursorTimerfd, POLLIN }, - }; - ssize_t read_ret; - uint64_t repeats, i; - - while (wl_display_prepare_read(display) != 0) - wl_display_dispatch_pending(display); +} - // If an error different from EAGAIN happens, we have likely been - // disconnected from the Wayland session, try to handle that the best we - // can. - if (wl_display_flush(display) < 0 && errno != EAGAIN) - { - _GLFWwindow* window = _glfw.windowListHead; - while (window) - { - _glfwInputWindowCloseRequest(window); - window = window->next; - } - wl_display_cancel_read(display); +static void dataDeviceHandleDrop(void* userData, + struct wl_data_device* device) +{ + if (!_glfw.wl.dragOffer) return; - } - if (poll(fds, 3, timeout) > 0) + char* string = readDataOfferAsString(_glfw.wl.dragOffer, "text/uri-list"); + if (string) { - if (fds[0].revents & POLLIN) - { - wl_display_read_events(display); - wl_display_dispatch_pending(display); - } - else - { - wl_display_cancel_read(display); - } + int count; + char** paths = _glfwParseUriList(string, &count); + if (paths) + _glfwInputDrop(_glfw.wl.dragFocus, count, (const char**) paths); - if (fds[1].revents & POLLIN) - { - read_ret = read(_glfw.wl.timerfd, &repeats, sizeof(repeats)); - if (read_ret != 8) - return; + for (int i = 0; i < count; i++) + free(paths[i]); - for (i = 0; i < repeats; ++i) - _glfwInputKey(_glfw.wl.keyboardFocus, _glfw.wl.keyboardLastKey, - _glfw.wl.keyboardLastScancode, GLFW_REPEAT, - _glfw.wl.xkb.modifiers); - } + free(paths); + } - if (fds[2].revents & POLLIN) - { - read_ret = read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats)); - if (read_ret != 8) - return; + free(string); +} - incrementCursorImage(_glfw.wl.pointerFocus); - } +static void dataDeviceHandleSelection(void* userData, + struct wl_data_device* device, + struct wl_data_offer* offer) +{ + if (_glfw.wl.selectionOffer) + { + wl_data_offer_destroy(_glfw.wl.selectionOffer); + _glfw.wl.selectionOffer = NULL; } - else + + for (unsigned int i = 0; i < _glfw.wl.offerCount; i++) { - wl_display_cancel_read(display); + if (_glfw.wl.offers[i].offer == offer) + { + if (_glfw.wl.offers[i].text_plain_utf8) + _glfw.wl.selectionOffer = offer; + else + wl_data_offer_destroy(offer); + + _glfw.wl.offers[i] = _glfw.wl.offers[_glfw.wl.offerCount - 1]; + _glfw.wl.offerCount--; + break; + } } } +const struct wl_data_device_listener dataDeviceListener = +{ + dataDeviceHandleDataOffer, + dataDeviceHandleEnter, + dataDeviceHandleLeave, + dataDeviceHandleMotion, + dataDeviceHandleDrop, + dataDeviceHandleSelection, +}; + // Translates a GLFW standard cursor to a theme cursor name // static char *translateCursorShape(int shape) @@ -913,6 +1840,17 @@ static char *translateCursorShape(int shape) return NULL; } +void _glfwAddSeatListenerWayland(struct wl_seat* seat) +{ + wl_seat_add_listener(seat, &seatListener, NULL); +} + +void _glfwAddDataDeviceListenerWayland(struct wl_data_device* device) +{ + wl_data_device_add_listener(device, &dataDeviceListener, NULL); +} + + ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// @@ -922,9 +1860,7 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { - window->wl.transparent = fbconfig->transparent; - - if (!createSurface(window, wndconfig)) + if (!createNativeSurface(window, wndconfig, fbconfig)) return GLFW_FALSE; if (ctxconfig->client != GLFW_NO_API) @@ -932,6 +1868,16 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (ctxconfig->source == GLFW_EGL_CONTEXT_API || ctxconfig->source == GLFW_NATIVE_CONTEXT_API) { + window->wl.egl.window = wl_egl_window_create(window->wl.surface, + wndconfig->width, + wndconfig->height); + if (!window->wl.egl.window) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to create EGL window"); + return GLFW_FALSE; + } + if (!_glfwInitEGL()) return GLFW_FALSE; if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig)) @@ -944,40 +1890,17 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } - } - - if (wndconfig->title) - window->wl.title = _glfw_strdup(wndconfig->title); - - if (wndconfig->visible) - { - if (_glfw.wl.wmBase) - { - if (!createXdgSurface(window)) - return GLFW_FALSE; - } - else - { - if (!createShellSurface(window)) - return GLFW_FALSE; - } - window->wl.visible = GLFW_TRUE; + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } - else + + if (window->monitor || wndconfig->visible) { - window->wl.xdg.surface = NULL; - window->wl.xdg.toplevel = NULL; - window->wl.shellSurface = NULL; - window->wl.visible = GLFW_FALSE; + if (!createShellObjects(window)) + return GLFW_FALSE; } - window->wl.currentCursor = NULL; - - window->wl.monitors = calloc(1, sizeof(_GLFWmonitor*)); - window->wl.monitorsCount = 0; - window->wl.monitorsSize = 1; - return GLFW_TRUE; } @@ -1000,24 +1923,13 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window) if (window->context.destroy) window->context.destroy(window); - destroyDecorations(window); - if (window->wl.xdg.decoration) - zxdg_toplevel_decoration_v1_destroy(window->wl.xdg.decoration); + destroyShellObjects(window); if (window->wl.decorations.buffer) wl_buffer_destroy(window->wl.decorations.buffer); - if (window->wl.native) - wl_egl_window_destroy(window->wl.native); - - if (window->wl.shellSurface) - wl_shell_surface_destroy(window->wl.shellSurface); - - if (window->wl.xdg.toplevel) - xdg_toplevel_destroy(window->wl.xdg.toplevel); - - if (window->wl.xdg.surface) - xdg_surface_destroy(window->wl.xdg.surface); + if (window->wl.egl.window) + wl_egl_window_destroy(window->wl.egl.window); if (window->wl.surface) wl_surface_destroy(window->wl.surface); @@ -1033,8 +1945,6 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) window->wl.title = _glfw_strdup(title); if (window->wl.xdg.toplevel) xdg_toplevel_set_title(window->wl.xdg.toplevel, title); - else if (window->wl.shellSurface) - wl_shell_surface_set_title(window->wl.shellSurface, title); } void _glfwPlatformSetWindowIcon(_GLFWwindow* window, @@ -1071,64 +1981,95 @@ void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { - window->wl.width = width; - window->wl.height = height; - resizeWindow(window); + if (window->monitor) + { + // Video mode setting is not available on Wayland + } + else + { + window->wl.width = width; + window->wl.height = height; + resizeWindow(window); + } } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight) { - if (_glfw.wl.wmBase) + if (window->wl.xdg.toplevel) { - if (window->wl.xdg.toplevel) + if (minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE) + minwidth = minheight = 0; + else { - if (minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE) - minwidth = minheight = 0; - if (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE) - maxwidth = maxheight = 0; - xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight); - xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight); - wl_surface_commit(window->wl.surface); + if (window->wl.decorations.top.surface) + { + minwidth += GLFW_BORDER_SIZE * 2; + minheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE; + } } - } - else - { - // TODO: find out how to trigger a resize. - // The actual limits are checked in the wl_shell_surface::configure handler. + + if (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE) + maxwidth = maxheight = 0; + else + { + if (window->wl.decorations.top.surface) + { + maxwidth += GLFW_BORDER_SIZE * 2; + maxheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE; + } + } + + xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight); + xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight); + wl_surface_commit(window->wl.surface); } } void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom) { - // TODO: find out how to trigger a resize. - // The actual limits are checked in the wl_shell_surface::configure handler. + if (window->wl.maximized || window->wl.fullscreen) + return; + + if (numer != GLFW_DONT_CARE && denom != GLFW_DONT_CARE) + { + const float aspectRatio = (float) window->wl.width / (float) window->wl.height; + const float targetRatio = (float) numer / (float) denom; + if (aspectRatio < targetRatio) + window->wl.height = window->wl.width / targetRatio; + else if (aspectRatio > targetRatio) + window->wl.width = window->wl.height * targetRatio; + + resizeWindow(window); + } } void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { _glfwPlatformGetWindowSize(window, width, height); - *width *= window->wl.scale; - *height *= window->wl.scale; + if (width) + *width *= window->wl.scale; + if (height) + *height *= window->wl.scale; } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom) { - if (window->decorated && !window->monitor && !window->wl.decorations.serverSide) + if (window->decorated && !window->monitor && window->wl.decorations.top.surface) { if (top) - *top = _GLFW_DECORATION_TOP; + *top = GLFW_CAPTION_HEIGHT; if (left) - *left = _GLFW_DECORATION_WIDTH; + *left = GLFW_BORDER_SIZE; if (right) - *right = _GLFW_DECORATION_WIDTH; + *right = GLFW_BORDER_SIZE; if (bottom) - *bottom = _GLFW_DECORATION_WIDTH; + *bottom = GLFW_BORDER_SIZE; } } @@ -1143,79 +2084,59 @@ void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, void _glfwPlatformIconifyWindow(_GLFWwindow* window) { - if (_glfw.wl.wmBase) - { - if (window->wl.xdg.toplevel) - xdg_toplevel_set_minimized(window->wl.xdg.toplevel); - } - else - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Iconify window not supported on wl_shell"); - } + if (window->wl.xdg.toplevel) + xdg_toplevel_set_minimized(window->wl.xdg.toplevel); } void _glfwPlatformRestoreWindow(_GLFWwindow* window) { - if (window->wl.xdg.toplevel) + if (window->monitor) { - if (window->monitor) - xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); - if (window->wl.maximized) - xdg_toplevel_unset_maximized(window->wl.xdg.toplevel); // There is no way to unset minimized, or even to know if we are // minimized, so there is nothing to do here. } - else if (window->wl.shellSurface) + else { - if (window->monitor || window->wl.maximized) - wl_shell_surface_set_toplevel(window->wl.shellSurface); + // We assume we are not minimized and act only on maximization + + if (window->wl.maximized) + { + if (window->wl.xdg.toplevel) + xdg_toplevel_unset_maximized(window->wl.xdg.toplevel); + else + window->wl.maximized = GLFW_FALSE; + } } - _glfwInputWindowMonitor(window, NULL); - window->wl.maximized = GLFW_FALSE; } void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { if (window->wl.xdg.toplevel) - { xdg_toplevel_set_maximized(window->wl.xdg.toplevel); - } - else if (window->wl.shellSurface) - { - // Let the compositor select the best output. - wl_shell_surface_set_maximized(window->wl.shellSurface, NULL); - } - window->wl.maximized = GLFW_TRUE; + else + window->wl.maximized = GLFW_TRUE; } void _glfwPlatformShowWindow(_GLFWwindow* window) { - if (!window->wl.visible) + if (!window->wl.xdg.toplevel) { - if (_glfw.wl.wmBase) - createXdgSurface(window); - else if (!window->wl.shellSurface) - createShellSurface(window); - window->wl.visible = GLFW_TRUE; + // NOTE: The XDG/shell surface is created here so command-line applications + // with off-screen windows do not appear in for example the Unity dock + createShellObjects(window); } } void _glfwPlatformHideWindow(_GLFWwindow* window) { - if (window->wl.xdg.toplevel) - { - xdg_toplevel_destroy(window->wl.xdg.toplevel); - xdg_surface_destroy(window->wl.xdg.surface); - window->wl.xdg.toplevel = NULL; - window->wl.xdg.surface = NULL; - } - else if (window->wl.shellSurface) + if (window->wl.visible) { - wl_shell_surface_destroy(window->wl.shellSurface); - window->wl.shellSurface = NULL; + window->wl.visible = GLFW_FALSE; + destroyShellObjects(window); + + wl_surface_attach(window->wl.surface, NULL, 0, 0); + wl_surface_commit(window->wl.surface); } - window->wl.visible = GLFW_FALSE; } void _glfwPlatformRequestWindowAttention(_GLFWwindow* window) @@ -1237,21 +2158,23 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, int width, int height, int refreshRate) { - if (monitor) - { - setFullscreen(window, monitor, refreshRate); - } - else + if (window->monitor == monitor) { - if (window->wl.xdg.toplevel) - xdg_toplevel_unset_fullscreen(window->wl.xdg.toplevel); - else if (window->wl.shellSurface) - wl_shell_surface_set_toplevel(window->wl.shellSurface); - setIdleInhibitor(window, GLFW_FALSE); - if (!_glfw.wl.decorationManager) - createDecorations(window); + if (!monitor) + _glfwPlatformSetWindowSize(window, width, height); + + return; } + + if (window->monitor) + releaseMonitor(window); + _glfwInputWindowMonitor(window, monitor); + + if (window->monitor) + acquireMonitor(window); + else + _glfwPlatformSetWindowSize(window, width, height); } int _glfwPlatformWindowFocused(_GLFWwindow* window) @@ -1261,8 +2184,7 @@ int _glfwPlatformWindowFocused(_GLFWwindow* window) int _glfwPlatformWindowIconified(_GLFWwindow* window) { - // wl_shell doesn't have any iconified concept, and xdg-shell doesn’t give - // any way to request whether a surface is iconified. + // xdg-shell doesn’t give any way to request whether a surface is iconified return GLFW_FALSE; } @@ -1295,12 +2217,23 @@ void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled) void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled) { - if (!window->monitor) + if (window->wl.xdg.decoration) + { + uint32_t mode; + + if (enabled) + mode = ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE; + else + mode = ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE; + + zxdg_toplevel_decoration_v1_set_mode(window->wl.xdg.decoration, mode); + } + else { if (enabled) - createDecorations(window); + createFallbackDecorations(window); else - destroyDecorations(window); + destroyFallbackDecorations(window); } } @@ -1320,7 +2253,7 @@ void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity) { } -void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window, GLFWbool enabled) +void _glfwPlatformSetRawMouseMotion(_GLFWwindow* window, GLFWbool enabled) { // This is handled in relativePointerHandleRelativeMotion } @@ -1332,22 +2265,24 @@ GLFWbool _glfwPlatformRawMouseMotionSupported(void) void _glfwPlatformPollEvents(void) { - handleEvents(0); + double timeout = 0.0; + handleEvents(&timeout); } void _glfwPlatformWaitEvents(void) { - handleEvents(-1); + handleEvents(NULL); } void _glfwPlatformWaitEventsTimeout(double timeout) { - handleEvents((int) (timeout * 1e3)); + handleEvents(&timeout); } void _glfwPlatformPostEmptyEvent(void) { wl_display_sync(_glfw.wl.display); + flushDisplay(); } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) @@ -1367,7 +2302,6 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) zwp_locked_pointer_v1_set_cursor_position_hint( window->wl.pointerLock.lockedPointer, wl_fixed_from_double(x), wl_fixed_from_double(y)); - wl_surface_commit(window->wl.surface); } } @@ -1378,8 +2312,57 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) const char* _glfwPlatformGetScancodeName(int scancode) { - // TODO - return NULL; + if (scancode < 0 || scancode > 255 || + _glfw.wl.keycodes[scancode] == GLFW_KEY_UNKNOWN) + { + _glfwInputError(GLFW_INVALID_VALUE, + "Wayland: Invalid scancode %i", + scancode); + return NULL; + } + + const int key = _glfw.wl.keycodes[scancode]; + const xkb_keycode_t keycode = scancode + 8; + const xkb_layout_index_t layout = + xkb_state_key_get_layout(_glfw.wl.xkb.state, keycode); + if (layout == XKB_LAYOUT_INVALID) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to retrieve layout for key name"); + return NULL; + } + + const xkb_keysym_t* keysyms = NULL; + xkb_keymap_key_get_syms_by_level(_glfw.wl.xkb.keymap, + keycode, + layout, + 0, + &keysyms); + if (keysyms == NULL) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to retrieve keysym for key name"); + return NULL; + } + + const uint32_t codepoint = _glfwKeySym2Unicode(keysyms[0]); + if (codepoint == GLFW_INVALID_CODEPOINT) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to retrieve codepoint for key name"); + return NULL; + } + + const size_t count = _glfwEncodeUTF8(_glfw.wl.keynames[key], codepoint); + if (count == 0) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "Wayland: Failed to encode codepoint for key name"); + return NULL; + } + + _glfw.wl.keynames[key][count] = '\0'; + return _glfw.wl.keynames[key]; } int _glfwPlatformGetKeyScancode(int key) @@ -1439,7 +2422,7 @@ void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) wl_buffer_destroy(cursor->wl.buffer); } -static void relativePointerHandleRelativeMotion(void* data, +static void relativePointerHandleRelativeMotion(void* userData, struct zwp_relative_pointer_v1* pointer, uint32_t timeHi, uint32_t timeLo, @@ -1448,7 +2431,7 @@ static void relativePointerHandleRelativeMotion(void* data, wl_fixed_t dxUnaccel, wl_fixed_t dyUnaccel) { - _GLFWwindow* window = data; + _GLFWwindow* window = userData; double xpos = window->virtualCursorPosX; double ypos = window->virtualCursorPosY; @@ -1469,11 +2452,12 @@ static void relativePointerHandleRelativeMotion(void* data, _glfwInputCursorPos(window, xpos, ypos); } -static const struct zwp_relative_pointer_v1_listener relativePointerListener = { +static const struct zwp_relative_pointer_v1_listener relativePointerListener = +{ relativePointerHandleRelativeMotion }; -static void lockedPointerHandleLocked(void* data, +static void lockedPointerHandleLocked(void* userData, struct zwp_locked_pointer_v1* lockedPointer) { } @@ -1494,12 +2478,13 @@ static void unlockPointer(_GLFWwindow* window) static void lockPointer(_GLFWwindow* window); -static void lockedPointerHandleUnlocked(void* data, +static void lockedPointerHandleUnlocked(void* userData, struct zwp_locked_pointer_v1* lockedPointer) { } -static const struct zwp_locked_pointer_v1_listener lockedPointerListener = { +static const struct zwp_locked_pointer_v1_listener lockedPointerListener = +{ lockedPointerHandleLocked, lockedPointerHandleUnlocked }; @@ -1538,7 +2523,7 @@ static void lockPointer(_GLFWwindow* window) window->wl.pointerLock.relativePointer = relativePointer; window->wl.pointerLock.lockedPointer = lockedPointer; - wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.serial, + wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial, NULL, 0, 0); } @@ -1602,15 +2587,15 @@ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor) } else if (window->cursorMode == GLFW_CURSOR_HIDDEN) { - wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.serial, NULL, 0, 0); + wl_pointer_set_cursor(_glfw.wl.pointer, _glfw.wl.pointerEnterSerial, NULL, 0, 0); } } -static void dataSourceHandleTarget(void* data, - struct wl_data_source* dataSource, +static void dataSourceHandleTarget(void* userData, + struct wl_data_source* source, const char* mimeType) { - if (_glfw.wl.dataSource != dataSource) + if (_glfw.wl.selectionSource != source) { _glfwInputError(GLFW_PLATFORM_ERROR, "Wayland: Unknown clipboard data source"); @@ -1618,71 +2603,56 @@ static void dataSourceHandleTarget(void* data, } } -static void dataSourceHandleSend(void* data, - struct wl_data_source* dataSource, +static void dataSourceHandleSend(void* userData, + struct wl_data_source* source, const char* mimeType, int fd) { - const char* string = _glfw.wl.clipboardSendString; - size_t len = _glfw.wl.clipboardSendSize; - int ret; - - if (_glfw.wl.dataSource != dataSource) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Unknown clipboard data source"); - return; - } - - if (!string) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Copy requested from an invalid string"); - return; - } - - if (strcmp(mimeType, "text/plain;charset=utf-8") != 0) + // Ignore it if this is an outdated or invalid request + if (_glfw.wl.selectionSource != source || + strcmp(mimeType, "text/plain;charset=utf-8") != 0) { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Wrong MIME type asked from clipboard"); close(fd); return; } - while (len > 0) + char* string = _glfw.wl.clipboardString; + size_t length = strlen(string); + + while (length > 0) { - ret = write(fd, string, len); - if (ret == -1 && errno == EINTR) - continue; - if (ret == -1) + const ssize_t result = write(fd, string, length); + if (result == -1) { - // TODO: also report errno maybe. + if (errno == EINTR) + continue; + _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Error while writing the clipboard"); - close(fd); - return; + "Wayland: Error while writing the clipboard: %s", + strerror(errno)); + break; } - len -= ret; + + length -= result; + string += result; } + close(fd); } -static void dataSourceHandleCancelled(void* data, - struct wl_data_source* dataSource) +static void dataSourceHandleCancelled(void* userData, + struct wl_data_source* source) { - wl_data_source_destroy(dataSource); + wl_data_source_destroy(source); - if (_glfw.wl.dataSource != dataSource) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Unknown clipboard data source"); + if (_glfw.wl.selectionSource != source) return; - } - _glfw.wl.dataSource = NULL; + _glfw.wl.selectionSource = NULL; } -static const struct wl_data_source_listener dataSourceListener = { +static const struct wl_data_source_listener dataSourceListener = +{ dataSourceHandleTarget, dataSourceHandleSend, dataSourceHandleCancelled, @@ -1690,124 +2660,54 @@ static const struct wl_data_source_listener dataSourceListener = { void _glfwPlatformSetClipboardString(const char* string) { - if (_glfw.wl.dataSource) + if (_glfw.wl.selectionSource) { - wl_data_source_destroy(_glfw.wl.dataSource); - _glfw.wl.dataSource = NULL; + wl_data_source_destroy(_glfw.wl.selectionSource); + _glfw.wl.selectionSource = NULL; } - if (_glfw.wl.clipboardSendString) + char* copy = _glfw_strdup(string); + if (!copy) { - free(_glfw.wl.clipboardSendString); - _glfw.wl.clipboardSendString = NULL; - } - - _glfw.wl.clipboardSendString = strdup(string); - if (!_glfw.wl.clipboardSendString) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Impossible to allocate clipboard string"); + _glfwInputError(GLFW_OUT_OF_MEMORY, NULL); return; } - _glfw.wl.clipboardSendSize = strlen(string); - _glfw.wl.dataSource = + + free(_glfw.wl.clipboardString); + _glfw.wl.clipboardString = copy; + + _glfw.wl.selectionSource = wl_data_device_manager_create_data_source(_glfw.wl.dataDeviceManager); - if (!_glfw.wl.dataSource) + if (!_glfw.wl.selectionSource) { _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Impossible to create clipboard source"); - free(_glfw.wl.clipboardSendString); + "Wayland: Failed to create clipboard data source"); return; } - wl_data_source_add_listener(_glfw.wl.dataSource, + wl_data_source_add_listener(_glfw.wl.selectionSource, &dataSourceListener, NULL); - wl_data_source_offer(_glfw.wl.dataSource, "text/plain;charset=utf-8"); + wl_data_source_offer(_glfw.wl.selectionSource, "text/plain;charset=utf-8"); wl_data_device_set_selection(_glfw.wl.dataDevice, - _glfw.wl.dataSource, + _glfw.wl.selectionSource, _glfw.wl.serial); } -static GLFWbool growClipboardString(void) -{ - char* clipboard = _glfw.wl.clipboardString; - - clipboard = realloc(clipboard, _glfw.wl.clipboardSize * 2); - if (!clipboard) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Impossible to grow clipboard string"); - return GLFW_FALSE; - } - _glfw.wl.clipboardString = clipboard; - _glfw.wl.clipboardSize = _glfw.wl.clipboardSize * 2; - return GLFW_TRUE; -} - const char* _glfwPlatformGetClipboardString(void) { - int fds[2]; - int ret; - size_t len = 0; - - if (!_glfw.wl.dataOffer) + if (!_glfw.wl.selectionOffer) { _glfwInputError(GLFW_FORMAT_UNAVAILABLE, - "No clipboard data has been sent yet"); - return NULL; - } - - ret = pipe2(fds, O_CLOEXEC); - if (ret < 0) - { - // TODO: also report errno maybe? - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Impossible to create clipboard pipe fds"); + "Wayland: No clipboard data available"); return NULL; } - wl_data_offer_receive(_glfw.wl.dataOffer, "text/plain;charset=utf-8", fds[1]); - close(fds[1]); - - // XXX: this is a huge hack, this function shouldn’t be synchronous! - handleEvents(-1); - - while (1) - { - // Grow the clipboard if we need to paste something bigger, there is no - // shrink operation yet. - if (len + 4096 > _glfw.wl.clipboardSize) - { - if (!growClipboardString()) - { - close(fds[0]); - return NULL; - } - } + if (_glfw.wl.selectionSource) + return _glfw.wl.clipboardString; - // Then read from the fd to the clipboard, handling all known errors. - ret = read(fds[0], _glfw.wl.clipboardString + len, 4096); - if (ret == 0) - break; - if (ret == -1 && errno == EINTR) - continue; - if (ret == -1) - { - // TODO: also report errno maybe. - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Impossible to read from clipboard fd"); - close(fds[0]); - return NULL; - } - len += ret; - } - close(fds[0]); - if (len + 1 > _glfw.wl.clipboardSize) - { - if (!growClipboardString()) - return NULL; - } - _glfw.wl.clipboardString[len] = '\0'; + free(_glfw.wl.clipboardString); + _glfw.wl.clipboardString = + readDataOfferAsString(_glfw.wl.selectionOffer, "text/plain;charset=utf-8"); return _glfw.wl.clipboardString; } diff --git a/third_party/penumbra/vendor/glfw/src/x11_init.c b/third_party/penumbra/vendor/glfw/src/x11_init.c index 2f220ec5087..6049904ae41 100644 --- a/third_party/penumbra/vendor/glfw/src/x11_init.c +++ b/third_party/penumbra/vendor/glfw/src/x11_init.c @@ -36,26 +36,21 @@ #include #include #include +#include +#include +#include +#include -// Translate an X11 key code to a GLFW key code. +// Translate the X11 KeySyms for a key to a GLFW key code +// NOTE: This is only used as a fallback, in case the XKB method fails +// It is layout-dependent and will fail partially on most non-US layouts // -static int translateKeyCode(int scancode) +static int translateKeySyms(const KeySym* keysyms, int width) { - int keySym; - - // Valid key code range is [8,255], according to the Xlib manual - if (scancode < 8 || scancode > 255) - return GLFW_KEY_UNKNOWN; - - if (_glfw.x11.xkb.available) + if (width > 1) { - // Try secondary keysym, for numeric keypad keys - // Note: This way we always force "NumLock = ON", which is intentional - // since the returned key code should correspond to a physical - // location. - keySym = XkbKeycodeToKeysym(_glfw.x11.display, scancode, _glfw.x11.xkb.group, 1); - switch (keySym) + switch (keysyms[1]) { case XK_KP_0: return GLFW_KEY_KP_0; case XK_KP_1: return GLFW_KEY_KP_1; @@ -73,22 +68,9 @@ static int translateKeyCode(int scancode) case XK_KP_Enter: return GLFW_KEY_KP_ENTER; default: break; } - - // Now try primary keysym for function keys (non-printable keys) - // These should not depend on the current keyboard layout - keySym = XkbKeycodeToKeysym(_glfw.x11.display, scancode, _glfw.x11.xkb.group, 0); } - else - { - int dummy; - KeySym* keySyms; - keySyms = XGetKeyboardMapping(_glfw.x11.display, scancode, 1, &dummy); - keySym = keySyms[0]; - XFree(keySyms); - } - - switch (keySym) + switch (keysyms[0]) { case XK_Escape: return GLFW_KEY_ESCAPE; case XK_Tab: return GLFW_KEY_TAB; @@ -232,7 +214,7 @@ static int translateKeyCode(int scancode) // static void createKeyTables(void) { - int scancode, key; + int scancode, scancodeMin, scancodeMax; memset(_glfw.x11.keycodes, -1, sizeof(_glfw.x11.keycodes)); memset(_glfw.x11.scancodes, -1, sizeof(_glfw.x11.scancodes)); @@ -242,89 +224,217 @@ static void createKeyTables(void) // Use XKB to determine physical key locations independently of the // current keyboard layout - char name[XkbKeyNameLength + 1]; XkbDescPtr desc = XkbGetMap(_glfw.x11.display, 0, XkbUseCoreKbd); - XkbGetNames(_glfw.x11.display, XkbKeyNamesMask, desc); + XkbGetNames(_glfw.x11.display, XkbKeyNamesMask | XkbKeyAliasesMask, desc); + + scancodeMin = desc->min_key_code; + scancodeMax = desc->max_key_code; + + const struct + { + int key; + char* name; + } keymap[] = + { + { GLFW_KEY_GRAVE_ACCENT, "TLDE" }, + { GLFW_KEY_1, "AE01" }, + { GLFW_KEY_2, "AE02" }, + { GLFW_KEY_3, "AE03" }, + { GLFW_KEY_4, "AE04" }, + { GLFW_KEY_5, "AE05" }, + { GLFW_KEY_6, "AE06" }, + { GLFW_KEY_7, "AE07" }, + { GLFW_KEY_8, "AE08" }, + { GLFW_KEY_9, "AE09" }, + { GLFW_KEY_0, "AE10" }, + { GLFW_KEY_MINUS, "AE11" }, + { GLFW_KEY_EQUAL, "AE12" }, + { GLFW_KEY_Q, "AD01" }, + { GLFW_KEY_W, "AD02" }, + { GLFW_KEY_E, "AD03" }, + { GLFW_KEY_R, "AD04" }, + { GLFW_KEY_T, "AD05" }, + { GLFW_KEY_Y, "AD06" }, + { GLFW_KEY_U, "AD07" }, + { GLFW_KEY_I, "AD08" }, + { GLFW_KEY_O, "AD09" }, + { GLFW_KEY_P, "AD10" }, + { GLFW_KEY_LEFT_BRACKET, "AD11" }, + { GLFW_KEY_RIGHT_BRACKET, "AD12" }, + { GLFW_KEY_A, "AC01" }, + { GLFW_KEY_S, "AC02" }, + { GLFW_KEY_D, "AC03" }, + { GLFW_KEY_F, "AC04" }, + { GLFW_KEY_G, "AC05" }, + { GLFW_KEY_H, "AC06" }, + { GLFW_KEY_J, "AC07" }, + { GLFW_KEY_K, "AC08" }, + { GLFW_KEY_L, "AC09" }, + { GLFW_KEY_SEMICOLON, "AC10" }, + { GLFW_KEY_APOSTROPHE, "AC11" }, + { GLFW_KEY_Z, "AB01" }, + { GLFW_KEY_X, "AB02" }, + { GLFW_KEY_C, "AB03" }, + { GLFW_KEY_V, "AB04" }, + { GLFW_KEY_B, "AB05" }, + { GLFW_KEY_N, "AB06" }, + { GLFW_KEY_M, "AB07" }, + { GLFW_KEY_COMMA, "AB08" }, + { GLFW_KEY_PERIOD, "AB09" }, + { GLFW_KEY_SLASH, "AB10" }, + { GLFW_KEY_BACKSLASH, "BKSL" }, + { GLFW_KEY_WORLD_1, "LSGT" }, + { GLFW_KEY_SPACE, "SPCE" }, + { GLFW_KEY_ESCAPE, "ESC" }, + { GLFW_KEY_ENTER, "RTRN" }, + { GLFW_KEY_TAB, "TAB" }, + { GLFW_KEY_BACKSPACE, "BKSP" }, + { GLFW_KEY_INSERT, "INS" }, + { GLFW_KEY_DELETE, "DELE" }, + { GLFW_KEY_RIGHT, "RGHT" }, + { GLFW_KEY_LEFT, "LEFT" }, + { GLFW_KEY_DOWN, "DOWN" }, + { GLFW_KEY_UP, "UP" }, + { GLFW_KEY_PAGE_UP, "PGUP" }, + { GLFW_KEY_PAGE_DOWN, "PGDN" }, + { GLFW_KEY_HOME, "HOME" }, + { GLFW_KEY_END, "END" }, + { GLFW_KEY_CAPS_LOCK, "CAPS" }, + { GLFW_KEY_SCROLL_LOCK, "SCLK" }, + { GLFW_KEY_NUM_LOCK, "NMLK" }, + { GLFW_KEY_PRINT_SCREEN, "PRSC" }, + { GLFW_KEY_PAUSE, "PAUS" }, + { GLFW_KEY_F1, "FK01" }, + { GLFW_KEY_F2, "FK02" }, + { GLFW_KEY_F3, "FK03" }, + { GLFW_KEY_F4, "FK04" }, + { GLFW_KEY_F5, "FK05" }, + { GLFW_KEY_F6, "FK06" }, + { GLFW_KEY_F7, "FK07" }, + { GLFW_KEY_F8, "FK08" }, + { GLFW_KEY_F9, "FK09" }, + { GLFW_KEY_F10, "FK10" }, + { GLFW_KEY_F11, "FK11" }, + { GLFW_KEY_F12, "FK12" }, + { GLFW_KEY_F13, "FK13" }, + { GLFW_KEY_F14, "FK14" }, + { GLFW_KEY_F15, "FK15" }, + { GLFW_KEY_F16, "FK16" }, + { GLFW_KEY_F17, "FK17" }, + { GLFW_KEY_F18, "FK18" }, + { GLFW_KEY_F19, "FK19" }, + { GLFW_KEY_F20, "FK20" }, + { GLFW_KEY_F21, "FK21" }, + { GLFW_KEY_F22, "FK22" }, + { GLFW_KEY_F23, "FK23" }, + { GLFW_KEY_F24, "FK24" }, + { GLFW_KEY_F25, "FK25" }, + { GLFW_KEY_KP_0, "KP0" }, + { GLFW_KEY_KP_1, "KP1" }, + { GLFW_KEY_KP_2, "KP2" }, + { GLFW_KEY_KP_3, "KP3" }, + { GLFW_KEY_KP_4, "KP4" }, + { GLFW_KEY_KP_5, "KP5" }, + { GLFW_KEY_KP_6, "KP6" }, + { GLFW_KEY_KP_7, "KP7" }, + { GLFW_KEY_KP_8, "KP8" }, + { GLFW_KEY_KP_9, "KP9" }, + { GLFW_KEY_KP_DECIMAL, "KPDL" }, + { GLFW_KEY_KP_DIVIDE, "KPDV" }, + { GLFW_KEY_KP_MULTIPLY, "KPMU" }, + { GLFW_KEY_KP_SUBTRACT, "KPSU" }, + { GLFW_KEY_KP_ADD, "KPAD" }, + { GLFW_KEY_KP_ENTER, "KPEN" }, + { GLFW_KEY_KP_EQUAL, "KPEQ" }, + { GLFW_KEY_LEFT_SHIFT, "LFSH" }, + { GLFW_KEY_LEFT_CONTROL, "LCTL" }, + { GLFW_KEY_LEFT_ALT, "LALT" }, + { GLFW_KEY_LEFT_SUPER, "LWIN" }, + { GLFW_KEY_RIGHT_SHIFT, "RTSH" }, + { GLFW_KEY_RIGHT_CONTROL, "RCTL" }, + { GLFW_KEY_RIGHT_ALT, "RALT" }, + { GLFW_KEY_RIGHT_ALT, "LVL3" }, + { GLFW_KEY_RIGHT_ALT, "MDSW" }, + { GLFW_KEY_RIGHT_SUPER, "RWIN" }, + { GLFW_KEY_MENU, "MENU" } + }; // Find the X11 key code -> GLFW key code mapping - for (scancode = desc->min_key_code; scancode <= desc->max_key_code; scancode++) + for (scancode = scancodeMin; scancode <= scancodeMax; scancode++) { - memcpy(name, desc->names->keys[scancode].name, XkbKeyNameLength); - name[XkbKeyNameLength] = '\0'; - - // Map the key name to a GLFW key code. Note: We only map printable - // keys here, and we use the US keyboard layout. The rest of the - // keys (function keys) are mapped using traditional KeySym - // translations. - if (strcmp(name, "TLDE") == 0) key = GLFW_KEY_GRAVE_ACCENT; - else if (strcmp(name, "AE01") == 0) key = GLFW_KEY_1; - else if (strcmp(name, "AE02") == 0) key = GLFW_KEY_2; - else if (strcmp(name, "AE03") == 0) key = GLFW_KEY_3; - else if (strcmp(name, "AE04") == 0) key = GLFW_KEY_4; - else if (strcmp(name, "AE05") == 0) key = GLFW_KEY_5; - else if (strcmp(name, "AE06") == 0) key = GLFW_KEY_6; - else if (strcmp(name, "AE07") == 0) key = GLFW_KEY_7; - else if (strcmp(name, "AE08") == 0) key = GLFW_KEY_8; - else if (strcmp(name, "AE09") == 0) key = GLFW_KEY_9; - else if (strcmp(name, "AE10") == 0) key = GLFW_KEY_0; - else if (strcmp(name, "AE11") == 0) key = GLFW_KEY_MINUS; - else if (strcmp(name, "AE12") == 0) key = GLFW_KEY_EQUAL; - else if (strcmp(name, "AD01") == 0) key = GLFW_KEY_Q; - else if (strcmp(name, "AD02") == 0) key = GLFW_KEY_W; - else if (strcmp(name, "AD03") == 0) key = GLFW_KEY_E; - else if (strcmp(name, "AD04") == 0) key = GLFW_KEY_R; - else if (strcmp(name, "AD05") == 0) key = GLFW_KEY_T; - else if (strcmp(name, "AD06") == 0) key = GLFW_KEY_Y; - else if (strcmp(name, "AD07") == 0) key = GLFW_KEY_U; - else if (strcmp(name, "AD08") == 0) key = GLFW_KEY_I; - else if (strcmp(name, "AD09") == 0) key = GLFW_KEY_O; - else if (strcmp(name, "AD10") == 0) key = GLFW_KEY_P; - else if (strcmp(name, "AD11") == 0) key = GLFW_KEY_LEFT_BRACKET; - else if (strcmp(name, "AD12") == 0) key = GLFW_KEY_RIGHT_BRACKET; - else if (strcmp(name, "AC01") == 0) key = GLFW_KEY_A; - else if (strcmp(name, "AC02") == 0) key = GLFW_KEY_S; - else if (strcmp(name, "AC03") == 0) key = GLFW_KEY_D; - else if (strcmp(name, "AC04") == 0) key = GLFW_KEY_F; - else if (strcmp(name, "AC05") == 0) key = GLFW_KEY_G; - else if (strcmp(name, "AC06") == 0) key = GLFW_KEY_H; - else if (strcmp(name, "AC07") == 0) key = GLFW_KEY_J; - else if (strcmp(name, "AC08") == 0) key = GLFW_KEY_K; - else if (strcmp(name, "AC09") == 0) key = GLFW_KEY_L; - else if (strcmp(name, "AC10") == 0) key = GLFW_KEY_SEMICOLON; - else if (strcmp(name, "AC11") == 0) key = GLFW_KEY_APOSTROPHE; - else if (strcmp(name, "AB01") == 0) key = GLFW_KEY_Z; - else if (strcmp(name, "AB02") == 0) key = GLFW_KEY_X; - else if (strcmp(name, "AB03") == 0) key = GLFW_KEY_C; - else if (strcmp(name, "AB04") == 0) key = GLFW_KEY_V; - else if (strcmp(name, "AB05") == 0) key = GLFW_KEY_B; - else if (strcmp(name, "AB06") == 0) key = GLFW_KEY_N; - else if (strcmp(name, "AB07") == 0) key = GLFW_KEY_M; - else if (strcmp(name, "AB08") == 0) key = GLFW_KEY_COMMA; - else if (strcmp(name, "AB09") == 0) key = GLFW_KEY_PERIOD; - else if (strcmp(name, "AB10") == 0) key = GLFW_KEY_SLASH; - else if (strcmp(name, "BKSL") == 0) key = GLFW_KEY_BACKSLASH; - else if (strcmp(name, "LSGT") == 0) key = GLFW_KEY_WORLD_1; - else key = GLFW_KEY_UNKNOWN; - - if ((scancode >= 0) && (scancode < 256)) - _glfw.x11.keycodes[scancode] = key; + int key = GLFW_KEY_UNKNOWN; + + // Map the key name to a GLFW key code. Note: We use the US + // keyboard layout. Because function keys aren't mapped correctly + // when using traditional KeySym translations, they are mapped + // here instead. + for (int i = 0; i < sizeof(keymap) / sizeof(keymap[0]); i++) + { + if (strncmp(desc->names->keys[scancode].name, + keymap[i].name, + XkbKeyNameLength) == 0) + { + key = keymap[i].key; + break; + } + } + + // Fall back to key aliases in case the key name did not match + for (int i = 0; i < desc->names->num_key_aliases; i++) + { + if (key != GLFW_KEY_UNKNOWN) + break; + + if (strncmp(desc->names->key_aliases[i].real, + desc->names->keys[scancode].name, + XkbKeyNameLength) != 0) + { + continue; + } + + for (int j = 0; j < sizeof(keymap) / sizeof(keymap[0]); j++) + { + if (strncmp(desc->names->key_aliases[i].alias, + keymap[j].name, + XkbKeyNameLength) == 0) + { + key = keymap[j].key; + break; + } + } + } + + _glfw.x11.keycodes[scancode] = key; } XkbFreeNames(desc, XkbKeyNamesMask, True); XkbFreeKeyboard(desc, 0, True); } + else + XDisplayKeycodes(_glfw.x11.display, &scancodeMin, &scancodeMax); - for (scancode = 0; scancode < 256; scancode++) + int width; + KeySym* keysyms = XGetKeyboardMapping(_glfw.x11.display, + scancodeMin, + scancodeMax - scancodeMin + 1, + &width); + + for (scancode = scancodeMin; scancode <= scancodeMax; scancode++) { // Translate the un-translated key codes using traditional X11 KeySym // lookups if (_glfw.x11.keycodes[scancode] < 0) - _glfw.x11.keycodes[scancode] = translateKeyCode(scancode); + { + const size_t base = (scancode - scancodeMin) * width; + _glfw.x11.keycodes[scancode] = translateKeySyms(&keysyms[base], width); + } // Store the reverse translation for faster key name lookup if (_glfw.x11.keycodes[scancode] > 0) _glfw.x11.scancodes[_glfw.x11.keycodes[scancode]] = scancode; } + + XFree(keysyms); } // Check whether the IM has a usable style @@ -352,13 +462,13 @@ static GLFWbool hasUsableInputMethodStyle(void) // Check whether the specified atom is supported // -static Atom getSupportedAtom(Atom* supportedAtoms, - unsigned long atomCount, - const char* atomName) +static Atom getAtomIfSupported(Atom* supportedAtoms, + unsigned long atomCount, + const char* atomName) { const Atom atom = XInternAtom(_glfw.x11.display, atomName, False); - for (unsigned int i = 0; i < atomCount; i++) + for (unsigned long i = 0; i < atomCount; i++) { if (supportedAtoms[i] == atom) return atom; @@ -426,33 +536,33 @@ static void detectEWMH(void) // See which of the atoms we support that are supported by the WM _glfw.x11.NET_WM_STATE = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE"); _glfw.x11.NET_WM_STATE_ABOVE = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_ABOVE"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE_ABOVE"); _glfw.x11.NET_WM_STATE_FULLSCREEN = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_FULLSCREEN"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE_FULLSCREEN"); _glfw.x11.NET_WM_STATE_MAXIMIZED_VERT = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_VERT"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_VERT"); _glfw.x11.NET_WM_STATE_MAXIMIZED_HORZ = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_HORZ"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE_MAXIMIZED_HORZ"); _glfw.x11.NET_WM_STATE_DEMANDS_ATTENTION = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_STATE_DEMANDS_ATTENTION"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_STATE_DEMANDS_ATTENTION"); _glfw.x11.NET_WM_FULLSCREEN_MONITORS = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_FULLSCREEN_MONITORS"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_FULLSCREEN_MONITORS"); _glfw.x11.NET_WM_WINDOW_TYPE = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE"); _glfw.x11.NET_WM_WINDOW_TYPE_NORMAL = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE_NORMAL"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WM_WINDOW_TYPE_NORMAL"); _glfw.x11.NET_WORKAREA = - getSupportedAtom(supportedAtoms, atomCount, "_NET_WORKAREA"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_WORKAREA"); _glfw.x11.NET_CURRENT_DESKTOP = - getSupportedAtom(supportedAtoms, atomCount, "_NET_CURRENT_DESKTOP"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_CURRENT_DESKTOP"); _glfw.x11.NET_ACTIVE_WINDOW = - getSupportedAtom(supportedAtoms, atomCount, "_NET_ACTIVE_WINDOW"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_ACTIVE_WINDOW"); _glfw.x11.NET_FRAME_EXTENTS = - getSupportedAtom(supportedAtoms, atomCount, "_NET_FRAME_EXTENTS"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_FRAME_EXTENTS"); _glfw.x11.NET_REQUEST_FRAME_EXTENTS = - getSupportedAtom(supportedAtoms, atomCount, "_NET_REQUEST_FRAME_EXTENTS"); + getAtomIfSupported(supportedAtoms, atomCount, "_NET_REQUEST_FRAME_EXTENTS"); if (supportedAtoms) XFree(supportedAtoms); @@ -462,7 +572,11 @@ static void detectEWMH(void) // static GLFWbool initExtensions(void) { +#if defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.vidmode.handle = _glfw_dlopen("libXxf86vm.so"); +#else _glfw.x11.vidmode.handle = _glfw_dlopen("libXxf86vm.so.1"); +#endif if (_glfw.x11.vidmode.handle) { _glfw.x11.vidmode.QueryExtension = (PFN_XF86VidModeQueryExtension) @@ -482,6 +596,8 @@ static GLFWbool initExtensions(void) #if defined(__CYGWIN__) _glfw.x11.xi.handle = _glfw_dlopen("libXi-6.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.xi.handle = _glfw_dlopen("libXi.so"); #else _glfw.x11.xi.handle = _glfw_dlopen("libXi.so.6"); #endif @@ -512,6 +628,8 @@ static GLFWbool initExtensions(void) #if defined(__CYGWIN__) _glfw.x11.randr.handle = _glfw_dlopen("libXrandr-2.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.randr.handle = _glfw_dlopen("libXrandr.so"); #else _glfw.x11.randr.handle = _glfw_dlopen("libXrandr.so.2"); #endif @@ -604,6 +722,8 @@ static GLFWbool initExtensions(void) #if defined(__CYGWIN__) _glfw.x11.xcursor.handle = _glfw_dlopen("libXcursor-1.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.xcursor.handle = _glfw_dlopen("libXcursor.so"); #else _glfw.x11.xcursor.handle = _glfw_dlopen("libXcursor.so.1"); #endif @@ -619,6 +739,8 @@ static GLFWbool initExtensions(void) #if defined(__CYGWIN__) _glfw.x11.xinerama.handle = _glfw_dlopen("libXinerama-1.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.xinerama.handle = _glfw_dlopen("libXinerama.so"); #else _glfw.x11.xinerama.handle = _glfw_dlopen("libXinerama.so.1"); #endif @@ -660,17 +782,18 @@ static GLFWbool initExtensions(void) _glfw.x11.xkb.detectable = GLFW_TRUE; } - _glfw.x11.xkb.group = 0; XkbStateRec state; if (XkbGetState(_glfw.x11.display, XkbUseCoreKbd, &state) == Success) - { - XkbSelectEventDetails(_glfw.x11.display, XkbUseCoreKbd, XkbStateNotify, XkbAllStateComponentsMask, XkbGroupStateMask); _glfw.x11.xkb.group = (unsigned int)state.group; - } + + XkbSelectEventDetails(_glfw.x11.display, XkbUseCoreKbd, XkbStateNotify, + XkbGroupStateMask, XkbGroupStateMask); } #if defined(__CYGWIN__) _glfw.x11.x11xcb.handle = _glfw_dlopen("libX11-xcb-1.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.x11xcb.handle = _glfw_dlopen("libX11-xcb.so"); #else _glfw.x11.x11xcb.handle = _glfw_dlopen("libX11-xcb.so.1"); #endif @@ -682,6 +805,8 @@ static GLFWbool initExtensions(void) #if defined(__CYGWIN__) _glfw.x11.xrender.handle = _glfw_dlopen("libXrender-1.so"); +#elif defined(__OpenBSD__) || defined(__NetBSD__) + _glfw.x11.xrender.handle = _glfw_dlopen("libXrender.so"); #else _glfw.x11.xrender.handle = _glfw_dlopen("libXrender.so.1"); #endif @@ -847,10 +972,44 @@ static Window createHelperWindow(void) CWEventMask, &wa); } +// Create the pipe for empty events without assumuing the OS has pipe2(2) +// +static GLFWbool createEmptyEventPipe(void) +{ + if (pipe(_glfw.x11.emptyEventPipe) != 0) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "X11: Failed to create empty event pipe: %s", + strerror(errno)); + return GLFW_FALSE; + } + + for (int i = 0; i < 2; i++) + { + const int sf = fcntl(_glfw.x11.emptyEventPipe[i], F_GETFL, 0); + const int df = fcntl(_glfw.x11.emptyEventPipe[i], F_GETFD, 0); + + if (sf == -1 || df == -1 || + fcntl(_glfw.x11.emptyEventPipe[i], F_SETFL, sf | O_NONBLOCK) == -1 || + fcntl(_glfw.x11.emptyEventPipe[i], F_SETFD, df | FD_CLOEXEC) == -1) + { + _glfwInputError(GLFW_PLATFORM_ERROR, + "X11: Failed to set flags for empty event pipe: %s", + strerror(errno)); + return GLFW_FALSE; + } + } + + return GLFW_TRUE; +} + // X error handler // static int errorHandler(Display *display, XErrorEvent* event) { + if (_glfw.x11.display != display) + return 0; + _glfw.x11.errorCode = event->error_code; return 0; } @@ -864,8 +1023,9 @@ static int errorHandler(Display *display, XErrorEvent* event) // void _glfwGrabErrorHandlerX11(void) { + assert(_glfw.x11.errorHandler == NULL); _glfw.x11.errorCode = Success; - XSetErrorHandler(errorHandler); + _glfw.x11.errorHandler = XSetErrorHandler(errorHandler); } // Clears the X error handler callback @@ -874,7 +1034,8 @@ void _glfwReleaseErrorHandlerX11(void) { // Synchronize to make sure all commands are processed XSync(_glfw.x11.display, False); - XSetErrorHandler(NULL); + XSetErrorHandler(_glfw.x11.errorHandler); + _glfw.x11.errorHandler = NULL; } // Reports the specified error, appending information about the last X error @@ -931,15 +1092,12 @@ Cursor _glfwCreateCursorX11(const GLFWimage* image, int xhot, int yhot) int _glfwPlatformInit(void) { -#if !defined(X_HAVE_UTF8_STRING) - // HACK: If the current locale is "C" and the Xlib UTF-8 functions are - // unavailable, apply the environment's locale in the hope that it's - // both available and not "C" - // This is done because the "C" locale breaks wide character input, - // which is what we fall back on when UTF-8 support is missing + // HACK: If the application has left the locale as "C" then both wide + // character text input and explicit UTF-8 input via XIM will break + // This sets the CTYPE part of the current locale from the environment + // in the hope that it is set to something more sane than "C" if (strcmp(setlocale(LC_CTYPE, NULL), "C") == 0) setlocale(LC_CTYPE, ""); -#endif XInitThreads(); XrmInitialize(); @@ -968,6 +1126,9 @@ int _glfwPlatformInit(void) getSystemContentScale(&_glfw.x11.contentScaleX, &_glfw.x11.contentScaleY); + if (!createEmptyEventPipe()) + return GLFW_FALSE; + if (!initExtensions()) return GLFW_FALSE; @@ -1077,6 +1238,7 @@ void _glfwPlatformTerminate(void) _glfw.x11.xi.handle = NULL; } + _glfwTerminateOSMesa(); // NOTE: These need to be unloaded after XCloseDisplay, as they register // cleanup callbacks that get called by that function _glfwTerminateEGL(); @@ -1085,6 +1247,12 @@ void _glfwPlatformTerminate(void) #if defined(__linux__) _glfwTerminateJoysticksLinux(); #endif + + if (_glfw.x11.emptyEventPipe[0] || _glfw.x11.emptyEventPipe[1]) + { + close(_glfw.x11.emptyEventPipe[0]); + close(_glfw.x11.emptyEventPipe[1]); + } } const char* _glfwPlatformGetVersionString(void) diff --git a/third_party/penumbra/vendor/glfw/src/x11_monitor.c b/third_party/penumbra/vendor/glfw/src/x11_monitor.c index 1f804aeb409..fb3a67baceb 100644 --- a/third_party/penumbra/vendor/glfw/src/x11_monitor.c +++ b/third_party/penumbra/vendor/glfw/src/x11_monitor.c @@ -164,7 +164,7 @@ void _glfwPollMonitorsX11(void) if (widthMM <= 0 || heightMM <= 0) { // HACK: If RandR does not provide a physical size, assume the - // X11 default 96 DPI and calcuate from the CRTC viewport + // X11 default 96 DPI and calculate from the CRTC viewport // NOTE: These members are affected by rotation, unlike the mode // info and output info members widthMM = (int) (ci->width * 25.4f / 96.f); diff --git a/third_party/penumbra/vendor/glfw/src/x11_platform.h b/third_party/penumbra/vendor/glfw/src/x11_platform.h index 7377b2c0827..03ff9d242ad 100644 --- a/third_party/penumbra/vendor/glfw/src/x11_platform.h +++ b/third_party/penumbra/vendor/glfw/src/x11_platform.h @@ -199,9 +199,9 @@ typedef struct _GLFWwindowX11 // The last position the cursor was warped to by GLFW int warpCursorPosX, warpCursorPosY; - // The time of the last KeyPress event - Time lastKeyTime; - + // The time of the last KeyPress event per keycode, for discarding + // duplicate key events generated for some keys by ibus + Time keyPressTimes[256]; } _GLFWwindowX11; // X11-specific global data @@ -222,6 +222,8 @@ typedef struct _GLFWlibraryX11 XContext context; // XIM input method XIM im; + // The previous X error handler, to be restored later + XErrorHandler errorHandler; // Most recent error code received by X error handler int errorCode; // Primary selection string (while the primary selection is owned) @@ -238,6 +240,7 @@ typedef struct _GLFWlibraryX11 double restoreCursorPosX, restoreCursorPosY; // The window whose disabled cursor mode is active _GLFWwindow* disabledCursorWindow; + int emptyEventPipe[2]; // Window manager atoms Atom NET_SUPPORTED; @@ -404,7 +407,6 @@ typedef struct _GLFWlibraryX11 PFN_XRenderQueryVersion QueryVersion; PFN_XRenderFindVisualFormat FindVisualFormat; } xrender; - } _GLFWlibraryX11; // X11-specific per-monitor data @@ -418,7 +420,6 @@ typedef struct _GLFWmonitorX11 // Index of corresponding Xinerama screen, // for EWMH full screen window placement int index; - } _GLFWmonitorX11; // X11-specific per-cursor data @@ -426,7 +427,6 @@ typedef struct _GLFWmonitorX11 typedef struct _GLFWcursorX11 { Cursor handle; - } _GLFWcursorX11; diff --git a/third_party/penumbra/vendor/glfw/src/x11_window.c b/third_party/penumbra/vendor/glfw/src/x11_window.c index 271e1080945..ddda48d7766 100644 --- a/third_party/penumbra/vendor/glfw/src/x11_window.c +++ b/third_party/penumbra/vendor/glfw/src/x11_window.c @@ -27,12 +27,16 @@ // It is fine to use C99 in this file because it will not be built with VS //======================================================================== +#define _GNU_SOURCE + #include "internal.h" #include #include -#include +#include +#include +#include #include #include @@ -56,50 +60,126 @@ #define _GLFW_XDND_VERSION 5 - -// Wait for data to arrive using select -// This avoids blocking other threads via the per-display Xlib lock that also -// covers GLX functions +// Wait for data to arrive on any of the specified file descriptors // -static GLFWbool waitForEvent(double* timeout) +static GLFWbool waitForData(struct pollfd* fds, nfds_t count, double* timeout) { - fd_set fds; - const int fd = ConnectionNumber(_glfw.x11.display); - int count = fd + 1; - -#if defined(__linux__) - if (_glfw.linjs.inotify > fd) - count = _glfw.linjs.inotify + 1; -#endif for (;;) { - FD_ZERO(&fds); - FD_SET(fd, &fds); -#if defined(__linux__) - if (_glfw.linjs.inotify > 0) - FD_SET(_glfw.linjs.inotify, &fds); -#endif - if (timeout) { - const long seconds = (long) *timeout; - const long microseconds = (long) ((*timeout - seconds) * 1e6); - struct timeval tv = { seconds, microseconds }; const uint64_t base = _glfwPlatformGetTimerValue(); - const int result = select(count, &fds, NULL, NULL, &tv); - const int error = errno; +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) + const time_t seconds = (time_t) *timeout; + const long nanoseconds = (long) ((*timeout - seconds) * 1e9); + const struct timespec ts = { seconds, nanoseconds }; + const int result = ppoll(fds, count, &ts, NULL); +#elif defined(__NetBSD__) + const time_t seconds = (time_t) *timeout; + const long nanoseconds = (long) ((*timeout - seconds) * 1e9); + const struct timespec ts = { seconds, nanoseconds }; + const int result = pollts(fds, count, &ts, NULL); +#else + const int milliseconds = (int) (*timeout * 1e3); + const int result = poll(fds, count, milliseconds); +#endif + const int error = errno; // clock_gettime may overwrite our error *timeout -= (_glfwPlatformGetTimerValue() - base) / (double) _glfwPlatformGetTimerFrequency(); if (result > 0) return GLFW_TRUE; - if ((result == -1 && error == EINTR) || *timeout <= 0.0) + else if (result == -1 && error != EINTR && error != EAGAIN) + return GLFW_FALSE; + else if (*timeout <= 0.0) return GLFW_FALSE; } - else if (select(count, &fds, NULL, NULL, NULL) != -1 || errno != EINTR) - return GLFW_TRUE; + else + { + const int result = poll(fds, count, -1); + if (result > 0) + return GLFW_TRUE; + else if (result == -1 && errno != EINTR && errno != EAGAIN) + return GLFW_FALSE; + } + } +} + +// Wait for event data to arrive on the X11 display socket +// This avoids blocking other threads via the per-display Xlib lock that also +// covers GLX functions +// +static GLFWbool waitForX11Event(double* timeout) +{ + struct pollfd fd = { ConnectionNumber(_glfw.x11.display), POLLIN }; + + while (!XPending(_glfw.x11.display)) + { + if (!waitForData(&fd, 1, timeout)) + return GLFW_FALSE; + } + + return GLFW_TRUE; +} + +// Wait for event data to arrive on any event file descriptor +// This avoids blocking other threads via the per-display Xlib lock that also +// covers GLX functions +// +static GLFWbool waitForAnyEvent(double* timeout) +{ + nfds_t count = 2; + struct pollfd fds[3] = + { + { ConnectionNumber(_glfw.x11.display), POLLIN }, + { _glfw.x11.emptyEventPipe[0], POLLIN } + }; + +#if defined(__linux__) + if (_glfw.linjs.inotify > 0) + fds[count++] = (struct pollfd) { _glfw.linjs.inotify, POLLIN }; +#endif + + while (!XPending(_glfw.x11.display)) + { + if (!waitForData(fds, count, timeout)) + return GLFW_FALSE; + + for (int i = 1; i < count; i++) + { + if (fds[i].revents & POLLIN) + return GLFW_TRUE; + } + } + + return GLFW_TRUE; +} + +// Writes a byte to the empty event pipe +// +static void writeEmptyEvent(void) +{ + for (;;) + { + const char byte = 0; + const ssize_t result = write(_glfw.x11.emptyEventPipe[1], &byte, 1); + if (result == 1 || (result == -1 && errno != EINTR)) + break; + } +} + +// Drains available data from the empty event pipe +// +static void drainEmptyEvents(void) +{ + for (;;) + { + char dummy[64]; + const ssize_t result = read(_glfw.x11.emptyEventPipe[0], dummy, sizeof(dummy)); + if (result == -1 && errno != EINTR) + break; } } @@ -116,7 +196,7 @@ static GLFWbool waitForVisibilityNotify(_GLFWwindow* window) VisibilityNotify, &dummy)) { - if (!waitForEvent(&timeout)) + if (!waitForX11Event(&timeout)) return GLFW_FALSE; } @@ -378,96 +458,14 @@ static void updateWindowMode(_GLFWwindow* window) } } -// Splits and translates a text/uri-list into separate file paths -// NOTE: This function destroys the provided string -// -static char** parseUriList(char* text, int* count) -{ - const char* prefix = "file://"; - char** paths = NULL; - char* line; - - *count = 0; - - while ((line = strtok(text, "\r\n"))) - { - text = NULL; - - if (line[0] == '#') - continue; - - if (strncmp(line, prefix, strlen(prefix)) == 0) - { - line += strlen(prefix); - // TODO: Validate hostname - while (*line != '/') - line++; - } - - (*count)++; - - char* path = calloc(strlen(line) + 1, 1); - paths = realloc(paths, *count * sizeof(char*)); - paths[*count - 1] = path; - - while (*line) - { - if (line[0] == '%' && line[1] && line[2]) - { - const char digits[3] = { line[1], line[2], '\0' }; - *path = strtol(digits, NULL, 16); - line += 2; - } - else - *path = *line; - - path++; - line++; - } - } - - return paths; -} - -// Encode a Unicode code point to a UTF-8 stream -// Based on cutef8 by Jeff Bezanson (Public Domain) -// -static size_t encodeUTF8(char* s, unsigned int ch) -{ - size_t count = 0; - - if (ch < 0x80) - s[count++] = (char) ch; - else if (ch < 0x800) - { - s[count++] = (ch >> 6) | 0xc0; - s[count++] = (ch & 0x3f) | 0x80; - } - else if (ch < 0x10000) - { - s[count++] = (ch >> 12) | 0xe0; - s[count++] = ((ch >> 6) & 0x3f) | 0x80; - s[count++] = (ch & 0x3f) | 0x80; - } - else if (ch < 0x110000) - { - s[count++] = (ch >> 18) | 0xf0; - s[count++] = ((ch >> 12) & 0x3f) | 0x80; - s[count++] = ((ch >> 6) & 0x3f) | 0x80; - s[count++] = (ch & 0x3f) | 0x80; - } - - return count; -} - // Decode a Unicode code point from a UTF-8 stream // Based on cutef8 by Jeff Bezanson (Public Domain) // #if defined(X_HAVE_UTF8_STRING) -static unsigned int decodeUTF8(const char** s) +static uint32_t decodeUTF8(const char** s) { - unsigned int ch = 0, count = 0; - static const unsigned int offsets[] = + uint32_t codepoint = 0, count = 0; + static const uint32_t offsets[] = { 0x00000000u, 0x00003080u, 0x000e2080u, 0x03c82080u, 0xfa082080u, 0x82082080u @@ -475,13 +473,13 @@ static unsigned int decodeUTF8(const char** s) do { - ch = (ch << 6) + (unsigned char) **s; + codepoint = (codepoint << 6) + (unsigned char) **s; (*s)++; count++; } while ((**s & 0xc0) == 0x80); assert(count <= 6); - return ch - offsets[count - 1]; + return codepoint - offsets[count - 1]; } #endif /*X_HAVE_UTF8_STRING*/ @@ -499,7 +497,7 @@ static char* convertLatin1toUTF8(const char* source) char* tp = target; for (sp = source; *sp; sp++) - tp += encodeUTF8(tp, *sp); + tp += _glfwEncodeUTF8(tp, *sp); return target; } @@ -931,20 +929,6 @@ static Atom writeTargetToProperty(const XSelectionRequestEvent* request) return None; } -static void handleSelectionClear(XEvent* event) -{ - if (event->xselectionclear.selection == _glfw.x11.PRIMARY) - { - free(_glfw.x11.primarySelectionString); - _glfw.x11.primarySelectionString = NULL; - } - else - { - free(_glfw.x11.clipboardString); - _glfw.x11.clipboardString = NULL; - } -} - static void handleSelectionRequest(XEvent* event) { const XSelectionRequestEvent* request = &event->xselectionrequest; @@ -1002,7 +986,7 @@ static const char* getSelectionString(Atom selection) SelectionNotify, ¬ification)) { - waitForEvent(NULL); + waitForX11Event(NULL); } if (notification.xselection.property == None) @@ -1038,7 +1022,7 @@ static const char* getSelectionString(Atom selection) isSelPropNewValueNotify, (XPointer) ¬ification)) { - waitForEvent(NULL); + waitForX11Event(NULL); } XFree(data); @@ -1065,13 +1049,16 @@ static const char* getSelectionString(Atom selection) if (!itemCount) { - if (targets[i] == XA_STRING) + if (string) { - *selectionString = convertLatin1toUTF8(string); - free(string); + if (targets[i] == XA_STRING) + { + *selectionString = convertLatin1toUTF8(string); + free(string); + } + else + *selectionString = string; } - else - *selectionString = string; break; } @@ -1195,6 +1182,8 @@ static void processEvent(XEvent *event) { _glfw.x11.xkb.group = ((XkbEvent*) event)->state.group; } + + return; } } @@ -1236,12 +1225,7 @@ static void processEvent(XEvent *event) return; } - if (event->type == SelectionClear) - { - handleSelectionClear(event); - return; - } - else if (event->type == SelectionRequest) + if (event->type == SelectionRequest) { handleSelectionRequest(event); return; @@ -1273,16 +1257,20 @@ static void processEvent(XEvent *event) if (window->x11.ic) { - // HACK: Ignore duplicate key press events generated by ibus - // These have the same timestamp as the original event - // Corresponding release events are filtered out - // implicitly by the GLFW key repeat logic - if (window->x11.lastKeyTime < event->xkey.time) + // HACK: Do not report the key press events duplicated by XIM + // Duplicate key releases are filtered out implicitly by + // the GLFW key repeat logic in _glfwInputKey + // A timestamp per key is used to handle simultaneous keys + // NOTE: Always allow the first event for each key through + // (the server never sends a timestamp of zero) + // NOTE: Timestamp difference is compared to handle wrap-around + Time diff = event->xkey.time - window->x11.keyPressTimes[keycode]; + if (diff == event->xkey.time || (diff > 0 && diff < ((Time)1 << 31))) { if (keycode) _glfwInputKey(window, key, keycode, GLFW_PRESS, mods); - window->x11.lastKeyTime = event->xkey.time; + window->x11.keyPressTimes[keycode] = event->xkey.time; } if (!filtered) @@ -1353,9 +1341,9 @@ static void processEvent(XEvent *event) _glfwInputKey(window, key, keycode, GLFW_PRESS, mods); - const long character = _glfwKeySym2Unicode(keysym); - if (character != -1) - _glfwInputChar(window, character, mods, plain); + const uint32_t codepoint = _glfwKeySym2Unicode(keysym); + if (codepoint != GLFW_INVALID_CODEPOINT) + _glfwInputChar(window, codepoint, mods, plain); } return; @@ -1557,6 +1545,8 @@ static void processEvent(XEvent *event) // the position into root (screen) coordinates if (!event->xany.send_event && window->x11.parent != _glfw.x11.root) { + _glfwGrabErrorHandlerX11(); + Window dummy; XTranslateCoordinates(_glfw.x11.display, window->x11.parent, @@ -1564,6 +1554,10 @@ static void processEvent(XEvent *event) xpos, ypos, &xpos, &ypos, &dummy); + + _glfwReleaseErrorHandlerX11(); + if (_glfw.x11.errorCode == BadWindow) + return; } if (xpos != window->x11.xpos || ypos != window->x11.ypos) @@ -1747,7 +1741,7 @@ static void processEvent(XEvent *event) if (result) { int i, count; - char** paths = parseUriList(data, &count); + char** paths = _glfwParseUriList(data, &count); _glfwInputDrop(window, count, (const char**) paths); @@ -1936,10 +1930,6 @@ void _glfwPushSelectionToManagerX11(void) handleSelectionRequest(&event); break; - case SelectionClear: - handleSelectionClear(&event); - break; - case SelectionNotify: { if (event.xselection.target == _glfw.x11.SAVE_TARGETS) @@ -1957,7 +1947,7 @@ void _glfwPushSelectionToManagerX11(void) } } - waitForEvent(NULL); + waitForX11Event(NULL); } } @@ -1971,7 +1961,7 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { - Visual* visual; + Visual* visual = NULL; int depth; if (ctxconfig->client != GLFW_NO_API) @@ -1997,8 +1987,7 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, } } - if (ctxconfig->client == GLFW_NO_API || - ctxconfig->source == GLFW_OSMESA_CONTEXT_API) + if (!visual) { visual = DefaultVisual(_glfw.x11.display, _glfw.x11.screen); depth = DefaultDepth(_glfw.x11.display, _glfw.x11.screen); @@ -2024,6 +2013,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -2031,6 +2023,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformShowWindow(window); updateWindowMode(window); acquireMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } XFlush(_glfw.x11.display); @@ -2112,8 +2116,8 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window, for (i = 0; i < count; i++) longCount += 2 + images[i].width * images[i].height; - long* icon = calloc(longCount, sizeof(long)); - long* target = icon; + unsigned long* icon = calloc(longCount, sizeof(unsigned long)); + unsigned long* target = icon; for (i = 0; i < count; i++) { @@ -2122,13 +2126,19 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window, for (j = 0; j < images[i].width * images[i].height; j++) { - *target++ = (images[i].pixels[j * 4 + 0] << 16) | - (images[i].pixels[j * 4 + 1] << 8) | - (images[i].pixels[j * 4 + 2] << 0) | - (images[i].pixels[j * 4 + 3] << 24); + *target++ = (((unsigned long) images[i].pixels[j * 4 + 0]) << 16) | + (((unsigned long) images[i].pixels[j * 4 + 1]) << 8) | + (((unsigned long) images[i].pixels[j * 4 + 2]) << 0) | + (((unsigned long) images[i].pixels[j * 4 + 3]) << 24); } } + // NOTE: XChangeProperty expects 32-bit values like the image data above to be + // placed in the 32 least significant bits of individual longs. This is + // true even if long is 64-bit and a WM protocol calls for "packed" data. + // This is because of a historical mistake that then became part of the Xlib + // ABI. Xlib will pack these values into a regular array of 32-bit values + // before sending it over the wire. XChangeProperty(_glfw.x11.display, window->x11.handle, _glfw.x11.NET_WM_ICON, XA_CARDINAL, 32, @@ -2270,7 +2280,7 @@ void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, isFrameExtentsEvent, (XPointer) window)) { - if (!waitForEvent(&timeout)) + if (!waitForX11Event(&timeout)) { _glfwInputError(GLFW_PLATFORM_ERROR, "X11: The window manager has a broken _NET_REQUEST_FRAME_EXTENTS implementation; please report this issue"); @@ -2489,7 +2499,11 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, } if (window->monitor) + { + _glfwPlatformSetWindowDecorated(window, window->decorated); + _glfwPlatformSetWindowFloating(window, window->floating); releaseMonitor(window); + } _glfwInputWindowMonitor(window, monitor); updateNormalHints(window, width, height); @@ -2580,13 +2594,19 @@ int _glfwPlatformWindowHovered(_GLFWwindow* window) int rootX, rootY, childX, childY; unsigned int mask; - if (!XQueryPointer(_glfw.x11.display, w, - &root, &w, &rootX, &rootY, &childX, &childY, &mask)) - { - return GLFW_FALSE; - } + _glfwGrabErrorHandlerX11(); + + const Bool result = XQueryPointer(_glfw.x11.display, w, + &root, &w, &rootX, &rootY, + &childX, &childY, &mask); + + _glfwReleaseErrorHandlerX11(); - if (w == window->x11.handle) + if (_glfw.x11.errorCode == BadWindow) + w = _glfw.x11.root; + else if (!result) + return GLFW_FALSE; + else if (w == window->x11.handle) return GLFW_TRUE; } @@ -2665,14 +2685,14 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled) break; } - if (i < count) - return; - - XChangeProperty(_glfw.x11.display, window->x11.handle, - _glfw.x11.NET_WM_STATE, XA_ATOM, 32, - PropModeAppend, - (unsigned char*) &_glfw.x11.NET_WM_STATE_ABOVE, - 1); + if (i == count) + { + XChangeProperty(_glfw.x11.display, window->x11.handle, + _glfw.x11.NET_WM_STATE, XA_ATOM, 32, + PropModeAppend, + (unsigned char*) &_glfw.x11.NET_WM_STATE_ABOVE, + 1); + } } else if (states) { @@ -2682,15 +2702,15 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled) break; } - if (i == count) - return; - - states[i] = states[count - 1]; - count--; + if (i < count) + { + states[i] = states[count - 1]; + count--; - XChangeProperty(_glfw.x11.display, window->x11.handle, - _glfw.x11.NET_WM_STATE, XA_ATOM, 32, - PropModeReplace, (unsigned char*) states, count); + XChangeProperty(_glfw.x11.display, window->x11.handle, + _glfw.x11.NET_WM_STATE, XA_ATOM, 32, + PropModeReplace, (unsigned char*) states, count); + } } if (states) @@ -2752,7 +2772,7 @@ GLFWbool _glfwPlatformRawMouseMotionSupported(void) void _glfwPlatformPollEvents(void) { - _GLFWwindow* window; + drainEmptyEvents(); #if defined(__linux__) _glfwDetectJoystickConnectionLinux(); @@ -2766,7 +2786,7 @@ void _glfwPlatformPollEvents(void) processEvent(&event); } - window = _glfw.x11.disabledCursorWindow; + _GLFWwindow* window = _glfw.x11.disabledCursorWindow; if (window) { int width, height; @@ -2786,32 +2806,19 @@ void _glfwPlatformPollEvents(void) void _glfwPlatformWaitEvents(void) { - while (!XPending(_glfw.x11.display)) - waitForEvent(NULL); - + waitForAnyEvent(NULL); _glfwPlatformPollEvents(); } void _glfwPlatformWaitEventsTimeout(double timeout) { - while (!XPending(_glfw.x11.display)) - { - if (!waitForEvent(&timeout)) - break; - } - + waitForAnyEvent(&timeout); _glfwPlatformPollEvents(); } void _glfwPlatformPostEmptyEvent(void) { - XEvent event = { ClientMessage }; - event.xclient.window = _glfw.x11.helperWindowHandle; - event.xclient.format = 32; // Data is 32-bit longs - event.xclient.message_type = _glfw.x11.NULL_; - - XSendEvent(_glfw.x11.display, _glfw.x11.helperWindowHandle, False, 0, &event); - XFlush(_glfw.x11.display); + writeEmptyEvent(); } void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) @@ -2865,7 +2872,7 @@ const char* _glfwPlatformGetScancodeName(int scancode) if (scancode < 0 || scancode > 0xff || _glfw.x11.keycodes[scancode] == GLFW_KEY_UNKNOWN) { - _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode"); + _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } @@ -2875,11 +2882,11 @@ const char* _glfwPlatformGetScancodeName(int scancode) if (keysym == NoSymbol) return NULL; - const long ch = _glfwKeySym2Unicode(keysym); - if (ch == -1) + const uint32_t codepoint = _glfwKeySym2Unicode(keysym); + if (codepoint == GLFW_INVALID_CODEPOINT) return NULL; - const size_t count = encodeUTF8(_glfw.x11.keynames[key], (unsigned int) ch); + const size_t count = _glfwEncodeUTF8(_glfw.x11.keynames[key], codepoint); if (count == 0) return NULL; @@ -2950,8 +2957,9 @@ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor) void _glfwPlatformSetClipboardString(const char* string) { + char* copy = _glfw_strdup(string); free(_glfw.x11.clipboardString); - _glfw.x11.clipboardString = _glfw_strdup(string); + _glfw.x11.clipboardString = copy; XSetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD, diff --git a/third_party/penumbra/vendor/glfw/src/xkb_unicode.c b/third_party/penumbra/vendor/glfw/src/xkb_unicode.c index f30c4cd7176..859bedcaef1 100644 --- a/third_party/penumbra/vendor/glfw/src/xkb_unicode.c +++ b/third_party/penumbra/vendor/glfw/src/xkb_unicode.c @@ -907,7 +907,7 @@ static const struct codepair { // Convert XKB KeySym to Unicode // -long _glfwKeySym2Unicode(unsigned int keysym) +uint32_t _glfwKeySym2Unicode(unsigned int keysym) { int min = 0; int max = sizeof(keysymtab) / sizeof(struct codepair) - 1; @@ -937,6 +937,6 @@ long _glfwKeySym2Unicode(unsigned int keysym) } // No matching Unicode value found - return -1; + return GLFW_INVALID_CODEPOINT; } diff --git a/third_party/penumbra/vendor/glfw/src/xkb_unicode.h b/third_party/penumbra/vendor/glfw/src/xkb_unicode.h index f95e14f106c..be97cdcb8cf 100644 --- a/third_party/penumbra/vendor/glfw/src/xkb_unicode.h +++ b/third_party/penumbra/vendor/glfw/src/xkb_unicode.h @@ -24,5 +24,7 @@ // //======================================================================== -long _glfwKeySym2Unicode(unsigned int keysym); +#define GLFW_INVALID_CODEPOINT 0xffffffffu + +uint32_t _glfwKeySym2Unicode(unsigned int keysym); diff --git a/third_party/penumbra/vendor/glfw/tests/CMakeLists.txt b/third_party/penumbra/vendor/glfw/tests/CMakeLists.txt deleted file mode 100644 index 5232720f2a9..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/CMakeLists.txt +++ /dev/null @@ -1,94 +0,0 @@ - -link_libraries(glfw) - -include_directories("${GLFW_SOURCE_DIR}/deps") - -if (MATH_LIBRARY) - link_libraries("${MATH_LIBRARY}") -endif() - -if (MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif() - -set(GLAD_GL "${GLFW_SOURCE_DIR}/deps/glad/gl.h" - "${GLFW_SOURCE_DIR}/deps/glad_gl.c") -set(GLAD_VULKAN "${GLFW_SOURCE_DIR}/deps/glad/vulkan.h" - "${GLFW_SOURCE_DIR}/deps/glad_vulkan.c") -set(GETOPT "${GLFW_SOURCE_DIR}/deps/getopt.h" - "${GLFW_SOURCE_DIR}/deps/getopt.c") -set(TINYCTHREAD "${GLFW_SOURCE_DIR}/deps/tinycthread.h" - "${GLFW_SOURCE_DIR}/deps/tinycthread.c") - -if (${CMAKE_VERSION} VERSION_EQUAL "3.1.0" OR - ${CMAKE_VERSION} VERSION_GREATER "3.1.0") - set(CMAKE_C_STANDARD 99) -else() - # Remove this fallback when removing support for CMake version less than 3.1 - add_compile_options("$<$:-std=c99>" - "$<$:-std=c99>" - "$<$:-std=c99>") - -endif() - -add_executable(clipboard clipboard.c ${GETOPT} ${GLAD_GL}) -add_executable(events events.c ${GETOPT} ${GLAD_GL}) -add_executable(msaa msaa.c ${GETOPT} ${GLAD_GL}) -add_executable(glfwinfo glfwinfo.c ${GETOPT} ${GLAD_GL} ${GLAD_VULKAN}) -add_executable(iconify iconify.c ${GETOPT} ${GLAD_GL}) -add_executable(monitors monitors.c ${GETOPT} ${GLAD_GL}) -add_executable(reopen reopen.c ${GLAD_GL}) -add_executable(cursor cursor.c ${GLAD_GL}) - -add_executable(empty WIN32 MACOSX_BUNDLE empty.c ${TINYCTHREAD} ${GLAD_GL}) -add_executable(gamma WIN32 MACOSX_BUNDLE gamma.c ${GLAD_GL}) -add_executable(icon WIN32 MACOSX_BUNDLE icon.c ${GLAD_GL}) -add_executable(inputlag WIN32 MACOSX_BUNDLE inputlag.c ${GETOPT} ${GLAD_GL}) -add_executable(joysticks WIN32 MACOSX_BUNDLE joysticks.c ${GLAD_GL}) -add_executable(opacity WIN32 MACOSX_BUNDLE opacity.c ${GLAD_GL}) -add_executable(tearing WIN32 MACOSX_BUNDLE tearing.c ${GLAD_GL}) -add_executable(threads WIN32 MACOSX_BUNDLE threads.c ${TINYCTHREAD} ${GLAD_GL}) -add_executable(timeout WIN32 MACOSX_BUNDLE timeout.c ${GLAD_GL}) -add_executable(title WIN32 MACOSX_BUNDLE title.c ${GLAD_GL}) -add_executable(triangle-vulkan WIN32 triangle-vulkan.c ${GLAD_VULKAN}) -add_executable(windows WIN32 MACOSX_BUNDLE windows.c ${GETOPT} ${GLAD_GL}) - -target_link_libraries(empty "${CMAKE_THREAD_LIBS_INIT}") -target_link_libraries(threads "${CMAKE_THREAD_LIBS_INIT}") -if (RT_LIBRARY) - target_link_libraries(empty "${RT_LIBRARY}") - target_link_libraries(threads "${RT_LIBRARY}") -endif() - -set(GUI_ONLY_BINARIES empty gamma icon inputlag joysticks opacity tearing - threads timeout title triangle-vulkan windows) -set(CONSOLE_BINARIES clipboard events msaa glfwinfo iconify monitors reopen - cursor) - -set_target_properties(${GUI_ONLY_BINARIES} ${CONSOLE_BINARIES} PROPERTIES - FOLDER "GLFW3/Tests") - -if (MSVC) - # Tell MSVC to use main instead of WinMain for Windows subsystem executables - set_target_properties(${GUI_ONLY_BINARIES} PROPERTIES - LINK_FLAGS "/ENTRY:mainCRTStartup") -endif() - -if (APPLE) - set_target_properties(empty PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Empty Event") - set_target_properties(gamma PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Gamma") - set_target_properties(inputlag PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Input Lag") - set_target_properties(joysticks PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Joysticks") - set_target_properties(opacity PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Opacity") - set_target_properties(tearing PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Tearing") - set_target_properties(threads PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Threads") - set_target_properties(timeout PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Timeout") - set_target_properties(title PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Title") - set_target_properties(windows PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Windows") - - set_target_properties(${GUI_ONLY_BINARIES} PROPERTIES - MACOSX_BUNDLE_SHORT_VERSION_STRING ${GLFW_VERSION} - MACOSX_BUNDLE_LONG_VERSION_STRING ${GLFW_VERSION} - MACOSX_BUNDLE_INFO_PLIST "${GLFW_SOURCE_DIR}/CMake/MacOSXBundleInfo.plist.in") -endif() - diff --git a/third_party/penumbra/vendor/glfw/tests/clipboard.c b/third_party/penumbra/vendor/glfw/tests/clipboard.c deleted file mode 100644 index 41454a3ca71..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/clipboard.c +++ /dev/null @@ -1,145 +0,0 @@ -//======================================================================== -// Clipboard test program -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This program is used to test the clipboard functionality. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include - -#include "getopt.h" - -#if defined(__APPLE__) - #define MODIFIER GLFW_MOD_SUPER -#else - #define MODIFIER GLFW_MOD_CONTROL -#endif - -static void usage(void) -{ - printf("Usage: clipboard [-h]\n"); -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - - case GLFW_KEY_V: - if (mods == MODIFIER) - { - const char* string; - - string = glfwGetClipboardString(NULL); - if (string) - printf("Clipboard contains \"%s\"\n", string); - else - printf("Clipboard does not contain a string\n"); - } - break; - - case GLFW_KEY_C: - if (mods == MODIFIER) - { - const char* string = "Hello GLFW World!"; - glfwSetClipboardString(NULL, string); - printf("Setting clipboard to \"%s\"\n", string); - } - break; - } -} - -int main(int argc, char** argv) -{ - int ch; - GLFWwindow* window; - - while ((ch = getopt(argc, argv, "h")) != -1) - { - switch (ch) - { - case 'h': - usage(); - exit(EXIT_SUCCESS); - - default: - usage(); - exit(EXIT_FAILURE); - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - { - fprintf(stderr, "Failed to initialize GLFW\n"); - exit(EXIT_FAILURE); - } - - window = glfwCreateWindow(200, 200, "Clipboard Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - - fprintf(stderr, "Failed to open GLFW window\n"); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - glfwSetKeyCallback(window, key_callback); - - glClearColor(0.5f, 0.5f, 0.5f, 0); - - while (!glfwWindowShouldClose(window)) - { - glClear(GL_COLOR_BUFFER_BIT); - - glfwSwapBuffers(window); - glfwWaitEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/cursor.c b/third_party/penumbra/vendor/glfw/tests/cursor.c deleted file mode 100644 index b6288f6ac8a..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/cursor.c +++ /dev/null @@ -1,493 +0,0 @@ -//======================================================================== -// Cursor & input mode tests -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test provides an interface to the cursor image and cursor mode -// parts of the API. -// -// Custom cursor image generation by urraka. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include -#include -#include - -#include "linmath.h" - -#define CURSOR_FRAME_COUNT 60 - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec2 vPos;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(1.0);\n" -"}\n"; - -static double cursor_x; -static double cursor_y; -static int swap_interval = 1; -static int wait_events = GLFW_TRUE; -static int animate_cursor = GLFW_FALSE; -static int track_cursor = GLFW_FALSE; -static GLFWcursor* standard_cursors[6]; -static GLFWcursor* tracking_cursor = NULL; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static float star(int x, int y, float t) -{ - const float c = 64 / 2.f; - - const float i = (0.25f * (float) sin(2.f * M_PI * t) + 0.75f); - const float k = 64 * 0.046875f * i; - - const float dist = (float) sqrt((x - c) * (x - c) + (y - c) * (y - c)); - - const float salpha = 1.f - dist / c; - const float xalpha = (float) x == c ? c : k / (float) fabs(x - c); - const float yalpha = (float) y == c ? c : k / (float) fabs(y - c); - - return (float) fmax(0.f, fmin(1.f, i * salpha * 0.2f + salpha * xalpha * yalpha)); -} - -static GLFWcursor* create_cursor_frame(float t) -{ - int i = 0, x, y; - unsigned char buffer[64 * 64 * 4]; - const GLFWimage image = { 64, 64, buffer }; - - for (y = 0; y < image.width; y++) - { - for (x = 0; x < image.height; x++) - { - buffer[i++] = 255; - buffer[i++] = 255; - buffer[i++] = 255; - buffer[i++] = (unsigned char) (255 * star(x, y, t)); - } - } - - return glfwCreateCursor(&image, image.width / 2, image.height / 2); -} - -static GLFWcursor* create_tracking_cursor(void) -{ - int i = 0, x, y; - unsigned char buffer[32 * 32 * 4]; - const GLFWimage image = { 32, 32, buffer }; - - for (y = 0; y < image.width; y++) - { - for (x = 0; x < image.height; x++) - { - if (x == 7 || y == 7) - { - buffer[i++] = 255; - buffer[i++] = 0; - buffer[i++] = 0; - buffer[i++] = 255; - } - else - { - buffer[i++] = 0; - buffer[i++] = 0; - buffer[i++] = 0; - buffer[i++] = 0; - } - } - } - - return glfwCreateCursor(&image, 7, 7); -} - -static void cursor_position_callback(GLFWwindow* window, double x, double y) -{ - printf("%0.3f: Cursor position: %f %f (%+f %+f)\n", - glfwGetTime(), - x, y, x - cursor_x, y - cursor_y); - - cursor_x = x; - cursor_y = y; -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_A: - { - animate_cursor = !animate_cursor; - if (!animate_cursor) - glfwSetCursor(window, NULL); - - break; - } - - case GLFW_KEY_ESCAPE: - { - if (glfwGetInputMode(window, GLFW_CURSOR) != GLFW_CURSOR_DISABLED) - { - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - } - - /* FALLTHROUGH */ - } - - case GLFW_KEY_N: - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); - glfwGetCursorPos(window, &cursor_x, &cursor_y); - printf("(( cursor is normal ))\n"); - break; - - case GLFW_KEY_D: - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); - printf("(( cursor is disabled ))\n"); - break; - - case GLFW_KEY_H: - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); - printf("(( cursor is hidden ))\n"); - break; - - case GLFW_KEY_R: - if (!glfwRawMouseMotionSupported()) - break; - - if (glfwGetInputMode(window, GLFW_RAW_MOUSE_MOTION)) - { - glfwSetInputMode(window, GLFW_RAW_MOUSE_MOTION, GLFW_FALSE); - printf("(( raw input is disabled ))\n"); - } - else - { - glfwSetInputMode(window, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE); - printf("(( raw input is enabled ))\n"); - } - break; - - case GLFW_KEY_SPACE: - swap_interval = 1 - swap_interval; - printf("(( swap interval: %i ))\n", swap_interval); - glfwSwapInterval(swap_interval); - break; - - case GLFW_KEY_W: - wait_events = !wait_events; - printf("(( %sing for events ))\n", wait_events ? "wait" : "poll"); - break; - - case GLFW_KEY_T: - track_cursor = !track_cursor; - if (track_cursor) - glfwSetCursor(window, tracking_cursor); - else - glfwSetCursor(window, NULL); - - break; - - case GLFW_KEY_P: - { - double x, y; - glfwGetCursorPos(window, &x, &y); - - printf("Query before set: %f %f (%+f %+f)\n", - x, y, x - cursor_x, y - cursor_y); - cursor_x = x; - cursor_y = y; - - glfwSetCursorPos(window, cursor_x, cursor_y); - glfwGetCursorPos(window, &x, &y); - - printf("Query after set: %f %f (%+f %+f)\n", - x, y, x - cursor_x, y - cursor_y); - cursor_x = x; - cursor_y = y; - break; - } - - case GLFW_KEY_UP: - glfwSetCursorPos(window, 0, 0); - glfwGetCursorPos(window, &cursor_x, &cursor_y); - break; - - case GLFW_KEY_DOWN: - { - int width, height; - glfwGetWindowSize(window, &width, &height); - glfwSetCursorPos(window, width - 1, height - 1); - glfwGetCursorPos(window, &cursor_x, &cursor_y); - break; - } - - case GLFW_KEY_0: - glfwSetCursor(window, NULL); - break; - - case GLFW_KEY_1: - glfwSetCursor(window, standard_cursors[0]); - break; - - case GLFW_KEY_2: - glfwSetCursor(window, standard_cursors[1]); - break; - - case GLFW_KEY_3: - glfwSetCursor(window, standard_cursors[2]); - break; - - case GLFW_KEY_4: - glfwSetCursor(window, standard_cursors[3]); - break; - - case GLFW_KEY_5: - glfwSetCursor(window, standard_cursors[4]); - break; - - case GLFW_KEY_6: - glfwSetCursor(window, standard_cursors[5]); - break; - - case GLFW_KEY_F11: - case GLFW_KEY_ENTER: - { - static int x, y, width, height; - - if (mods != GLFW_MOD_ALT) - return; - - if (glfwGetWindowMonitor(window)) - glfwSetWindowMonitor(window, NULL, x, y, width, height, 0); - else - { - GLFWmonitor* monitor = glfwGetPrimaryMonitor(); - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwGetWindowPos(window, &x, &y); - glfwGetWindowSize(window, &width, &height); - glfwSetWindowMonitor(window, monitor, - 0, 0, mode->width, mode->height, - mode->refreshRate); - } - - glfwGetCursorPos(window, &cursor_x, &cursor_y); - break; - } - } -} - -int main(void) -{ - int i; - GLFWwindow* window; - GLFWcursor* star_cursors[CURSOR_FRAME_COUNT]; - GLFWcursor* current_frame = NULL; - GLuint vertex_buffer, vertex_shader, fragment_shader, program; - GLint mvp_location, vpos_location; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - tracking_cursor = create_tracking_cursor(); - if (!tracking_cursor) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - for (i = 0; i < CURSOR_FRAME_COUNT; i++) - { - star_cursors[i] = create_cursor_frame(i / (float) CURSOR_FRAME_COUNT); - if (!star_cursors[i]) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - } - - for (i = 0; i < sizeof(standard_cursors) / sizeof(standard_cursors[0]); i++) - { - const int shapes[] = { - GLFW_ARROW_CURSOR, - GLFW_IBEAM_CURSOR, - GLFW_CROSSHAIR_CURSOR, - GLFW_HAND_CURSOR, - GLFW_HRESIZE_CURSOR, - GLFW_VRESIZE_CURSOR - }; - - standard_cursors[i] = glfwCreateStandardCursor(shapes[i]); - if (!standard_cursors[i]) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - } - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - window = glfwCreateWindow(640, 480, "Cursor Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vec2), (void*) 0); - glUseProgram(program); - - glfwGetCursorPos(window, &cursor_x, &cursor_y); - printf("Cursor position: %f %f\n", cursor_x, cursor_y); - - glfwSetCursorPosCallback(window, cursor_position_callback); - glfwSetKeyCallback(window, key_callback); - - while (!glfwWindowShouldClose(window)) - { - glClear(GL_COLOR_BUFFER_BIT); - - if (track_cursor) - { - int wnd_width, wnd_height, fb_width, fb_height; - float scale; - vec2 vertices[4]; - mat4x4 mvp; - - glfwGetWindowSize(window, &wnd_width, &wnd_height); - glfwGetFramebufferSize(window, &fb_width, &fb_height); - - glViewport(0, 0, fb_width, fb_height); - - scale = (float) fb_width / (float) wnd_width; - vertices[0][0] = 0.5f; - vertices[0][1] = (float) (fb_height - floor(cursor_y * scale) - 1.f + 0.5f); - vertices[1][0] = (float) fb_width + 0.5f; - vertices[1][1] = (float) (fb_height - floor(cursor_y * scale) - 1.f + 0.5f); - vertices[2][0] = (float) floor(cursor_x * scale) + 0.5f; - vertices[2][1] = 0.5f; - vertices[3][0] = (float) floor(cursor_x * scale) + 0.5f; - vertices[3][1] = (float) fb_height + 0.5f; - - glBufferData(GL_ARRAY_BUFFER, - sizeof(vertices), - vertices, - GL_STREAM_DRAW); - - mat4x4_ortho(mvp, 0.f, (float) fb_width, 0.f, (float) fb_height, 0.f, 1.f); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - - glDrawArrays(GL_LINES, 0, 4); - } - - glfwSwapBuffers(window); - - if (animate_cursor) - { - const int i = (int) (glfwGetTime() * 30.0) % CURSOR_FRAME_COUNT; - if (current_frame != star_cursors[i]) - { - glfwSetCursor(window, star_cursors[i]); - current_frame = star_cursors[i]; - } - } - else - current_frame = NULL; - - if (wait_events) - { - if (animate_cursor) - glfwWaitEventsTimeout(1.0 / 30.0); - else - glfwWaitEvents(); - } - else - glfwPollEvents(); - - // Workaround for an issue with msvcrt and mintty - fflush(stdout); - } - - glfwDestroyWindow(window); - - for (i = 0; i < CURSOR_FRAME_COUNT; i++) - glfwDestroyCursor(star_cursors[i]); - - for (i = 0; i < sizeof(standard_cursors) / sizeof(standard_cursors[0]); i++) - glfwDestroyCursor(standard_cursors[i]); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/empty.c b/third_party/penumbra/vendor/glfw/tests/empty.c deleted file mode 100644 index c3877a715f1..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/empty.c +++ /dev/null @@ -1,132 +0,0 @@ -//======================================================================== -// Empty event test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test is intended to verify that posting of empty events works -// -//======================================================================== - -#include "tinycthread.h" - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -static volatile int running = GLFW_TRUE; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static int thread_main(void* data) -{ - struct timespec time; - - while (running) - { - clock_gettime(CLOCK_REALTIME, &time); - time.tv_sec += 1; - thrd_sleep(&time, NULL); - - glfwPostEmptyEvent(); - } - - return 0; -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static float nrand(void) -{ - return (float) rand() / (float) RAND_MAX; -} - -int main(void) -{ - int result; - thrd_t thread; - GLFWwindow* window; - - srand((unsigned int) time(NULL)); - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - window = glfwCreateWindow(640, 480, "Empty Event Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSetKeyCallback(window, key_callback); - - if (thrd_create(&thread, thread_main, NULL) != thrd_success) - { - fprintf(stderr, "Failed to create secondary thread\n"); - - glfwTerminate(); - exit(EXIT_FAILURE); - } - - while (running) - { - int width, height; - float r = nrand(), g = nrand(), b = nrand(); - float l = (float) sqrt(r * r + g * g + b * b); - - glfwGetFramebufferSize(window, &width, &height); - - glViewport(0, 0, width, height); - glClearColor(r / l, g / l, b / l, 1.f); - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); - - glfwWaitEvents(); - - if (glfwWindowShouldClose(window)) - running = GLFW_FALSE; - } - - glfwHideWindow(window); - thrd_join(thread, &result); - glfwDestroyWindow(window); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/events.c b/third_party/penumbra/vendor/glfw/tests/events.c deleted file mode 100644 index f29dfbb034c..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/events.c +++ /dev/null @@ -1,650 +0,0 @@ -//======================================================================== -// Event linter (event spewer) -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test hooks every available callback and outputs their arguments -// -// Log messages go to stdout, error messages to stderr -// -// Every event also gets a (sequential) number to aid discussion of logs -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include -#include -#include - -#include "getopt.h" - -// Event index -static unsigned int counter = 0; - -typedef struct -{ - GLFWwindow* window; - int number; - int closeable; -} Slot; - -static void usage(void) -{ - printf("Usage: events [-f] [-h] [-n WINDOWS]\n"); - printf("Options:\n"); - printf(" -f use full screen\n"); - printf(" -h show this help\n"); - printf(" -n the number of windows to create\n"); -} - -static const char* get_key_name(int key) -{ - switch (key) - { - // Printable keys - case GLFW_KEY_A: return "A"; - case GLFW_KEY_B: return "B"; - case GLFW_KEY_C: return "C"; - case GLFW_KEY_D: return "D"; - case GLFW_KEY_E: return "E"; - case GLFW_KEY_F: return "F"; - case GLFW_KEY_G: return "G"; - case GLFW_KEY_H: return "H"; - case GLFW_KEY_I: return "I"; - case GLFW_KEY_J: return "J"; - case GLFW_KEY_K: return "K"; - case GLFW_KEY_L: return "L"; - case GLFW_KEY_M: return "M"; - case GLFW_KEY_N: return "N"; - case GLFW_KEY_O: return "O"; - case GLFW_KEY_P: return "P"; - case GLFW_KEY_Q: return "Q"; - case GLFW_KEY_R: return "R"; - case GLFW_KEY_S: return "S"; - case GLFW_KEY_T: return "T"; - case GLFW_KEY_U: return "U"; - case GLFW_KEY_V: return "V"; - case GLFW_KEY_W: return "W"; - case GLFW_KEY_X: return "X"; - case GLFW_KEY_Y: return "Y"; - case GLFW_KEY_Z: return "Z"; - case GLFW_KEY_1: return "1"; - case GLFW_KEY_2: return "2"; - case GLFW_KEY_3: return "3"; - case GLFW_KEY_4: return "4"; - case GLFW_KEY_5: return "5"; - case GLFW_KEY_6: return "6"; - case GLFW_KEY_7: return "7"; - case GLFW_KEY_8: return "8"; - case GLFW_KEY_9: return "9"; - case GLFW_KEY_0: return "0"; - case GLFW_KEY_SPACE: return "SPACE"; - case GLFW_KEY_MINUS: return "MINUS"; - case GLFW_KEY_EQUAL: return "EQUAL"; - case GLFW_KEY_LEFT_BRACKET: return "LEFT BRACKET"; - case GLFW_KEY_RIGHT_BRACKET: return "RIGHT BRACKET"; - case GLFW_KEY_BACKSLASH: return "BACKSLASH"; - case GLFW_KEY_SEMICOLON: return "SEMICOLON"; - case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; - case GLFW_KEY_GRAVE_ACCENT: return "GRAVE ACCENT"; - case GLFW_KEY_COMMA: return "COMMA"; - case GLFW_KEY_PERIOD: return "PERIOD"; - case GLFW_KEY_SLASH: return "SLASH"; - case GLFW_KEY_WORLD_1: return "WORLD 1"; - case GLFW_KEY_WORLD_2: return "WORLD 2"; - - // Function keys - case GLFW_KEY_ESCAPE: return "ESCAPE"; - case GLFW_KEY_F1: return "F1"; - case GLFW_KEY_F2: return "F2"; - case GLFW_KEY_F3: return "F3"; - case GLFW_KEY_F4: return "F4"; - case GLFW_KEY_F5: return "F5"; - case GLFW_KEY_F6: return "F6"; - case GLFW_KEY_F7: return "F7"; - case GLFW_KEY_F8: return "F8"; - case GLFW_KEY_F9: return "F9"; - case GLFW_KEY_F10: return "F10"; - case GLFW_KEY_F11: return "F11"; - case GLFW_KEY_F12: return "F12"; - case GLFW_KEY_F13: return "F13"; - case GLFW_KEY_F14: return "F14"; - case GLFW_KEY_F15: return "F15"; - case GLFW_KEY_F16: return "F16"; - case GLFW_KEY_F17: return "F17"; - case GLFW_KEY_F18: return "F18"; - case GLFW_KEY_F19: return "F19"; - case GLFW_KEY_F20: return "F20"; - case GLFW_KEY_F21: return "F21"; - case GLFW_KEY_F22: return "F22"; - case GLFW_KEY_F23: return "F23"; - case GLFW_KEY_F24: return "F24"; - case GLFW_KEY_F25: return "F25"; - case GLFW_KEY_UP: return "UP"; - case GLFW_KEY_DOWN: return "DOWN"; - case GLFW_KEY_LEFT: return "LEFT"; - case GLFW_KEY_RIGHT: return "RIGHT"; - case GLFW_KEY_LEFT_SHIFT: return "LEFT SHIFT"; - case GLFW_KEY_RIGHT_SHIFT: return "RIGHT SHIFT"; - case GLFW_KEY_LEFT_CONTROL: return "LEFT CONTROL"; - case GLFW_KEY_RIGHT_CONTROL: return "RIGHT CONTROL"; - case GLFW_KEY_LEFT_ALT: return "LEFT ALT"; - case GLFW_KEY_RIGHT_ALT: return "RIGHT ALT"; - case GLFW_KEY_TAB: return "TAB"; - case GLFW_KEY_ENTER: return "ENTER"; - case GLFW_KEY_BACKSPACE: return "BACKSPACE"; - case GLFW_KEY_INSERT: return "INSERT"; - case GLFW_KEY_DELETE: return "DELETE"; - case GLFW_KEY_PAGE_UP: return "PAGE UP"; - case GLFW_KEY_PAGE_DOWN: return "PAGE DOWN"; - case GLFW_KEY_HOME: return "HOME"; - case GLFW_KEY_END: return "END"; - case GLFW_KEY_KP_0: return "KEYPAD 0"; - case GLFW_KEY_KP_1: return "KEYPAD 1"; - case GLFW_KEY_KP_2: return "KEYPAD 2"; - case GLFW_KEY_KP_3: return "KEYPAD 3"; - case GLFW_KEY_KP_4: return "KEYPAD 4"; - case GLFW_KEY_KP_5: return "KEYPAD 5"; - case GLFW_KEY_KP_6: return "KEYPAD 6"; - case GLFW_KEY_KP_7: return "KEYPAD 7"; - case GLFW_KEY_KP_8: return "KEYPAD 8"; - case GLFW_KEY_KP_9: return "KEYPAD 9"; - case GLFW_KEY_KP_DIVIDE: return "KEYPAD DIVIDE"; - case GLFW_KEY_KP_MULTIPLY: return "KEYPAD MULTIPLY"; - case GLFW_KEY_KP_SUBTRACT: return "KEYPAD SUBTRACT"; - case GLFW_KEY_KP_ADD: return "KEYPAD ADD"; - case GLFW_KEY_KP_DECIMAL: return "KEYPAD DECIMAL"; - case GLFW_KEY_KP_EQUAL: return "KEYPAD EQUAL"; - case GLFW_KEY_KP_ENTER: return "KEYPAD ENTER"; - case GLFW_KEY_PRINT_SCREEN: return "PRINT SCREEN"; - case GLFW_KEY_NUM_LOCK: return "NUM LOCK"; - case GLFW_KEY_CAPS_LOCK: return "CAPS LOCK"; - case GLFW_KEY_SCROLL_LOCK: return "SCROLL LOCK"; - case GLFW_KEY_PAUSE: return "PAUSE"; - case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER"; - case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER"; - case GLFW_KEY_MENU: return "MENU"; - - default: return "UNKNOWN"; - } -} - -static const char* get_action_name(int action) -{ - switch (action) - { - case GLFW_PRESS: - return "pressed"; - case GLFW_RELEASE: - return "released"; - case GLFW_REPEAT: - return "repeated"; - } - - return "caused unknown action"; -} - -static const char* get_button_name(int button) -{ - switch (button) - { - case GLFW_MOUSE_BUTTON_LEFT: - return "left"; - case GLFW_MOUSE_BUTTON_RIGHT: - return "right"; - case GLFW_MOUSE_BUTTON_MIDDLE: - return "middle"; - default: - { - static char name[16]; - snprintf(name, sizeof(name), "%i", button); - return name; - } - } -} - -static const char* get_mods_name(int mods) -{ - static char name[512]; - - if (mods == 0) - return " no mods"; - - name[0] = '\0'; - - if (mods & GLFW_MOD_SHIFT) - strcat(name, " shift"); - if (mods & GLFW_MOD_CONTROL) - strcat(name, " control"); - if (mods & GLFW_MOD_ALT) - strcat(name, " alt"); - if (mods & GLFW_MOD_SUPER) - strcat(name, " super"); - if (mods & GLFW_MOD_CAPS_LOCK) - strcat(name, " capslock-on"); - if (mods & GLFW_MOD_NUM_LOCK) - strcat(name, " numlock-on"); - - return name; -} - -static size_t encode_utf8(char* s, unsigned int ch) -{ - size_t count = 0; - - if (ch < 0x80) - s[count++] = (char) ch; - else if (ch < 0x800) - { - s[count++] = (ch >> 6) | 0xc0; - s[count++] = (ch & 0x3f) | 0x80; - } - else if (ch < 0x10000) - { - s[count++] = (ch >> 12) | 0xe0; - s[count++] = ((ch >> 6) & 0x3f) | 0x80; - s[count++] = (ch & 0x3f) | 0x80; - } - else if (ch < 0x110000) - { - s[count++] = (ch >> 18) | 0xf0; - s[count++] = ((ch >> 12) & 0x3f) | 0x80; - s[count++] = ((ch >> 6) & 0x3f) | 0x80; - s[count++] = (ch & 0x3f) | 0x80; - } - - return count; -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void window_pos_callback(GLFWwindow* window, int x, int y) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window position: %i %i\n", - counter++, slot->number, glfwGetTime(), x, y); -} - -static void window_size_callback(GLFWwindow* window, int width, int height) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window size: %i %i\n", - counter++, slot->number, glfwGetTime(), width, height); -} - -static void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Framebuffer size: %i %i\n", - counter++, slot->number, glfwGetTime(), width, height); -} - -static void window_content_scale_callback(GLFWwindow* window, float xscale, float yscale) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window content scale: %0.3f %0.3f\n", - counter++, slot->number, glfwGetTime(), xscale, yscale); -} - -static void window_close_callback(GLFWwindow* window) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window close\n", - counter++, slot->number, glfwGetTime()); - - glfwSetWindowShouldClose(window, slot->closeable); -} - -static void window_refresh_callback(GLFWwindow* window) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window refresh\n", - counter++, slot->number, glfwGetTime()); - - glfwMakeContextCurrent(window); - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); -} - -static void window_focus_callback(GLFWwindow* window, int focused) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window %s\n", - counter++, slot->number, glfwGetTime(), - focused ? "focused" : "defocused"); -} - -static void window_iconify_callback(GLFWwindow* window, int iconified) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window was %s\n", - counter++, slot->number, glfwGetTime(), - iconified ? "iconified" : "uniconified"); -} - -static void window_maximize_callback(GLFWwindow* window, int maximized) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Window was %s\n", - counter++, slot->number, glfwGetTime(), - maximized ? "maximized" : "unmaximized"); -} - -static void mouse_button_callback(GLFWwindow* window, int button, int action, int mods) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Mouse button %i (%s) (with%s) was %s\n", - counter++, slot->number, glfwGetTime(), button, - get_button_name(button), - get_mods_name(mods), - get_action_name(action)); -} - -static void cursor_position_callback(GLFWwindow* window, double x, double y) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Cursor position: %f %f\n", - counter++, slot->number, glfwGetTime(), x, y); -} - -static void cursor_enter_callback(GLFWwindow* window, int entered) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Cursor %s window\n", - counter++, slot->number, glfwGetTime(), - entered ? "entered" : "left"); -} - -static void scroll_callback(GLFWwindow* window, double x, double y) -{ - Slot* slot = glfwGetWindowUserPointer(window); - printf("%08x to %i at %0.3f: Scroll: %0.3f %0.3f\n", - counter++, slot->number, glfwGetTime(), x, y); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - Slot* slot = glfwGetWindowUserPointer(window); - const char* name = glfwGetKeyName(key, scancode); - - if (name) - { - printf("%08x to %i at %0.3f: Key 0x%04x Scancode 0x%04x (%s) (%s) (with%s) was %s\n", - counter++, slot->number, glfwGetTime(), key, scancode, - get_key_name(key), - name, - get_mods_name(mods), - get_action_name(action)); - } - else - { - printf("%08x to %i at %0.3f: Key 0x%04x Scancode 0x%04x (%s) (with%s) was %s\n", - counter++, slot->number, glfwGetTime(), key, scancode, - get_key_name(key), - get_mods_name(mods), - get_action_name(action)); - } - - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_C: - { - slot->closeable = !slot->closeable; - - printf("(( closing %s ))\n", slot->closeable ? "enabled" : "disabled"); - break; - } - - case GLFW_KEY_L: - { - const int state = glfwGetInputMode(window, GLFW_LOCK_KEY_MODS); - glfwSetInputMode(window, GLFW_LOCK_KEY_MODS, !state); - - printf("(( lock key mods %s ))\n", !state ? "enabled" : "disabled"); - break; - } - } -} - -static void char_callback(GLFWwindow* window, unsigned int codepoint) -{ - Slot* slot = glfwGetWindowUserPointer(window); - char string[5] = ""; - - encode_utf8(string, codepoint); - printf("%08x to %i at %0.3f: Character 0x%08x (%s) input\n", - counter++, slot->number, glfwGetTime(), codepoint, string); -} - -static void drop_callback(GLFWwindow* window, int count, const char* paths[]) -{ - int i; - Slot* slot = glfwGetWindowUserPointer(window); - - printf("%08x to %i at %0.3f: Drop input\n", - counter++, slot->number, glfwGetTime()); - - for (i = 0; i < count; i++) - printf(" %i: \"%s\"\n", i, paths[i]); -} - -static void monitor_callback(GLFWmonitor* monitor, int event) -{ - if (event == GLFW_CONNECTED) - { - int x, y, widthMM, heightMM; - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - - glfwGetMonitorPos(monitor, &x, &y); - glfwGetMonitorPhysicalSize(monitor, &widthMM, &heightMM); - - printf("%08x at %0.3f: Monitor %s (%ix%i at %ix%i, %ix%i mm) was connected\n", - counter++, - glfwGetTime(), - glfwGetMonitorName(monitor), - mode->width, mode->height, - x, y, - widthMM, heightMM); - } - else if (event == GLFW_DISCONNECTED) - { - printf("%08x at %0.3f: Monitor %s was disconnected\n", - counter++, - glfwGetTime(), - glfwGetMonitorName(monitor)); - } -} - -static void joystick_callback(int jid, int event) -{ - if (event == GLFW_CONNECTED) - { - int axisCount, buttonCount, hatCount; - - glfwGetJoystickAxes(jid, &axisCount); - glfwGetJoystickButtons(jid, &buttonCount); - glfwGetJoystickHats(jid, &hatCount); - - printf("%08x at %0.3f: Joystick %i (%s) was connected with %i axes, %i buttons, and %i hats\n", - counter++, glfwGetTime(), - jid, - glfwGetJoystickName(jid), - axisCount, - buttonCount, - hatCount); - } - else - { - printf("%08x at %0.3f: Joystick %i was disconnected\n", - counter++, glfwGetTime(), jid); - } -} - -int main(int argc, char** argv) -{ - Slot* slots; - GLFWmonitor* monitor = NULL; - int ch, i, width, height, count = 1; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - printf("Library initialized\n"); - - glfwSetMonitorCallback(monitor_callback); - glfwSetJoystickCallback(joystick_callback); - - while ((ch = getopt(argc, argv, "hfn:")) != -1) - { - switch (ch) - { - case 'h': - usage(); - exit(EXIT_SUCCESS); - - case 'f': - monitor = glfwGetPrimaryMonitor(); - break; - - case 'n': - count = (int) strtoul(optarg, NULL, 10); - break; - - default: - usage(); - exit(EXIT_FAILURE); - } - } - - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - - glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - glfwWindowHint(GLFW_RED_BITS, mode->redBits); - glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); - glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); - - width = mode->width; - height = mode->height; - } - else - { - width = 640; - height = 480; - } - - slots = calloc(count, sizeof(Slot)); - - for (i = 0; i < count; i++) - { - char title[128]; - - slots[i].closeable = GLFW_TRUE; - slots[i].number = i + 1; - - snprintf(title, sizeof(title), "Event Linter (Window %i)", slots[i].number); - - if (monitor) - { - printf("Creating full screen window %i (%ix%i on %s)\n", - slots[i].number, - width, height, - glfwGetMonitorName(monitor)); - } - else - { - printf("Creating windowed mode window %i (%ix%i)\n", - slots[i].number, - width, height); - } - - slots[i].window = glfwCreateWindow(width, height, title, monitor, NULL); - if (!slots[i].window) - { - free(slots); - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetWindowUserPointer(slots[i].window, slots + i); - - glfwSetWindowPosCallback(slots[i].window, window_pos_callback); - glfwSetWindowSizeCallback(slots[i].window, window_size_callback); - glfwSetFramebufferSizeCallback(slots[i].window, framebuffer_size_callback); - glfwSetWindowContentScaleCallback(slots[i].window, window_content_scale_callback); - glfwSetWindowCloseCallback(slots[i].window, window_close_callback); - glfwSetWindowRefreshCallback(slots[i].window, window_refresh_callback); - glfwSetWindowFocusCallback(slots[i].window, window_focus_callback); - glfwSetWindowIconifyCallback(slots[i].window, window_iconify_callback); - glfwSetWindowMaximizeCallback(slots[i].window, window_maximize_callback); - glfwSetMouseButtonCallback(slots[i].window, mouse_button_callback); - glfwSetCursorPosCallback(slots[i].window, cursor_position_callback); - glfwSetCursorEnterCallback(slots[i].window, cursor_enter_callback); - glfwSetScrollCallback(slots[i].window, scroll_callback); - glfwSetKeyCallback(slots[i].window, key_callback); - glfwSetCharCallback(slots[i].window, char_callback); - glfwSetDropCallback(slots[i].window, drop_callback); - - glfwMakeContextCurrent(slots[i].window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - } - - printf("Main loop starting\n"); - - for (;;) - { - for (i = 0; i < count; i++) - { - if (glfwWindowShouldClose(slots[i].window)) - break; - } - - if (i < count) - break; - - glfwWaitEvents(); - - // Workaround for an issue with msvcrt and mintty - fflush(stdout); - } - - free(slots); - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/gamma.c b/third_party/penumbra/vendor/glfw/tests/gamma.c deleted file mode 100644 index aa4c8b7833e..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/gamma.c +++ /dev/null @@ -1,179 +0,0 @@ -//======================================================================== -// Gamma correction test program -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This program is used to test the gamma correction functionality for -// both full screen and windowed mode windows -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#define NK_IMPLEMENTATION -#define NK_INCLUDE_FIXED_TYPES -#define NK_INCLUDE_FONT_BAKING -#define NK_INCLUDE_DEFAULT_FONT -#define NK_INCLUDE_DEFAULT_ALLOCATOR -#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT -#define NK_INCLUDE_STANDARD_VARARGS -#define NK_BUTTON_TRIGGER_ON_RELEASE -#include - -#define NK_GLFW_GL2_IMPLEMENTATION -#include - -#include -#include -#include - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static void chart_ramp_array(struct nk_context* nk, - struct nk_color color, - int count, unsigned short int* values) -{ - if (nk_chart_begin_colored(nk, NK_CHART_LINES, - color, nk_rgb(255, 255, 255), - count, 0, 65535)) - { - int i; - for (i = 0; i < count; i++) - { - char buffer[1024]; - if (nk_chart_push(nk, values[i])) - { - snprintf(buffer, sizeof(buffer), "#%u: %u (%0.5f) ", - i, values[i], values[i] / 65535.f); - nk_tooltip(nk, buffer); - } - } - - nk_chart_end(nk); - } -} - -int main(int argc, char** argv) -{ - GLFWmonitor* monitor = NULL; - GLFWwindow* window; - GLFWgammaramp orig_ramp; - struct nk_context* nk; - struct nk_font_atlas* atlas; - float gamma_value = 1.f; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - monitor = glfwGetPrimaryMonitor(); - - glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); - - window = glfwCreateWindow(800, 400, "Gamma Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - { - const GLFWgammaramp* ramp = glfwGetGammaRamp(monitor); - const size_t array_size = ramp->size * sizeof(short); - orig_ramp.size = ramp->size; - orig_ramp.red = malloc(array_size); - orig_ramp.green = malloc(array_size); - orig_ramp.blue = malloc(array_size); - memcpy(orig_ramp.red, ramp->red, array_size); - memcpy(orig_ramp.green, ramp->green, array_size); - memcpy(orig_ramp.blue, ramp->blue, array_size); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - nk = nk_glfw3_init(window, NK_GLFW3_INSTALL_CALLBACKS); - nk_glfw3_font_stash_begin(&atlas); - nk_glfw3_font_stash_end(); - - glfwSetKeyCallback(window, key_callback); - - while (!glfwWindowShouldClose(window)) - { - int width, height; - struct nk_rect area; - - glfwGetWindowSize(window, &width, &height); - area = nk_rect(0.f, 0.f, (float) width, (float) height); - nk_window_set_bounds(nk, "", area); - - glClear(GL_COLOR_BUFFER_BIT); - nk_glfw3_new_frame(); - if (nk_begin(nk, "", area, 0)) - { - const GLFWgammaramp* ramp; - - nk_layout_row_dynamic(nk, 30, 3); - if (nk_slider_float(nk, 0.1f, &gamma_value, 5.f, 0.1f)) - glfwSetGamma(monitor, gamma_value); - nk_labelf(nk, NK_TEXT_LEFT, "%0.1f", gamma_value); - if (nk_button_label(nk, "Revert")) - glfwSetGammaRamp(monitor, &orig_ramp); - - ramp = glfwGetGammaRamp(monitor); - - nk_layout_row_dynamic(nk, height - 60.f, 3); - chart_ramp_array(nk, nk_rgb(255, 0, 0), ramp->size, ramp->red); - chart_ramp_array(nk, nk_rgb(0, 255, 0), ramp->size, ramp->green); - chart_ramp_array(nk, nk_rgb(0, 0, 255), ramp->size, ramp->blue); - } - - nk_end(nk); - nk_glfw3_render(NK_ANTI_ALIASING_ON); - - glfwSwapBuffers(window); - glfwWaitEventsTimeout(1.0); - } - - free(orig_ramp.red); - free(orig_ramp.green); - free(orig_ramp.blue); - - nk_glfw3_shutdown(); - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/glfwinfo.c b/third_party/penumbra/vendor/glfw/tests/glfwinfo.c deleted file mode 100644 index 074bcbd6f1e..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/glfwinfo.c +++ /dev/null @@ -1,920 +0,0 @@ -//======================================================================== -// Context creation and information tool -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -#include "getopt.h" - -#ifdef _MSC_VER -#define strcasecmp(x, y) _stricmp(x, y) -#endif - -#define API_NAME_OPENGL "gl" -#define API_NAME_OPENGL_ES "es" - -#define API_NAME_NATIVE "native" -#define API_NAME_EGL "egl" -#define API_NAME_OSMESA "osmesa" - -#define PROFILE_NAME_CORE "core" -#define PROFILE_NAME_COMPAT "compat" - -#define STRATEGY_NAME_NONE "none" -#define STRATEGY_NAME_LOSE "lose" - -#define BEHAVIOR_NAME_NONE "none" -#define BEHAVIOR_NAME_FLUSH "flush" - -static void usage(void) -{ - printf("Usage: glfwinfo [OPTION]...\n"); - printf("Options:\n"); - printf(" -a, --client-api=API the client API to use (" - API_NAME_OPENGL " or " - API_NAME_OPENGL_ES ")\n"); - printf(" -b, --behavior=BEHAVIOR the release behavior to use (" - BEHAVIOR_NAME_NONE " or " - BEHAVIOR_NAME_FLUSH ")\n"); - printf(" -c, --context-api=API the context creation API to use (" - API_NAME_NATIVE " or " - API_NAME_EGL " or " - API_NAME_OSMESA ")\n"); - printf(" -d, --debug request a debug context\n"); - printf(" -f, --forward require a forward-compatible context\n"); - printf(" -h, --help show this help\n"); - printf(" -l, --list-extensions list all Vulkan and client API extensions\n"); - printf(" --list-layers list all Vulkan layers\n"); - printf(" -m, --major=MAJOR the major number of the required " - "client API version\n"); - printf(" -n, --minor=MINOR the minor number of the required " - "client API version\n"); - printf(" -p, --profile=PROFILE the OpenGL profile to use (" - PROFILE_NAME_CORE " or " - PROFILE_NAME_COMPAT ")\n"); - printf(" -s, --robustness=STRATEGY the robustness strategy to use (" - STRATEGY_NAME_NONE " or " - STRATEGY_NAME_LOSE ")\n"); - printf(" -v, --version print version information\n"); - printf(" --red-bits=N the number of red bits to request\n"); - printf(" --green-bits=N the number of green bits to request\n"); - printf(" --blue-bits=N the number of blue bits to request\n"); - printf(" --alpha-bits=N the number of alpha bits to request\n"); - printf(" --depth-bits=N the number of depth bits to request\n"); - printf(" --stencil-bits=N the number of stencil bits to request\n"); - printf(" --accum-red-bits=N the number of red bits to request\n"); - printf(" --accum-green-bits=N the number of green bits to request\n"); - printf(" --accum-blue-bits=N the number of blue bits to request\n"); - printf(" --accum-alpha-bits=N the number of alpha bits to request\n"); - printf(" --aux-buffers=N the number of aux buffers to request\n"); - printf(" --samples=N the number of MSAA samples to request\n"); - printf(" --stereo request stereo rendering\n"); - printf(" --srgb request an sRGB capable framebuffer\n"); - printf(" --singlebuffer request single-buffering\n"); - printf(" --no-error request a context that does not emit errors\n"); - printf(" --graphics-switching request macOS graphics switching\n"); -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static const char* get_device_type_name(VkPhysicalDeviceType type) -{ - if (type == VK_PHYSICAL_DEVICE_TYPE_OTHER) - return "other"; - else if (type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) - return "integrated GPU"; - else if (type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) - return "discrete GPU"; - else if (type == VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU) - return "virtual GPU"; - else if (type == VK_PHYSICAL_DEVICE_TYPE_CPU) - return "CPU"; - - return "unknown"; -} - -static const char* get_api_name(int api) -{ - if (api == GLFW_OPENGL_API) - return "OpenGL"; - else if (api == GLFW_OPENGL_ES_API) - return "OpenGL ES"; - - return "Unknown API"; -} - -static const char* get_profile_name_gl(GLint mask) -{ - if (mask & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) - return PROFILE_NAME_COMPAT; - if (mask & GL_CONTEXT_CORE_PROFILE_BIT) - return PROFILE_NAME_CORE; - - return "unknown"; -} - -static const char* get_profile_name_glfw(int profile) -{ - if (profile == GLFW_OPENGL_COMPAT_PROFILE) - return PROFILE_NAME_COMPAT; - if (profile == GLFW_OPENGL_CORE_PROFILE) - return PROFILE_NAME_CORE; - - return "unknown"; -} - -static const char* get_strategy_name_gl(GLint strategy) -{ - if (strategy == GL_LOSE_CONTEXT_ON_RESET_ARB) - return STRATEGY_NAME_LOSE; - if (strategy == GL_NO_RESET_NOTIFICATION_ARB) - return STRATEGY_NAME_NONE; - - return "unknown"; -} - -static const char* get_strategy_name_glfw(int strategy) -{ - if (strategy == GLFW_LOSE_CONTEXT_ON_RESET) - return STRATEGY_NAME_LOSE; - if (strategy == GLFW_NO_RESET_NOTIFICATION) - return STRATEGY_NAME_NONE; - - return "unknown"; -} - -static void list_context_extensions(int client, int major, int minor) -{ - int i; - GLint count; - const GLubyte* extensions; - - printf("%s context extensions:\n", get_api_name(client)); - - if (client == GLFW_OPENGL_API && major > 2) - { - glGetIntegerv(GL_NUM_EXTENSIONS, &count); - - for (i = 0; i < count; i++) - printf(" %s\n", (const char*) glGetStringi(GL_EXTENSIONS, i)); - } - else - { - extensions = glGetString(GL_EXTENSIONS); - while (*extensions != '\0') - { - putchar(' '); - - while (*extensions != '\0' && *extensions != ' ') - { - putchar(*extensions); - extensions++; - } - - while (*extensions == ' ') - extensions++; - - putchar('\n'); - } - } -} - -static void list_vulkan_instance_extensions(void) -{ - uint32_t i, ep_count = 0; - VkExtensionProperties* ep; - - printf("Vulkan instance extensions:\n"); - - if (vkEnumerateInstanceExtensionProperties(NULL, &ep_count, NULL) != VK_SUCCESS) - return; - - ep = calloc(ep_count, sizeof(VkExtensionProperties)); - - if (vkEnumerateInstanceExtensionProperties(NULL, &ep_count, ep) != VK_SUCCESS) - { - free(ep); - return; - } - - for (i = 0; i < ep_count; i++) - printf(" %s (v%u)\n", ep[i].extensionName, ep[i].specVersion); - - free(ep); -} - -static void list_vulkan_instance_layers(void) -{ - uint32_t i, lp_count = 0; - VkLayerProperties* lp; - - printf("Vulkan instance layers:\n"); - - if (vkEnumerateInstanceLayerProperties(&lp_count, NULL) != VK_SUCCESS) - return; - - lp = calloc(lp_count, sizeof(VkLayerProperties)); - - if (vkEnumerateInstanceLayerProperties(&lp_count, lp) != VK_SUCCESS) - { - free(lp); - return; - } - - for (i = 0; i < lp_count; i++) - { - printf(" %s (v%u) \"%s\"\n", - lp[i].layerName, - lp[i].specVersion >> 22, - lp[i].description); - } - - free(lp); -} - -static void list_vulkan_device_extensions(VkInstance instance, VkPhysicalDevice device) -{ - uint32_t i, ep_count; - VkExtensionProperties* ep; - - printf("Vulkan device extensions:\n"); - - if (vkEnumerateDeviceExtensionProperties(device, NULL, &ep_count, NULL) != VK_SUCCESS) - return; - - ep = calloc(ep_count, sizeof(VkExtensionProperties)); - - if (vkEnumerateDeviceExtensionProperties(device, NULL, &ep_count, ep) != VK_SUCCESS) - { - free(ep); - return; - } - - for (i = 0; i < ep_count; i++) - printf(" %s (v%u)\n", ep[i].extensionName, ep[i].specVersion); - - free(ep); -} - -static void list_vulkan_device_layers(VkInstance instance, VkPhysicalDevice device) -{ - uint32_t i, lp_count; - VkLayerProperties* lp; - - printf("Vulkan device layers:\n"); - - if (vkEnumerateDeviceLayerProperties(device, &lp_count, NULL) != VK_SUCCESS) - return; - - lp = calloc(lp_count, sizeof(VkLayerProperties)); - - if (vkEnumerateDeviceLayerProperties(device, &lp_count, lp) != VK_SUCCESS) - { - free(lp); - return; - } - - for (i = 0; i < lp_count; i++) - { - printf(" %s (v%u) \"%s\"\n", - lp[i].layerName, - lp[i].specVersion >> 22, - lp[i].description); - } - - free(lp); -} - -static int valid_version(void) -{ - int major, minor, revision; - glfwGetVersion(&major, &minor, &revision); - - if (major != GLFW_VERSION_MAJOR) - { - printf("*** ERROR: GLFW major version mismatch! ***\n"); - return GLFW_FALSE; - } - - if (minor != GLFW_VERSION_MINOR || revision != GLFW_VERSION_REVISION) - printf("*** WARNING: GLFW version mismatch! ***\n"); - - return GLFW_TRUE; -} - -static void print_version(void) -{ - int major, minor, revision; - glfwGetVersion(&major, &minor, &revision); - - printf("GLFW header version: %u.%u.%u\n", - GLFW_VERSION_MAJOR, - GLFW_VERSION_MINOR, - GLFW_VERSION_REVISION); - printf("GLFW library version: %u.%u.%u\n", major, minor, revision); - printf("GLFW library version string: \"%s\"\n", glfwGetVersionString()); -} - -static GLADapiproc glad_vulkan_callback(const char* name, void* user) -{ - return glfwGetInstanceProcAddress((VkInstance) user, name); -} - -int main(int argc, char** argv) -{ - int ch, client, major, minor, revision, profile; - GLint redbits, greenbits, bluebits, alphabits, depthbits, stencilbits; - int list_extensions = GLFW_FALSE, list_layers = GLFW_FALSE; - GLenum error; - GLFWwindow* window; - - enum { CLIENT, CONTEXT, BEHAVIOR, DEBUG_CONTEXT, FORWARD, HELP, - EXTENSIONS, LAYERS, - MAJOR, MINOR, PROFILE, ROBUSTNESS, VERSION, - REDBITS, GREENBITS, BLUEBITS, ALPHABITS, DEPTHBITS, STENCILBITS, - ACCUMREDBITS, ACCUMGREENBITS, ACCUMBLUEBITS, ACCUMALPHABITS, - AUXBUFFERS, SAMPLES, STEREO, SRGB, SINGLEBUFFER, NOERROR_SRSLY, - GRAPHICS_SWITCHING }; - const struct option options[] = - { - { "behavior", 1, NULL, BEHAVIOR }, - { "client-api", 1, NULL, CLIENT }, - { "context-api", 1, NULL, CONTEXT }, - { "debug", 0, NULL, DEBUG_CONTEXT }, - { "forward", 0, NULL, FORWARD }, - { "help", 0, NULL, HELP }, - { "list-extensions", 0, NULL, EXTENSIONS }, - { "list-layers", 0, NULL, LAYERS }, - { "major", 1, NULL, MAJOR }, - { "minor", 1, NULL, MINOR }, - { "profile", 1, NULL, PROFILE }, - { "robustness", 1, NULL, ROBUSTNESS }, - { "version", 0, NULL, VERSION }, - { "red-bits", 1, NULL, REDBITS }, - { "green-bits", 1, NULL, GREENBITS }, - { "blue-bits", 1, NULL, BLUEBITS }, - { "alpha-bits", 1, NULL, ALPHABITS }, - { "depth-bits", 1, NULL, DEPTHBITS }, - { "stencil-bits", 1, NULL, STENCILBITS }, - { "accum-red-bits", 1, NULL, ACCUMREDBITS }, - { "accum-green-bits", 1, NULL, ACCUMGREENBITS }, - { "accum-blue-bits", 1, NULL, ACCUMBLUEBITS }, - { "accum-alpha-bits", 1, NULL, ACCUMALPHABITS }, - { "aux-buffers", 1, NULL, AUXBUFFERS }, - { "samples", 1, NULL, SAMPLES }, - { "stereo", 0, NULL, STEREO }, - { "srgb", 0, NULL, SRGB }, - { "singlebuffer", 0, NULL, SINGLEBUFFER }, - { "no-error", 0, NULL, NOERROR_SRSLY }, - { "graphics-switching", 0, NULL, GRAPHICS_SWITCHING }, - { NULL, 0, NULL, 0 } - }; - - // Initialize GLFW and create window - - if (!valid_version()) - exit(EXIT_FAILURE); - - glfwSetErrorCallback(error_callback); - - glfwInitHint(GLFW_COCOA_MENUBAR, GLFW_FALSE); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - while ((ch = getopt_long(argc, argv, "a:b:c:dfhlm:n:p:s:v", options, NULL)) != -1) - { - switch (ch) - { - case 'a': - case CLIENT: - if (strcasecmp(optarg, API_NAME_OPENGL) == 0) - glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API); - else if (strcasecmp(optarg, API_NAME_OPENGL_ES) == 0) - glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API); - else - { - usage(); - exit(EXIT_FAILURE); - } - break; - case 'b': - case BEHAVIOR: - if (strcasecmp(optarg, BEHAVIOR_NAME_NONE) == 0) - { - glfwWindowHint(GLFW_CONTEXT_RELEASE_BEHAVIOR, - GLFW_RELEASE_BEHAVIOR_NONE); - } - else if (strcasecmp(optarg, BEHAVIOR_NAME_FLUSH) == 0) - { - glfwWindowHint(GLFW_CONTEXT_RELEASE_BEHAVIOR, - GLFW_RELEASE_BEHAVIOR_FLUSH); - } - else - { - usage(); - exit(EXIT_FAILURE); - } - break; - case 'c': - case CONTEXT: - if (strcasecmp(optarg, API_NAME_NATIVE) == 0) - glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_NATIVE_CONTEXT_API); - else if (strcasecmp(optarg, API_NAME_EGL) == 0) - glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API); - else if (strcasecmp(optarg, API_NAME_OSMESA) == 0) - glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_OSMESA_CONTEXT_API); - else - { - usage(); - exit(EXIT_FAILURE); - } - break; - case 'd': - case DEBUG_CONTEXT: - glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); - break; - case 'f': - case FORWARD: - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); - break; - case 'h': - case HELP: - usage(); - exit(EXIT_SUCCESS); - case 'l': - case EXTENSIONS: - list_extensions = GLFW_TRUE; - break; - case LAYERS: - list_layers = GLFW_TRUE; - break; - case 'm': - case MAJOR: - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, atoi(optarg)); - break; - case 'n': - case MINOR: - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, atoi(optarg)); - break; - case 'p': - case PROFILE: - if (strcasecmp(optarg, PROFILE_NAME_CORE) == 0) - { - glfwWindowHint(GLFW_OPENGL_PROFILE, - GLFW_OPENGL_CORE_PROFILE); - } - else if (strcasecmp(optarg, PROFILE_NAME_COMPAT) == 0) - { - glfwWindowHint(GLFW_OPENGL_PROFILE, - GLFW_OPENGL_COMPAT_PROFILE); - } - else - { - usage(); - exit(EXIT_FAILURE); - } - break; - case 's': - case ROBUSTNESS: - if (strcasecmp(optarg, STRATEGY_NAME_NONE) == 0) - { - glfwWindowHint(GLFW_CONTEXT_ROBUSTNESS, - GLFW_NO_RESET_NOTIFICATION); - } - else if (strcasecmp(optarg, STRATEGY_NAME_LOSE) == 0) - { - glfwWindowHint(GLFW_CONTEXT_ROBUSTNESS, - GLFW_LOSE_CONTEXT_ON_RESET); - } - else - { - usage(); - exit(EXIT_FAILURE); - } - break; - case 'v': - case VERSION: - print_version(); - exit(EXIT_SUCCESS); - case REDBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_RED_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_RED_BITS, atoi(optarg)); - break; - case GREENBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_GREEN_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_GREEN_BITS, atoi(optarg)); - break; - case BLUEBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_BLUE_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_BLUE_BITS, atoi(optarg)); - break; - case ALPHABITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_ALPHA_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_ALPHA_BITS, atoi(optarg)); - break; - case DEPTHBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_DEPTH_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_DEPTH_BITS, atoi(optarg)); - break; - case STENCILBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_STENCIL_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_STENCIL_BITS, atoi(optarg)); - break; - case ACCUMREDBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_ACCUM_RED_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_ACCUM_RED_BITS, atoi(optarg)); - break; - case ACCUMGREENBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_ACCUM_GREEN_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_ACCUM_GREEN_BITS, atoi(optarg)); - break; - case ACCUMBLUEBITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_ACCUM_BLUE_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_ACCUM_BLUE_BITS, atoi(optarg)); - break; - case ACCUMALPHABITS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_ACCUM_ALPHA_BITS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_ACCUM_ALPHA_BITS, atoi(optarg)); - break; - case AUXBUFFERS: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_AUX_BUFFERS, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_AUX_BUFFERS, atoi(optarg)); - break; - case SAMPLES: - if (strcmp(optarg, "-") == 0) - glfwWindowHint(GLFW_SAMPLES, GLFW_DONT_CARE); - else - glfwWindowHint(GLFW_SAMPLES, atoi(optarg)); - break; - case STEREO: - glfwWindowHint(GLFW_STEREO, GLFW_TRUE); - break; - case SRGB: - glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); - break; - case SINGLEBUFFER: - glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_FALSE); - break; - case NOERROR_SRSLY: - glfwWindowHint(GLFW_CONTEXT_NO_ERROR, GLFW_TRUE); - break; - case GRAPHICS_SWITCHING: - glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE); - break; - default: - usage(); - exit(EXIT_FAILURE); - } - } - - print_version(); - - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - - window = glfwCreateWindow(200, 200, "Version", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - error = glGetError(); - if (error != GL_NO_ERROR) - printf("*** OpenGL error after make current: 0x%08x ***\n", error); - - // Report client API version - - client = glfwGetWindowAttrib(window, GLFW_CLIENT_API); - major = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MAJOR); - minor = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MINOR); - revision = glfwGetWindowAttrib(window, GLFW_CONTEXT_REVISION); - profile = glfwGetWindowAttrib(window, GLFW_OPENGL_PROFILE); - - printf("%s context version string: \"%s\"\n", - get_api_name(client), - glGetString(GL_VERSION)); - - printf("%s context version parsed by GLFW: %u.%u.%u\n", - get_api_name(client), - major, minor, revision); - - // Report client API context properties - - if (client == GLFW_OPENGL_API) - { - if (major >= 3) - { - GLint flags; - - glGetIntegerv(GL_CONTEXT_FLAGS, &flags); - printf("%s context flags (0x%08x):", get_api_name(client), flags); - - if (flags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) - printf(" forward-compatible"); - if (flags & 2/*GL_CONTEXT_FLAG_DEBUG_BIT*/) - printf(" debug"); - if (flags & GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB) - printf(" robustness"); - if (flags & 8/*GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR*/) - printf(" no-error"); - putchar('\n'); - - printf("%s context flags parsed by GLFW:", get_api_name(client)); - - if (glfwGetWindowAttrib(window, GLFW_OPENGL_FORWARD_COMPAT)) - printf(" forward-compatible"); - if (glfwGetWindowAttrib(window, GLFW_OPENGL_DEBUG_CONTEXT)) - printf(" debug"); - if (glfwGetWindowAttrib(window, GLFW_CONTEXT_ROBUSTNESS) == GLFW_LOSE_CONTEXT_ON_RESET) - printf(" robustness"); - if (glfwGetWindowAttrib(window, GLFW_CONTEXT_NO_ERROR)) - printf(" no-error"); - putchar('\n'); - } - - if (major >= 4 || (major == 3 && minor >= 2)) - { - GLint mask; - glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask); - - printf("%s profile mask (0x%08x): %s\n", - get_api_name(client), - mask, - get_profile_name_gl(mask)); - - printf("%s profile mask parsed by GLFW: %s\n", - get_api_name(client), - get_profile_name_glfw(profile)); - } - - if (GLAD_GL_ARB_robustness) - { - const int robustness = glfwGetWindowAttrib(window, GLFW_CONTEXT_ROBUSTNESS); - GLint strategy; - glGetIntegerv(GL_RESET_NOTIFICATION_STRATEGY_ARB, &strategy); - - printf("%s robustness strategy (0x%08x): %s\n", - get_api_name(client), - strategy, - get_strategy_name_gl(strategy)); - - printf("%s robustness strategy parsed by GLFW: %s\n", - get_api_name(client), - get_strategy_name_glfw(robustness)); - } - } - - printf("%s context renderer string: \"%s\"\n", - get_api_name(client), - glGetString(GL_RENDERER)); - printf("%s context vendor string: \"%s\"\n", - get_api_name(client), - glGetString(GL_VENDOR)); - - if (major >= 2) - { - printf("%s context shading language version: \"%s\"\n", - get_api_name(client), - glGetString(GL_SHADING_LANGUAGE_VERSION)); - } - - printf("%s framebuffer:\n", get_api_name(client)); - - if (client == GLFW_OPENGL_API && profile == GLFW_OPENGL_CORE_PROFILE) - { - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_BACK_LEFT, - GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, - &redbits); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_BACK_LEFT, - GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, - &greenbits); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_BACK_LEFT, - GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, - &bluebits); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_BACK_LEFT, - GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, - &alphabits); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_DEPTH, - GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, - &depthbits); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, - GL_STENCIL, - GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, - &stencilbits); - } - else - { - glGetIntegerv(GL_RED_BITS, &redbits); - glGetIntegerv(GL_GREEN_BITS, &greenbits); - glGetIntegerv(GL_BLUE_BITS, &bluebits); - glGetIntegerv(GL_ALPHA_BITS, &alphabits); - glGetIntegerv(GL_DEPTH_BITS, &depthbits); - glGetIntegerv(GL_STENCIL_BITS, &stencilbits); - } - - printf(" red: %u green: %u blue: %u alpha: %u depth: %u stencil: %u\n", - redbits, greenbits, bluebits, alphabits, depthbits, stencilbits); - - if (client == GLFW_OPENGL_ES_API || - GLAD_GL_ARB_multisample || - major > 1 || minor >= 3) - { - GLint samples, samplebuffers; - glGetIntegerv(GL_SAMPLES, &samples); - glGetIntegerv(GL_SAMPLE_BUFFERS, &samplebuffers); - - printf(" samples: %u sample buffers: %u\n", samples, samplebuffers); - } - - if (client == GLFW_OPENGL_API && profile != GLFW_OPENGL_CORE_PROFILE) - { - GLint accumredbits, accumgreenbits, accumbluebits, accumalphabits; - GLint auxbuffers; - - glGetIntegerv(GL_ACCUM_RED_BITS, &accumredbits); - glGetIntegerv(GL_ACCUM_GREEN_BITS, &accumgreenbits); - glGetIntegerv(GL_ACCUM_BLUE_BITS, &accumbluebits); - glGetIntegerv(GL_ACCUM_ALPHA_BITS, &accumalphabits); - glGetIntegerv(GL_AUX_BUFFERS, &auxbuffers); - - printf(" accum red: %u accum green: %u accum blue: %u accum alpha: %u aux buffers: %u\n", - accumredbits, accumgreenbits, accumbluebits, accumalphabits, auxbuffers); - } - - if (list_extensions) - list_context_extensions(client, major, minor); - - printf("Vulkan loader: %s\n", - glfwVulkanSupported() ? "available" : "missing"); - - if (glfwVulkanSupported()) - { - uint32_t loader_version = VK_API_VERSION_1_0; - uint32_t i, re_count, pd_count; - const char** re; - VkApplicationInfo ai = {0}; - VkInstanceCreateInfo ici = {0}; - VkInstance instance; - VkPhysicalDevice* pd; - - gladLoadVulkanUserPtr(NULL, glad_vulkan_callback, NULL); - - if (vkEnumerateInstanceVersion) - { - uint32_t version; - if (vkEnumerateInstanceVersion(&version) == VK_SUCCESS) - loader_version = version; - } - - printf("Vulkan loader API version: %i.%i\n", - VK_VERSION_MAJOR(loader_version), - VK_VERSION_MINOR(loader_version)); - - re = glfwGetRequiredInstanceExtensions(&re_count); - - printf("Vulkan required instance extensions:"); - if (re) - { - for (i = 0; i < re_count; i++) - printf(" %s", re[i]); - putchar('\n'); - } - else - printf(" missing\n"); - - if (list_extensions) - list_vulkan_instance_extensions(); - - if (list_layers) - list_vulkan_instance_layers(); - - ai.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - ai.pApplicationName = "glfwinfo"; - ai.applicationVersion = VK_MAKE_VERSION(GLFW_VERSION_MAJOR, - GLFW_VERSION_MINOR, - GLFW_VERSION_REVISION); - - if (loader_version >= VK_API_VERSION_1_1) - ai.apiVersion = VK_API_VERSION_1_1; - else - ai.apiVersion = VK_API_VERSION_1_0; - - ici.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; - ici.pApplicationInfo = &ai; - ici.enabledExtensionCount = re_count; - ici.ppEnabledExtensionNames = re; - - if (vkCreateInstance(&ici, NULL, &instance) != VK_SUCCESS) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - gladLoadVulkanUserPtr(NULL, glad_vulkan_callback, instance); - - if (vkEnumeratePhysicalDevices(instance, &pd_count, NULL) != VK_SUCCESS) - { - vkDestroyInstance(instance, NULL); - glfwTerminate(); - exit(EXIT_FAILURE); - } - - pd = calloc(pd_count, sizeof(VkPhysicalDevice)); - - if (vkEnumeratePhysicalDevices(instance, &pd_count, pd) != VK_SUCCESS) - { - free(pd); - vkDestroyInstance(instance, NULL); - glfwTerminate(); - exit(EXIT_FAILURE); - } - - for (i = 0; i < pd_count; i++) - { - VkPhysicalDeviceProperties pdp; - - vkGetPhysicalDeviceProperties(pd[i], &pdp); - - printf("Vulkan %s device: \"%s\" API version %i.%i\n", - get_device_type_name(pdp.deviceType), - pdp.deviceName, - VK_VERSION_MAJOR(pdp.apiVersion), - VK_VERSION_MINOR(pdp.apiVersion)); - - if (list_extensions) - list_vulkan_device_extensions(instance, pd[i]); - - if (list_layers) - list_vulkan_device_layers(instance, pd[i]); - } - - free(pd); - vkDestroyInstance(instance, NULL); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/icon.c b/third_party/penumbra/vendor/glfw/tests/icon.c deleted file mode 100644 index aa7ee18174f..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/icon.c +++ /dev/null @@ -1,149 +0,0 @@ -//======================================================================== -// Window icon test program -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This program is used to test the icon feature. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -// a simple glfw logo -const char* const logo[] = -{ - "................", - "................", - "...0000..0......", - "...0.....0......", - "...0.00..0......", - "...0..0..0......", - "...0000..0000...", - "................", - "................", - "...000..0...0...", - "...0....0...0...", - "...000..0.0.0...", - "...0....0.0.0...", - "...0....00000...", - "................", - "................" -}; - -const unsigned char icon_colors[5][4] = -{ - { 0, 0, 0, 255 }, // black - { 255, 0, 0, 255 }, // red - { 0, 255, 0, 255 }, // green - { 0, 0, 255, 255 }, // blue - { 255, 255, 255, 255 } // white -}; - -static int cur_icon_color = 0; - -static void set_icon(GLFWwindow* window, int icon_color) -{ - int x, y; - unsigned char pixels[16 * 16 * 4]; - unsigned char* target = pixels; - GLFWimage img = { 16, 16, pixels }; - - for (y = 0; y < img.width; y++) - { - for (x = 0; x < img.height; x++) - { - if (logo[y][x] == '0') - memcpy(target, icon_colors[icon_color], 4); - else - memset(target, 0, 4); - - target += 4; - } - } - - glfwSetWindowIcon(window, 1, &img); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - case GLFW_KEY_SPACE: - cur_icon_color = (cur_icon_color + 1) % 5; - set_icon(window, cur_icon_color); - break; - case GLFW_KEY_X: - glfwSetWindowIcon(window, 0, NULL); - break; - } -} - -int main(int argc, char** argv) -{ - GLFWwindow* window; - - if (!glfwInit()) - { - fprintf(stderr, "Failed to initialize GLFW\n"); - exit(EXIT_FAILURE); - } - - window = glfwCreateWindow(200, 200, "Window Icon", NULL, NULL); - if (!window) - { - glfwTerminate(); - - fprintf(stderr, "Failed to open GLFW window\n"); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - glfwSetKeyCallback(window, key_callback); - set_icon(window, cur_icon_color); - - while (!glfwWindowShouldClose(window)) - { - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); - glfwWaitEvents(); - } - - glfwDestroyWindow(window); - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/iconify.c b/third_party/penumbra/vendor/glfw/tests/iconify.c deleted file mode 100644 index ff446d2d8c3..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/iconify.c +++ /dev/null @@ -1,297 +0,0 @@ -//======================================================================== -// Iconify/restore test program -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This program is used to test the iconify/restore functionality for -// both full screen and windowed mode windows -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include - -#include "getopt.h" - -static int windowed_xpos, windowed_ypos, windowed_width, windowed_height; - -static void usage(void) -{ - printf("Usage: iconify [-h] [-f [-a] [-n]]\n"); - printf("Options:\n"); - printf(" -a create windows for all monitors\n"); - printf(" -f create full screen window(s)\n"); - printf(" -h show this help\n"); -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - printf("%0.2f Key %s\n", - glfwGetTime(), - action == GLFW_PRESS ? "pressed" : "released"); - - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_I: - glfwIconifyWindow(window); - break; - case GLFW_KEY_M: - glfwMaximizeWindow(window); - break; - case GLFW_KEY_R: - glfwRestoreWindow(window); - break; - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - case GLFW_KEY_A: - glfwSetWindowAttrib(window, GLFW_AUTO_ICONIFY, !glfwGetWindowAttrib(window, GLFW_AUTO_ICONIFY)); - break; - case GLFW_KEY_B: - glfwSetWindowAttrib(window, GLFW_RESIZABLE, !glfwGetWindowAttrib(window, GLFW_RESIZABLE)); - break; - case GLFW_KEY_D: - glfwSetWindowAttrib(window, GLFW_DECORATED, !glfwGetWindowAttrib(window, GLFW_DECORATED)); - break; - case GLFW_KEY_F: - glfwSetWindowAttrib(window, GLFW_FLOATING, !glfwGetWindowAttrib(window, GLFW_FLOATING)); - break; - case GLFW_KEY_F11: - case GLFW_KEY_ENTER: - { - if (mods != GLFW_MOD_ALT) - return; - - if (glfwGetWindowMonitor(window)) - { - glfwSetWindowMonitor(window, NULL, - windowed_xpos, windowed_ypos, - windowed_width, windowed_height, - 0); - } - else - { - GLFWmonitor* monitor = glfwGetPrimaryMonitor(); - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwGetWindowPos(window, &windowed_xpos, &windowed_ypos); - glfwGetWindowSize(window, &windowed_width, &windowed_height); - glfwSetWindowMonitor(window, monitor, - 0, 0, mode->width, mode->height, - mode->refreshRate); - } - } - - break; - } - } -} - -static void window_size_callback(GLFWwindow* window, int width, int height) -{ - printf("%0.2f Window resized to %ix%i\n", glfwGetTime(), width, height); -} - -static void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - printf("%0.2f Framebuffer resized to %ix%i\n", glfwGetTime(), width, height); -} - -static void window_focus_callback(GLFWwindow* window, int focused) -{ - printf("%0.2f Window %s\n", - glfwGetTime(), - focused ? "focused" : "defocused"); -} - -static void window_iconify_callback(GLFWwindow* window, int iconified) -{ - printf("%0.2f Window %s\n", - glfwGetTime(), - iconified ? "iconified" : "uniconified"); -} - -static void window_maximize_callback(GLFWwindow* window, int maximized) -{ - printf("%0.2f Window %s\n", - glfwGetTime(), - maximized ? "maximized" : "unmaximized"); -} - -static void window_refresh_callback(GLFWwindow* window) -{ - printf("%0.2f Window refresh\n", glfwGetTime()); - - glfwMakeContextCurrent(window); - - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); -} - -static GLFWwindow* create_window(GLFWmonitor* monitor) -{ - int width, height; - GLFWwindow* window; - - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - - glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - glfwWindowHint(GLFW_RED_BITS, mode->redBits); - glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); - glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); - - width = mode->width; - height = mode->height; - } - else - { - width = 640; - height = 480; - } - - window = glfwCreateWindow(width, height, "Iconify", monitor, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - - return window; -} - -int main(int argc, char** argv) -{ - int ch, i, window_count; - int fullscreen = GLFW_FALSE, all_monitors = GLFW_FALSE; - GLFWwindow** windows; - - while ((ch = getopt(argc, argv, "afhn")) != -1) - { - switch (ch) - { - case 'a': - all_monitors = GLFW_TRUE; - break; - - case 'h': - usage(); - exit(EXIT_SUCCESS); - - case 'f': - fullscreen = GLFW_TRUE; - break; - - default: - usage(); - exit(EXIT_FAILURE); - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - if (fullscreen && all_monitors) - { - int monitor_count; - GLFWmonitor** monitors = glfwGetMonitors(&monitor_count); - - window_count = monitor_count; - windows = calloc(window_count, sizeof(GLFWwindow*)); - - for (i = 0; i < monitor_count; i++) - { - windows[i] = create_window(monitors[i]); - if (!windows[i]) - break; - } - } - else - { - GLFWmonitor* monitor = NULL; - - if (fullscreen) - monitor = glfwGetPrimaryMonitor(); - - window_count = 1; - windows = calloc(window_count, sizeof(GLFWwindow*)); - windows[0] = create_window(monitor); - } - - for (i = 0; i < window_count; i++) - { - glfwSetKeyCallback(windows[i], key_callback); - glfwSetFramebufferSizeCallback(windows[i], framebuffer_size_callback); - glfwSetWindowSizeCallback(windows[i], window_size_callback); - glfwSetWindowFocusCallback(windows[i], window_focus_callback); - glfwSetWindowIconifyCallback(windows[i], window_iconify_callback); - glfwSetWindowMaximizeCallback(windows[i], window_maximize_callback); - glfwSetWindowRefreshCallback(windows[i], window_refresh_callback); - - window_refresh_callback(windows[i]); - - printf("Window is %s and %s\n", - glfwGetWindowAttrib(windows[i], GLFW_ICONIFIED) ? "iconified" : "restored", - glfwGetWindowAttrib(windows[i], GLFW_FOCUSED) ? "focused" : "defocused"); - } - - for (;;) - { - glfwWaitEvents(); - - for (i = 0; i < window_count; i++) - { - if (glfwWindowShouldClose(windows[i])) - break; - } - - if (i < window_count) - break; - - // Workaround for an issue with msvcrt and mintty - fflush(stdout); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/inputlag.c b/third_party/penumbra/vendor/glfw/tests/inputlag.c deleted file mode 100644 index 269a0c8f979..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/inputlag.c +++ /dev/null @@ -1,308 +0,0 @@ -//======================================================================== -// Input lag test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test renders a marker at the cursor position reported by GLFW to -// check how much it lags behind the hardware mouse cursor -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#define NK_IMPLEMENTATION -#define NK_INCLUDE_FIXED_TYPES -#define NK_INCLUDE_FONT_BAKING -#define NK_INCLUDE_DEFAULT_FONT -#define NK_INCLUDE_DEFAULT_ALLOCATOR -#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT -#define NK_INCLUDE_STANDARD_VARARGS -#include - -#define NK_GLFW_GL2_IMPLEMENTATION -#include - -#include -#include -#include - -#include "getopt.h" - -void usage(void) -{ - printf("Usage: inputlag [-h] [-f]\n"); - printf("Options:\n"); - printf(" -f create full screen window\n"); - printf(" -h show this help\n"); -} - -struct nk_vec2 cursor_new, cursor_pos, cursor_vel; -enum { cursor_sync_query, cursor_input_message } cursor_method = cursor_sync_query; - -void sample_input(GLFWwindow* window) -{ - float a = .25; // exponential smoothing factor - - if (cursor_method == cursor_sync_query) { - double x, y; - glfwGetCursorPos(window, &x, &y); - cursor_new.x = (float) x; - cursor_new.y = (float) y; - } - - cursor_vel.x = (cursor_new.x - cursor_pos.x) * a + cursor_vel.x * (1 - a); - cursor_vel.y = (cursor_new.y - cursor_pos.y) * a + cursor_vel.y * (1 - a); - cursor_pos = cursor_new; -} - -void cursor_pos_callback(GLFWwindow* window, double xpos, double ypos) -{ - cursor_new.x = (float) xpos; - cursor_new.y = (float) ypos; -} - -int enable_vsync = nk_true; - -void update_vsync() -{ - glfwSwapInterval(enable_vsync == nk_true ? 1 : 0); -} - -int swap_clear = nk_false; -int swap_finish = nk_true; -int swap_occlusion_query = nk_false; -int swap_read_pixels = nk_false; -GLuint occlusion_query; - -void swap_buffers(GLFWwindow* window) -{ - glfwSwapBuffers(window); - - if (swap_clear) - glClear(GL_COLOR_BUFFER_BIT); - - if (swap_finish) - glFinish(); - - if (swap_occlusion_query) { - GLint occlusion_result; - if (!occlusion_query) - glGenQueries(1, &occlusion_query); - glBeginQuery(GL_SAMPLES_PASSED, occlusion_query); - glBegin(GL_POINTS); - glVertex2f(0, 0); - glEnd(); - glEndQuery(GL_SAMPLES_PASSED); - glGetQueryObjectiv(occlusion_query, GL_QUERY_RESULT, &occlusion_result); - } - - if (swap_read_pixels) { - unsigned char rgba[4]; - glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, rgba); - } -} - -void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, 1); - break; - } -} - -void draw_marker(struct nk_command_buffer* canvas, int lead, struct nk_vec2 pos) -{ - struct nk_color colors[4] = { nk_rgb(255,0,0), nk_rgb(255,255,0), nk_rgb(0,255,0), nk_rgb(0,96,255) }; - struct nk_rect rect = { -5 + pos.x, -5 + pos.y, 10, 10 }; - nk_fill_circle(canvas, rect, colors[lead]); -} - -int main(int argc, char** argv) -{ - int ch, width, height; - unsigned long frame_count = 0; - double last_time, current_time; - double frame_rate = 0; - int fullscreen = GLFW_FALSE; - GLFWmonitor* monitor = NULL; - GLFWwindow* window; - struct nk_context* nk; - struct nk_font_atlas* atlas; - - int show_forecasts = nk_true; - - while ((ch = getopt(argc, argv, "fh")) != -1) - { - switch (ch) - { - case 'h': - usage(); - exit(EXIT_SUCCESS); - - case 'f': - fullscreen = GLFW_TRUE; - break; - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - if (fullscreen) - { - const GLFWvidmode* mode; - - monitor = glfwGetPrimaryMonitor(); - mode = glfwGetVideoMode(monitor); - - width = mode->width; - height = mode->height; - } - else - { - width = 640; - height = 480; - } - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); - - window = glfwCreateWindow(width, height, "Input lag test", monitor, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - update_vsync(); - - last_time = glfwGetTime(); - - nk = nk_glfw3_init(window, NK_GLFW3_INSTALL_CALLBACKS); - nk_glfw3_font_stash_begin(&atlas); - nk_glfw3_font_stash_end(); - - glfwSetKeyCallback(window, key_callback); - glfwSetCursorPosCallback(window, cursor_pos_callback); - - while (!glfwWindowShouldClose(window)) - { - int width, height; - struct nk_rect area; - - glfwPollEvents(); - sample_input(window); - - glfwGetWindowSize(window, &width, &height); - area = nk_rect(0.f, 0.f, (float) width, (float) height); - - glClear(GL_COLOR_BUFFER_BIT); - nk_glfw3_new_frame(); - if (nk_begin(nk, "", area, 0)) - { - nk_flags align_left = NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE; - struct nk_command_buffer *canvas = nk_window_get_canvas(nk); - int lead; - - for (lead = show_forecasts ? 3 : 0; lead >= 0; lead--) - draw_marker(canvas, lead, nk_vec2(cursor_pos.x + cursor_vel.x * lead, - cursor_pos.y + cursor_vel.y * lead)); - - // print instructions - nk_layout_row_dynamic(nk, 20, 1); - nk_label(nk, "Move mouse uniformly and check marker under cursor:", align_left); - for (lead = 0; lead <= 3; lead++) { - nk_layout_row_begin(nk, NK_STATIC, 12, 2); - nk_layout_row_push(nk, 25); - draw_marker(canvas, lead, nk_layout_space_to_screen(nk, nk_vec2(20, 5))); - nk_label(nk, "", 0); - nk_layout_row_push(nk, 500); - if (lead == 0) - nk_label(nk, "- current cursor position (no input lag)", align_left); - else - nk_labelf(nk, align_left, "- %d-frame forecast (input lag is %d frame)", lead, lead); - nk_layout_row_end(nk); - } - - nk_layout_row_dynamic(nk, 20, 1); - - nk_checkbox_label(nk, "Show forecasts", &show_forecasts); - nk_label(nk, "Input method:", align_left); - if (nk_option_label(nk, "glfwGetCursorPos (sync query)", cursor_method == cursor_sync_query)) - cursor_method = cursor_sync_query; - if (nk_option_label(nk, "glfwSetCursorPosCallback (latest input message)", cursor_method == cursor_input_message)) - cursor_method = cursor_input_message; - - nk_label(nk, "", 0); // separator - - nk_value_float(nk, "FPS", (float) frame_rate); - if (nk_checkbox_label(nk, "Enable vsync", &enable_vsync)) - update_vsync(); - - nk_label(nk, "", 0); // separator - - nk_label(nk, "After swap:", align_left); - nk_checkbox_label(nk, "glClear", &swap_clear); - nk_checkbox_label(nk, "glFinish", &swap_finish); - nk_checkbox_label(nk, "draw with occlusion query", &swap_occlusion_query); - nk_checkbox_label(nk, "glReadPixels", &swap_read_pixels); - } - - nk_end(nk); - nk_glfw3_render(NK_ANTI_ALIASING_ON); - - swap_buffers(window); - - frame_count++; - - current_time = glfwGetTime(); - if (current_time - last_time > 1.0) - { - frame_rate = frame_count / (current_time - last_time); - frame_count = 0; - last_time = current_time; - } - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/joysticks.c b/third_party/penumbra/vendor/glfw/tests/joysticks.c deleted file mode 100644 index 8eae021e4b9..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/joysticks.c +++ /dev/null @@ -1,344 +0,0 @@ -//======================================================================== -// Joystick input test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test displays the state of every button and axis of every connected -// joystick and/or gamepad -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#define NK_IMPLEMENTATION -#define NK_INCLUDE_FIXED_TYPES -#define NK_INCLUDE_FONT_BAKING -#define NK_INCLUDE_DEFAULT_FONT -#define NK_INCLUDE_DEFAULT_ALLOCATOR -#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT -#define NK_INCLUDE_STANDARD_VARARGS -#define NK_BUTTON_TRIGGER_ON_RELEASE -#include - -#define NK_GLFW_GL2_IMPLEMENTATION -#include - -#include -#include -#include - -#ifdef _MSC_VER -#define strdup(x) _strdup(x) -#endif - -static GLFWwindow* window; -static int joysticks[GLFW_JOYSTICK_LAST + 1]; -static int joystick_count = 0; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void joystick_callback(int jid, int event) -{ - if (event == GLFW_CONNECTED) - joysticks[joystick_count++] = jid; - else if (event == GLFW_DISCONNECTED) - { - int i; - - for (i = 0; i < joystick_count; i++) - { - if (joysticks[i] == jid) - break; - } - - for (i = i + 1; i < joystick_count; i++) - joysticks[i - 1] = joysticks[i]; - - joystick_count--; - } - - if (!glfwGetWindowAttrib(window, GLFW_FOCUSED)) - glfwRequestWindowAttention(window); -} - -static void drop_callback(GLFWwindow* window, int count, const char* paths[]) -{ - int i; - - for (i = 0; i < count; i++) - { - long size; - char* text; - FILE* stream = fopen(paths[i], "rb"); - if (!stream) - continue; - - fseek(stream, 0, SEEK_END); - size = ftell(stream); - fseek(stream, 0, SEEK_SET); - - text = malloc(size + 1); - text[size] = '\0'; - if (fread(text, 1, size, stream) == size) - glfwUpdateGamepadMappings(text); - - free(text); - fclose(stream); - } -} - -static const char* joystick_label(int jid) -{ - static char label[1024]; - snprintf(label, sizeof(label), "%i: %s", jid + 1, glfwGetJoystickName(jid)); - return label; -} - -static void hat_widget(struct nk_context* nk, unsigned char state) -{ - float radius; - struct nk_rect area; - struct nk_vec2 center; - - if (nk_widget(&area, nk) == NK_WIDGET_INVALID) - return; - - center = nk_vec2(area.x + area.w / 2.f, area.y + area.h / 2.f); - radius = NK_MIN(area.w, area.h) / 2.f; - - nk_stroke_circle(nk_window_get_canvas(nk), - nk_rect(center.x - radius, - center.y - radius, - radius * 2.f, - radius * 2.f), - 1.f, - nk_rgb(175, 175, 175)); - - if (state) - { - const float angles[] = - { - 0.f, 0.f, - NK_PI * 1.5f, NK_PI * 1.75f, - NK_PI, 0.f, - NK_PI * 1.25f, 0.f, - NK_PI * 0.5f, NK_PI * 0.25f, - 0.f, 0.f, - NK_PI * 0.75f, 0.f, - }; - const float cosa = nk_cos(angles[state]); - const float sina = nk_sin(angles[state]); - const struct nk_vec2 p0 = nk_vec2(0.f, -radius); - const struct nk_vec2 p1 = nk_vec2( radius / 2.f, -radius / 3.f); - const struct nk_vec2 p2 = nk_vec2(-radius / 2.f, -radius / 3.f); - - nk_fill_triangle(nk_window_get_canvas(nk), - center.x + cosa * p0.x + sina * p0.y, - center.y + cosa * p0.y - sina * p0.x, - center.x + cosa * p1.x + sina * p1.y, - center.y + cosa * p1.y - sina * p1.x, - center.x + cosa * p2.x + sina * p2.y, - center.y + cosa * p2.y - sina * p2.x, - nk_rgb(175, 175, 175)); - } -} - -int main(void) -{ - int jid, hat_buttons = GLFW_FALSE; - struct nk_context* nk; - struct nk_font_atlas* atlas; - - memset(joysticks, 0, sizeof(joysticks)); - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); - - window = glfwCreateWindow(800, 600, "Joystick Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - nk = nk_glfw3_init(window, NK_GLFW3_INSTALL_CALLBACKS); - nk_glfw3_font_stash_begin(&atlas); - nk_glfw3_font_stash_end(); - - for (jid = GLFW_JOYSTICK_1; jid <= GLFW_JOYSTICK_LAST; jid++) - { - if (glfwJoystickPresent(jid)) - joysticks[joystick_count++] = jid; - } - - glfwSetJoystickCallback(joystick_callback); - glfwSetDropCallback(window, drop_callback); - - while (!glfwWindowShouldClose(window)) - { - int i, width, height; - - glfwGetWindowSize(window, &width, &height); - - glClear(GL_COLOR_BUFFER_BIT); - nk_glfw3_new_frame(); - - if (nk_begin(nk, - "Joysticks", - nk_rect(width - 200.f, 0.f, 200.f, (float) height), - NK_WINDOW_MINIMIZABLE | - NK_WINDOW_TITLE)) - { - nk_layout_row_dynamic(nk, 30, 1); - - nk_checkbox_label(nk, "Hat buttons", &hat_buttons); - - if (joystick_count) - { - for (i = 0; i < joystick_count; i++) - { - if (nk_button_label(nk, joystick_label(joysticks[i]))) - nk_window_set_focus(nk, joystick_label(joysticks[i])); - } - } - else - nk_label(nk, "No joysticks connected", NK_TEXT_LEFT); - } - - nk_end(nk); - - for (i = 0; i < joystick_count; i++) - { - if (nk_begin(nk, - joystick_label(joysticks[i]), - nk_rect(i * 20.f, i * 20.f, 550.f, 570.f), - NK_WINDOW_BORDER | - NK_WINDOW_MOVABLE | - NK_WINDOW_SCALABLE | - NK_WINDOW_MINIMIZABLE | - NK_WINDOW_TITLE)) - { - int j, axis_count, button_count, hat_count; - const float* axes; - const unsigned char* buttons; - const unsigned char* hats; - GLFWgamepadstate state; - - nk_layout_row_dynamic(nk, 30, 1); - nk_labelf(nk, NK_TEXT_LEFT, "Hardware GUID %s", - glfwGetJoystickGUID(joysticks[i])); - nk_label(nk, "Joystick state", NK_TEXT_LEFT); - - axes = glfwGetJoystickAxes(joysticks[i], &axis_count); - buttons = glfwGetJoystickButtons(joysticks[i], &button_count); - hats = glfwGetJoystickHats(joysticks[i], &hat_count); - - if (!hat_buttons) - button_count -= hat_count * 4; - - for (j = 0; j < axis_count; j++) - nk_slide_float(nk, -1.f, axes[j], 1.f, 0.1f); - - nk_layout_row_dynamic(nk, 30, 12); - - for (j = 0; j < button_count; j++) - { - char name[16]; - snprintf(name, sizeof(name), "%i", j + 1); - nk_select_label(nk, name, NK_TEXT_CENTERED, buttons[j]); - } - - nk_layout_row_dynamic(nk, 30, 8); - - for (j = 0; j < hat_count; j++) - hat_widget(nk, hats[j]); - - nk_layout_row_dynamic(nk, 30, 1); - - if (glfwGetGamepadState(joysticks[i], &state)) - { - int hat = 0; - const char* names[GLFW_GAMEPAD_BUTTON_LAST + 1 - 4] = - { - "A", "B", "X", "Y", - "LB", "RB", - "Back", "Start", "Guide", - "LT", "RT", - }; - - nk_labelf(nk, NK_TEXT_LEFT, - "Gamepad state: %s", - glfwGetGamepadName(joysticks[i])); - - nk_layout_row_dynamic(nk, 30, 2); - - for (j = 0; j <= GLFW_GAMEPAD_AXIS_LAST; j++) - nk_slide_float(nk, -1.f, state.axes[j], 1.f, 0.1f); - - nk_layout_row_dynamic(nk, 30, GLFW_GAMEPAD_BUTTON_LAST + 1 - 4); - - for (j = 0; j <= GLFW_GAMEPAD_BUTTON_LAST - 4; j++) - nk_select_label(nk, names[j], NK_TEXT_CENTERED, state.buttons[j]); - - if (state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_UP]) - hat |= GLFW_HAT_UP; - if (state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_RIGHT]) - hat |= GLFW_HAT_RIGHT; - if (state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_DOWN]) - hat |= GLFW_HAT_DOWN; - if (state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_LEFT]) - hat |= GLFW_HAT_LEFT; - - nk_layout_row_dynamic(nk, 30, 8); - hat_widget(nk, hat); - } - else - nk_label(nk, "Joystick has no gamepad mapping", NK_TEXT_LEFT); - } - - nk_end(nk); - } - - nk_glfw3_render(NK_ANTI_ALIASING_ON); - - glfwSwapBuffers(window); - glfwPollEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/monitors.c b/third_party/penumbra/vendor/glfw/tests/monitors.c deleted file mode 100644 index 2b75d7b1ec5..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/monitors.c +++ /dev/null @@ -1,260 +0,0 @@ -//======================================================================== -// Monitor information tool -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test prints monitor and video mode information or verifies video -// modes -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -#include "getopt.h" - -enum Mode -{ - LIST_MODE, - TEST_MODE -}; - -static void usage(void) -{ - printf("Usage: monitors [-t]\n"); - printf(" monitors -h\n"); -} - -static int euclid(int a, int b) -{ - return b ? euclid(b, a % b) : a; -} - -static const char* format_mode(const GLFWvidmode* mode) -{ - static char buffer[512]; - const int gcd = euclid(mode->width, mode->height); - - snprintf(buffer, - sizeof(buffer), - "%i x %i x %i (%i:%i) (%i %i %i) %i Hz", - mode->width, mode->height, - mode->redBits + mode->greenBits + mode->blueBits, - mode->width / gcd, mode->height / gcd, - mode->redBits, mode->greenBits, mode->blueBits, - mode->refreshRate); - - buffer[sizeof(buffer) - 1] = '\0'; - return buffer; -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - printf("Framebuffer resized to %ix%i\n", width, height); - - glViewport(0, 0, width, height); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static void list_modes(GLFWmonitor* monitor) -{ - int count, x, y, width_mm, height_mm, i; - int workarea_x, workarea_y, workarea_width, workarea_height; - float xscale, yscale; - - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - const GLFWvidmode* modes = glfwGetVideoModes(monitor, &count); - - glfwGetMonitorPos(monitor, &x, &y); - glfwGetMonitorPhysicalSize(monitor, &width_mm, &height_mm); - glfwGetMonitorContentScale(monitor, &xscale, &yscale); - glfwGetMonitorWorkarea(monitor, &workarea_x, &workarea_y, &workarea_width, &workarea_height); - - printf("Name: %s (%s)\n", - glfwGetMonitorName(monitor), - glfwGetPrimaryMonitor() == monitor ? "primary" : "secondary"); - printf("Current mode: %s\n", format_mode(mode)); - printf("Virtual position: %i, %i\n", x, y); - printf("Content scale: %f x %f\n", xscale, yscale); - - printf("Physical size: %i x %i mm (%0.2f dpi at %i x %i)\n", - width_mm, height_mm, mode->width * 25.4f / width_mm, mode->width, mode->height); - printf("Monitor work area: %i x %i starting at %i, %i\n", - workarea_width, workarea_height, workarea_x, workarea_y); - - printf("Modes:\n"); - - for (i = 0; i < count; i++) - { - printf("%3u: %s", (unsigned int) i, format_mode(modes + i)); - - if (memcmp(mode, modes + i, sizeof(GLFWvidmode)) == 0) - printf(" (current mode)"); - - putchar('\n'); - } -} - -static void test_modes(GLFWmonitor* monitor) -{ - int i, count; - GLFWwindow* window; - const GLFWvidmode* modes = glfwGetVideoModes(monitor, &count); - - for (i = 0; i < count; i++) - { - const GLFWvidmode* mode = modes + i; - GLFWvidmode current; - - glfwWindowHint(GLFW_RED_BITS, mode->redBits); - glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits); - glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits); - glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate); - - printf("Testing mode %u on monitor %s: %s\n", - (unsigned int) i, - glfwGetMonitorName(monitor), - format_mode(mode)); - - window = glfwCreateWindow(mode->width, mode->height, - "Video Mode Test", - glfwGetPrimaryMonitor(), - NULL); - if (!window) - { - printf("Failed to enter mode %u: %s\n", - (unsigned int) i, - format_mode(mode)); - continue; - } - - glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); - glfwSetKeyCallback(window, key_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - glfwSetTime(0.0); - - while (glfwGetTime() < 5.0) - { - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); - glfwPollEvents(); - - if (glfwWindowShouldClose(window)) - { - printf("User terminated program\n"); - - glfwTerminate(); - exit(EXIT_SUCCESS); - } - } - - glGetIntegerv(GL_RED_BITS, ¤t.redBits); - glGetIntegerv(GL_GREEN_BITS, ¤t.greenBits); - glGetIntegerv(GL_BLUE_BITS, ¤t.blueBits); - - glfwGetWindowSize(window, ¤t.width, ¤t.height); - - if (current.redBits != mode->redBits || - current.greenBits != mode->greenBits || - current.blueBits != mode->blueBits) - { - printf("*** Color bit mismatch: (%i %i %i) instead of (%i %i %i)\n", - current.redBits, current.greenBits, current.blueBits, - mode->redBits, mode->greenBits, mode->blueBits); - } - - if (current.width != mode->width || current.height != mode->height) - { - printf("*** Size mismatch: %ix%i instead of %ix%i\n", - current.width, current.height, - mode->width, mode->height); - } - - printf("Closing window\n"); - - glfwDestroyWindow(window); - window = NULL; - - glfwPollEvents(); - } -} - -int main(int argc, char** argv) -{ - int ch, i, count, mode = LIST_MODE; - GLFWmonitor** monitors; - - while ((ch = getopt(argc, argv, "th")) != -1) - { - switch (ch) - { - case 'h': - usage(); - exit(EXIT_SUCCESS); - case 't': - mode = TEST_MODE; - break; - default: - usage(); - exit(EXIT_FAILURE); - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - monitors = glfwGetMonitors(&count); - - for (i = 0; i < count; i++) - { - if (mode == LIST_MODE) - list_modes(monitors[i]); - else if (mode == TEST_MODE) - test_modes(monitors[i]); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/msaa.c b/third_party/penumbra/vendor/glfw/tests/msaa.c deleted file mode 100644 index 33e2ccc3bab..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/msaa.c +++ /dev/null @@ -1,220 +0,0 @@ -//======================================================================== -// Multisample anti-aliasing test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test renders two high contrast, slowly rotating quads, one aliased -// and one (hopefully) anti-aliased, thus allowing for visual verification -// of whether MSAA is indeed enabled -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#if defined(_MSC_VER) - // Make MS math.h define M_PI - #define _USE_MATH_DEFINES -#endif - -#include "linmath.h" - -#include -#include - -#include "getopt.h" - -static const vec2 vertices[4] = -{ - { -0.6f, -0.6f }, - { 0.6f, -0.6f }, - { 0.6f, 0.6f }, - { -0.6f, 0.6f } -}; - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec2 vPos;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(1.0);\n" -"}\n"; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_SPACE: - glfwSetTime(0.0); - break; - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - } -} - -static void usage(void) -{ - printf("Usage: msaa [-h] [-s SAMPLES]\n"); -} - -int main(int argc, char** argv) -{ - int ch, samples = 4; - GLFWwindow* window; - GLuint vertex_buffer, vertex_shader, fragment_shader, program; - GLint mvp_location, vpos_location; - - while ((ch = getopt(argc, argv, "hs:")) != -1) - { - switch (ch) - { - case 'h': - usage(); - exit(EXIT_SUCCESS); - case 's': - samples = atoi(optarg); - break; - default: - usage(); - exit(EXIT_FAILURE); - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - if (samples) - printf("Requesting MSAA with %i samples\n", samples); - else - printf("Requesting that MSAA not be available\n"); - - glfwWindowHint(GLFW_SAMPLES, samples); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - window = glfwCreateWindow(800, 400, "Aliasing Detector", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(window, key_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - glGetIntegerv(GL_SAMPLES, &samples); - if (samples) - printf("Context reports MSAA is available with %i samples\n", samples); - else - printf("Context reports MSAA is unavailable\n"); - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - - while (!glfwWindowShouldClose(window)) - { - float ratio; - int width, height; - mat4x4 m, p, mvp; - const double angle = glfwGetTime() * M_PI / 180.0; - - glfwGetFramebufferSize(window, &width, &height); - ratio = width / (float) height; - - glViewport(0, 0, width, height); - glClear(GL_COLOR_BUFFER_BIT); - - glUseProgram(program); - - mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 0.f, 1.f); - - mat4x4_translate(m, -1.f, 0.f, 0.f); - mat4x4_rotate_Z(m, m, (float) angle); - mat4x4_mul(mvp, p, m); - - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glDisable(GL_MULTISAMPLE); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - mat4x4_translate(m, 1.f, 0.f, 0.f); - mat4x4_rotate_Z(m, m, (float) angle); - mat4x4_mul(mvp, p, m); - - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glEnable(GL_MULTISAMPLE); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glfwSwapBuffers(window); - glfwPollEvents(); - } - - glfwDestroyWindow(window); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/opacity.c b/third_party/penumbra/vendor/glfw/tests/opacity.c deleted file mode 100644 index 47f28b16bc1..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/opacity.c +++ /dev/null @@ -1,108 +0,0 @@ -//======================================================================== -// Window opacity test program -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#define NK_IMPLEMENTATION -#define NK_INCLUDE_FIXED_TYPES -#define NK_INCLUDE_FONT_BAKING -#define NK_INCLUDE_DEFAULT_FONT -#define NK_INCLUDE_DEFAULT_ALLOCATOR -#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT -#define NK_INCLUDE_STANDARD_VARARGS -#include - -#define NK_GLFW_GL2_IMPLEMENTATION -#include - -#include -#include - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -int main(int argc, char** argv) -{ - GLFWwindow* window; - struct nk_context* nk; - struct nk_font_atlas* atlas; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); - - window = glfwCreateWindow(400, 400, "Opacity", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - nk = nk_glfw3_init(window, NK_GLFW3_INSTALL_CALLBACKS); - nk_glfw3_font_stash_begin(&atlas); - nk_glfw3_font_stash_end(); - - while (!glfwWindowShouldClose(window)) - { - int width, height; - struct nk_rect area; - - glfwGetWindowSize(window, &width, &height); - area = nk_rect(0.f, 0.f, (float) width, (float) height); - - glClear(GL_COLOR_BUFFER_BIT); - nk_glfw3_new_frame(); - if (nk_begin(nk, "", area, 0)) - { - float opacity = glfwGetWindowOpacity(window); - nk_layout_row_dynamic(nk, 30, 2); - if (nk_slider_float(nk, 0.f, &opacity, 1.f, 0.001f)) - glfwSetWindowOpacity(window, opacity); - nk_labelf(nk, NK_TEXT_LEFT, "%0.3f", opacity); - } - - nk_end(nk); - nk_glfw3_render(NK_ANTI_ALIASING_ON); - - glfwSwapBuffers(window); - glfwWaitEventsTimeout(1.0); - } - - nk_glfw3_shutdown(); - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/reopen.c b/third_party/penumbra/vendor/glfw/tests/reopen.c deleted file mode 100644 index 10d22b28b99..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/reopen.c +++ /dev/null @@ -1,240 +0,0 @@ -//======================================================================== -// Window re-opener (open/close stress test) -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test came about as the result of bug #1262773 -// -// It closes and re-opens the GLFW window every five seconds, alternating -// between windowed and full screen mode -// -// It also times and logs opening and closing actions and attempts to separate -// user initiated window closing from its own -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -#include "linmath.h" - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec2 vPos;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(1.0);\n" -"}\n"; - -static const vec2 vertices[4] = -{ - { -0.5f, -0.5f }, - { 0.5f, -0.5f }, - { 0.5f, 0.5f }, - { -0.5f, 0.5f } -}; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void window_close_callback(GLFWwindow* window) -{ - printf("Close callback triggered\n"); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_Q: - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - } -} - -static void close_window(GLFWwindow* window) -{ - double base = glfwGetTime(); - glfwDestroyWindow(window); - printf("Closing window took %0.3f seconds\n", glfwGetTime() - base); -} - -int main(int argc, char** argv) -{ - int count = 0; - double base; - GLFWwindow* window; - - srand((unsigned int) time(NULL)); - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - for (;;) - { - int width, height; - GLFWmonitor* monitor = NULL; - GLuint vertex_shader, fragment_shader, program, vertex_buffer; - GLint mvp_location, vpos_location; - - if (count & 1) - { - int monitorCount; - GLFWmonitor** monitors = glfwGetMonitors(&monitorCount); - monitor = monitors[rand() % monitorCount]; - } - - if (monitor) - { - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - width = mode->width; - height = mode->height; - } - else - { - width = 640; - height = 480; - } - - base = glfwGetTime(); - - window = glfwCreateWindow(width, height, "Window Re-opener", monitor, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - if (monitor) - { - printf("Opening full screen window on monitor %s took %0.3f seconds\n", - glfwGetMonitorName(monitor), - glfwGetTime() - base); - } - else - { - printf("Opening regular window took %0.3f seconds\n", - glfwGetTime() - base); - } - - glfwSetWindowCloseCallback(window, window_close_callback); - glfwSetKeyCallback(window, key_callback); - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - - glfwSetTime(0.0); - - while (glfwGetTime() < 5.0) - { - float ratio; - int width, height; - mat4x4 m, p, mvp; - - glfwGetFramebufferSize(window, &width, &height); - ratio = width / (float) height; - - glViewport(0, 0, width, height); - glClear(GL_COLOR_BUFFER_BIT); - - mat4x4_ortho(p, -ratio, ratio, -1.f, 1.f, 0.f, 1.f); - - mat4x4_identity(m); - mat4x4_rotate_Z(m, m, (float) glfwGetTime()); - mat4x4_mul(mvp, p, m); - - glUseProgram(program); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glfwSwapBuffers(window); - glfwPollEvents(); - - if (glfwWindowShouldClose(window)) - { - close_window(window); - printf("User closed window\n"); - - glfwTerminate(); - exit(EXIT_SUCCESS); - } - } - - printf("Closing window\n"); - close_window(window); - - count++; - } - - glfwTerminate(); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/tearing.c b/third_party/penumbra/vendor/glfw/tests/tearing.c deleted file mode 100644 index 17601219b47..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/tearing.c +++ /dev/null @@ -1,250 +0,0 @@ -//======================================================================== -// Vsync enabling test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test renders a high contrast, horizontally moving bar, allowing for -// visual verification of whether the set swap interval is indeed obeyed -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -#include "linmath.h" - -static const struct -{ - float x, y; -} vertices[4] = -{ - { -0.25f, -1.f }, - { 0.25f, -1.f }, - { 0.25f, 1.f }, - { -0.25f, 1.f } -}; - -static const char* vertex_shader_text = -"#version 110\n" -"uniform mat4 MVP;\n" -"attribute vec2 vPos;\n" -"void main()\n" -"{\n" -" gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" -"}\n"; - -static const char* fragment_shader_text = -"#version 110\n" -"void main()\n" -"{\n" -" gl_FragColor = vec4(1.0);\n" -"}\n"; - -static int swap_tear; -static int swap_interval; -static double frame_rate; - -static void update_window_title(GLFWwindow* window) -{ - char title[256]; - - snprintf(title, sizeof(title), "Tearing detector (interval %i%s, %0.1f Hz)", - swap_interval, - (swap_tear && swap_interval < 0) ? " (swap tear)" : "", - frame_rate); - - glfwSetWindowTitle(window, title); -} - -static void set_swap_interval(GLFWwindow* window, int interval) -{ - swap_interval = interval; - glfwSwapInterval(swap_interval); - update_window_title(window); -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_UP: - { - if (swap_interval + 1 > swap_interval) - set_swap_interval(window, swap_interval + 1); - break; - } - - case GLFW_KEY_DOWN: - { - if (swap_tear) - { - if (swap_interval - 1 < swap_interval) - set_swap_interval(window, swap_interval - 1); - } - else - { - if (swap_interval - 1 >= 0) - set_swap_interval(window, swap_interval - 1); - } - break; - } - - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, 1); - break; - - case GLFW_KEY_F11: - case GLFW_KEY_ENTER: - { - static int x, y, width, height; - - if (mods != GLFW_MOD_ALT) - return; - - if (glfwGetWindowMonitor(window)) - glfwSetWindowMonitor(window, NULL, x, y, width, height, 0); - else - { - GLFWmonitor* monitor = glfwGetPrimaryMonitor(); - const GLFWvidmode* mode = glfwGetVideoMode(monitor); - glfwGetWindowPos(window, &x, &y); - glfwGetWindowSize(window, &width, &height); - glfwSetWindowMonitor(window, monitor, - 0, 0, mode->width, mode->height, - mode->refreshRate); - } - - break; - } - } -} - -int main(int argc, char** argv) -{ - unsigned long frame_count = 0; - double last_time, current_time; - GLFWwindow* window; - GLuint vertex_buffer, vertex_shader, fragment_shader, program; - GLint mvp_location, vpos_location; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - - window = glfwCreateWindow(640, 480, "Tearing detector", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - set_swap_interval(window, 0); - - last_time = glfwGetTime(); - frame_rate = 0.0; - swap_tear = (glfwExtensionSupported("WGL_EXT_swap_control_tear") || - glfwExtensionSupported("GLX_EXT_swap_control_tear")); - - glfwSetKeyCallback(window, key_callback); - - glGenBuffers(1, &vertex_buffer); - glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - vertex_shader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); - glCompileShader(vertex_shader); - - fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); - glCompileShader(fragment_shader); - - program = glCreateProgram(); - glAttachShader(program, vertex_shader); - glAttachShader(program, fragment_shader); - glLinkProgram(program); - - mvp_location = glGetUniformLocation(program, "MVP"); - vpos_location = glGetAttribLocation(program, "vPos"); - - glEnableVertexAttribArray(vpos_location); - glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, - sizeof(vertices[0]), (void*) 0); - - while (!glfwWindowShouldClose(window)) - { - int width, height; - mat4x4 m, p, mvp; - float position = cosf((float) glfwGetTime() * 4.f) * 0.75f; - - glfwGetFramebufferSize(window, &width, &height); - - glViewport(0, 0, width, height); - glClear(GL_COLOR_BUFFER_BIT); - - mat4x4_ortho(p, -1.f, 1.f, -1.f, 1.f, 0.f, 1.f); - mat4x4_translate(m, position, 0.f, 0.f); - mat4x4_mul(mvp, p, m); - - glUseProgram(program); - glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - glfwSwapBuffers(window); - glfwPollEvents(); - - frame_count++; - - current_time = glfwGetTime(); - if (current_time - last_time > 1.0) - { - frame_rate = frame_count / (current_time - last_time); - frame_count = 0; - last_time = current_time; - update_window_title(window); - } - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/threads.c b/third_party/penumbra/vendor/glfw/tests/threads.c deleted file mode 100644 index 98294933657..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/threads.c +++ /dev/null @@ -1,152 +0,0 @@ -//======================================================================== -// Multi-threading test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test is intended to verify whether the OpenGL context part of -// the GLFW API is able to be used from multiple threads -// -//======================================================================== - -#include "tinycthread.h" - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include - -typedef struct -{ - GLFWwindow* window; - const char* title; - float r, g, b; - thrd_t id; -} Thread; - -static volatile int running = GLFW_TRUE; - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static int thread_main(void* data) -{ - const Thread* thread = data; - - glfwMakeContextCurrent(thread->window); - glfwSwapInterval(1); - - while (running) - { - const float v = (float) fabs(sin(glfwGetTime() * 2.f)); - glClearColor(thread->r * v, thread->g * v, thread->b * v, 0.f); - - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(thread->window); - } - - glfwMakeContextCurrent(NULL); - return 0; -} - -int main(void) -{ - int i, result; - Thread threads[] = - { - { NULL, "Red", 1.f, 0.f, 0.f, 0 }, - { NULL, "Green", 0.f, 1.f, 0.f, 0 }, - { NULL, "Blue", 0.f, 0.f, 1.f, 0 } - }; - const int count = sizeof(threads) / sizeof(Thread); - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - - for (i = 0; i < count; i++) - { - threads[i].window = glfwCreateWindow(200, 200, - threads[i].title, - NULL, NULL); - if (!threads[i].window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(threads[i].window, key_callback); - - glfwSetWindowPos(threads[i].window, 200 + 250 * i, 200); - glfwShowWindow(threads[i].window); - } - - glfwMakeContextCurrent(threads[0].window); - gladLoadGL(glfwGetProcAddress); - glfwMakeContextCurrent(NULL); - - for (i = 0; i < count; i++) - { - if (thrd_create(&threads[i].id, thread_main, threads + i) != - thrd_success) - { - fprintf(stderr, "Failed to create secondary thread\n"); - - glfwTerminate(); - exit(EXIT_FAILURE); - } - } - - while (running) - { - glfwWaitEvents(); - - for (i = 0; i < count; i++) - { - if (glfwWindowShouldClose(threads[i].window)) - running = GLFW_FALSE; - } - } - - for (i = 0; i < count; i++) - glfwHideWindow(threads[i].window); - - for (i = 0; i < count; i++) - thrd_join(threads[i].id, &result); - - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/timeout.c b/third_party/penumbra/vendor/glfw/tests/timeout.c deleted file mode 100644 index bda2560c7ac..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/timeout.c +++ /dev/null @@ -1,98 +0,0 @@ -//======================================================================== -// Event wait timeout test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test is intended to verify that waiting for events with timeout works -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include -#include -#include - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static float nrand(void) -{ - return (float) rand() / (float) RAND_MAX; -} - -int main(void) -{ - GLFWwindow* window; - - srand((unsigned int) time(NULL)); - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - window = glfwCreateWindow(640, 480, "Event Wait Timeout Test", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSetKeyCallback(window, key_callback); - - while (!glfwWindowShouldClose(window)) - { - int width, height; - float r = nrand(), g = nrand(), b = nrand(); - float l = (float) sqrt(r * r + g * g + b * b); - - glfwGetFramebufferSize(window, &width, &height); - - glViewport(0, 0, width, height); - glClearColor(r / l, g / l, b / l, 1.f); - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); - - glfwWaitEventsTimeout(1.0); - } - - glfwDestroyWindow(window); - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/title.c b/third_party/penumbra/vendor/glfw/tests/title.c deleted file mode 100644 index a5bad342294..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/title.c +++ /dev/null @@ -1,72 +0,0 @@ -//======================================================================== -// UTF-8 window title test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test sets a UTF-8 window title -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -int main(void) -{ - GLFWwindow* window; - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - window = glfwCreateWindow(400, 400, "English 日本語 русский язык 官話", NULL, NULL); - if (!window) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwMakeContextCurrent(window); - gladLoadGL(glfwGetProcAddress); - glfwSwapInterval(1); - - while (!glfwWindowShouldClose(window)) - { - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(window); - glfwWaitEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/glfw/tests/triangle-vulkan.c b/third_party/penumbra/vendor/glfw/tests/triangle-vulkan.c deleted file mode 100644 index 33442968c2a..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/triangle-vulkan.c +++ /dev/null @@ -1,2229 +0,0 @@ -/* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Author: Chia-I Wu - * Author: Cody Northrop - * Author: Courtney Goeltzenleuchter - * Author: Ian Elliott - * Author: Jon Ashburn - * Author: Piers Daniell - * Author: Gwan-gyeong Mun - * Porter: Camilla Löwy - */ -/* - * Draw a textured triangle with depth testing. This is written against Intel - * ICD. It does not do state transition nor object memory binding like it - * should. It also does no error checking. - */ - -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include -#define GLFW_INCLUDE_NONE -#include - -#define DEMO_TEXTURE_COUNT 1 -#define VERTEX_BUFFER_BIND_ID 0 -#define APP_SHORT_NAME "tri" -#define APP_LONG_NAME "The Vulkan Triangle Demo Program" - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) - -#if defined(NDEBUG) && defined(__GNUC__) -#define U_ASSERT_ONLY __attribute__((unused)) -#else -#define U_ASSERT_ONLY -#endif - -#define ERR_EXIT(err_msg, err_class) \ - do { \ - printf(err_msg); \ - fflush(stdout); \ - exit(1); \ - } while (0) - -static GLADapiproc glad_vulkan_callback(const char* name, void* user) -{ - return glfwGetInstanceProcAddress((VkInstance) user, name); -} - -static const char fragShaderCode[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, - 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, - 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, - 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x46, 0x72, 0x61, - 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x05, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, - 0x38, 0x00, 0x01, 0x00 -}; - -static const char vertShaderCode[] = { - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x08, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x61, 0x74, 0x74, 0x72, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x07, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x43, - 0x6c, 0x69, 0x70, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56, - 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x44, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x49, 0x44, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, - 0x38, 0x00, 0x01, 0x00 -}; - -struct texture_object { - VkSampler sampler; - - VkImage image; - VkImageLayout imageLayout; - - VkDeviceMemory mem; - VkImageView view; - int32_t tex_width, tex_height; -}; - -static int validation_error = 0; - -VKAPI_ATTR VkBool32 VKAPI_CALL -BreakCallback(VkFlags msgFlags, VkDebugReportObjectTypeEXT objType, - uint64_t srcObject, size_t location, int32_t msgCode, - const char *pLayerPrefix, const char *pMsg, - void *pUserData) { -#ifdef _WIN32 - DebugBreak(); -#else - raise(SIGTRAP); -#endif - - return false; -} - -typedef struct { - VkImage image; - VkCommandBuffer cmd; - VkImageView view; -} SwapchainBuffers; - -struct demo { - GLFWwindow* window; - VkSurfaceKHR surface; - bool use_staging_buffer; - - VkInstance inst; - VkPhysicalDevice gpu; - VkDevice device; - VkQueue queue; - VkPhysicalDeviceProperties gpu_props; - VkPhysicalDeviceFeatures gpu_features; - VkQueueFamilyProperties *queue_props; - uint32_t graphics_queue_node_index; - - uint32_t enabled_extension_count; - uint32_t enabled_layer_count; - const char *extension_names[64]; - const char *enabled_layers[64]; - - int width, height; - VkFormat format; - VkColorSpaceKHR color_space; - - uint32_t swapchainImageCount; - VkSwapchainKHR swapchain; - SwapchainBuffers *buffers; - - VkCommandPool cmd_pool; - - struct { - VkFormat format; - - VkImage image; - VkDeviceMemory mem; - VkImageView view; - } depth; - - struct texture_object textures[DEMO_TEXTURE_COUNT]; - - struct { - VkBuffer buf; - VkDeviceMemory mem; - - VkPipelineVertexInputStateCreateInfo vi; - VkVertexInputBindingDescription vi_bindings[1]; - VkVertexInputAttributeDescription vi_attrs[2]; - } vertices; - - VkCommandBuffer setup_cmd; // Command Buffer for initialization commands - VkCommandBuffer draw_cmd; // Command Buffer for drawing commands - VkPipelineLayout pipeline_layout; - VkDescriptorSetLayout desc_layout; - VkPipelineCache pipelineCache; - VkRenderPass render_pass; - VkPipeline pipeline; - - VkShaderModule vert_shader_module; - VkShaderModule frag_shader_module; - - VkDescriptorPool desc_pool; - VkDescriptorSet desc_set; - - VkFramebuffer *framebuffers; - - VkPhysicalDeviceMemoryProperties memory_properties; - - int32_t curFrame; - int32_t frameCount; - bool validate; - bool use_break; - VkDebugReportCallbackEXT msg_callback; - - float depthStencil; - float depthIncrement; - - uint32_t current_buffer; - uint32_t queue_count; -}; - -VKAPI_ATTR VkBool32 VKAPI_CALL -dbgFunc(VkFlags msgFlags, VkDebugReportObjectTypeEXT objType, - uint64_t srcObject, size_t location, int32_t msgCode, - const char *pLayerPrefix, const char *pMsg, void *pUserData) { - char *message = (char *)malloc(strlen(pMsg) + 100); - - assert(message); - - validation_error = 1; - - if (msgFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) { - sprintf(message, "ERROR: [%s] Code %d : %s", pLayerPrefix, msgCode, - pMsg); - } else if (msgFlags & VK_DEBUG_REPORT_WARNING_BIT_EXT) { - sprintf(message, "WARNING: [%s] Code %d : %s", pLayerPrefix, msgCode, - pMsg); - } else { - return false; - } - - printf("%s\n", message); - fflush(stdout); - free(message); - - /* - * false indicates that layer should not bail-out of an - * API call that had validation failures. This may mean that the - * app dies inside the driver due to invalid parameter(s). - * That's what would happen without validation layers, so we'll - * keep that behavior here. - */ - return false; -} - -// Forward declaration: -static void demo_resize(struct demo *demo); - -static bool memory_type_from_properties(struct demo *demo, uint32_t typeBits, - VkFlags requirements_mask, - uint32_t *typeIndex) { - uint32_t i; - // Search memtypes to find first index with those properties - for (i = 0; i < VK_MAX_MEMORY_TYPES; i++) { - if ((typeBits & 1) == 1) { - // Type is available, does it match user properties? - if ((demo->memory_properties.memoryTypes[i].propertyFlags & - requirements_mask) == requirements_mask) { - *typeIndex = i; - return true; - } - } - typeBits >>= 1; - } - // No memory types matched, return failure - return false; -} - -static void demo_flush_init_cmd(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - - if (demo->setup_cmd == VK_NULL_HANDLE) - return; - - err = vkEndCommandBuffer(demo->setup_cmd); - assert(!err); - - const VkCommandBuffer cmd_bufs[] = {demo->setup_cmd}; - VkFence nullFence = {VK_NULL_HANDLE}; - VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, - .pNext = NULL, - .waitSemaphoreCount = 0, - .pWaitSemaphores = NULL, - .pWaitDstStageMask = NULL, - .commandBufferCount = 1, - .pCommandBuffers = cmd_bufs, - .signalSemaphoreCount = 0, - .pSignalSemaphores = NULL}; - - err = vkQueueSubmit(demo->queue, 1, &submit_info, nullFence); - assert(!err); - - err = vkQueueWaitIdle(demo->queue); - assert(!err); - - vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, cmd_bufs); - demo->setup_cmd = VK_NULL_HANDLE; -} - -static void demo_set_image_layout(struct demo *demo, VkImage image, - VkImageAspectFlags aspectMask, - VkImageLayout old_image_layout, - VkImageLayout new_image_layout, - VkAccessFlagBits srcAccessMask) { - - VkResult U_ASSERT_ONLY err; - - if (demo->setup_cmd == VK_NULL_HANDLE) { - const VkCommandBufferAllocateInfo cmd = { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, - .pNext = NULL, - .commandPool = demo->cmd_pool, - .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY, - .commandBufferCount = 1, - }; - - err = vkAllocateCommandBuffers(demo->device, &cmd, &demo->setup_cmd); - assert(!err); - - VkCommandBufferBeginInfo cmd_buf_info = { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - .pNext = NULL, - .flags = 0, - .pInheritanceInfo = NULL, - }; - err = vkBeginCommandBuffer(demo->setup_cmd, &cmd_buf_info); - assert(!err); - } - - VkImageMemoryBarrier image_memory_barrier = { - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = NULL, - .srcAccessMask = srcAccessMask, - .dstAccessMask = 0, - .oldLayout = old_image_layout, - .newLayout = new_image_layout, - .image = image, - .subresourceRange = {aspectMask, 0, 1, 0, 1}}; - - if (new_image_layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { - /* Make sure anything that was copying from this image has completed */ - image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; - } - - if (new_image_layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) { - image_memory_barrier.dstAccessMask = - VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - } - - if (new_image_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) { - image_memory_barrier.dstAccessMask = - VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - } - - if (new_image_layout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { - /* Make sure any Copy or CPU writes to image are flushed */ - image_memory_barrier.dstAccessMask = - VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; - } - - VkImageMemoryBarrier *pmemory_barrier = &image_memory_barrier; - - VkPipelineStageFlags src_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - VkPipelineStageFlags dest_stages = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - - vkCmdPipelineBarrier(demo->setup_cmd, src_stages, dest_stages, 0, 0, NULL, - 0, NULL, 1, pmemory_barrier); -} - -static void demo_draw_build_cmd(struct demo *demo) { - const VkCommandBufferBeginInfo cmd_buf_info = { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, - .pNext = NULL, - .flags = 0, - .pInheritanceInfo = NULL, - }; - const VkClearValue clear_values[2] = { - [0] = {.color.float32 = {0.2f, 0.2f, 0.2f, 0.2f}}, - [1] = {.depthStencil = {demo->depthStencil, 0}}, - }; - const VkRenderPassBeginInfo rp_begin = { - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, - .pNext = NULL, - .renderPass = demo->render_pass, - .framebuffer = demo->framebuffers[demo->current_buffer], - .renderArea.offset.x = 0, - .renderArea.offset.y = 0, - .renderArea.extent.width = demo->width, - .renderArea.extent.height = demo->height, - .clearValueCount = 2, - .pClearValues = clear_values, - }; - VkResult U_ASSERT_ONLY err; - - err = vkBeginCommandBuffer(demo->draw_cmd, &cmd_buf_info); - assert(!err); - - // We can use LAYOUT_UNDEFINED as a wildcard here because we don't care what - // happens to the previous contents of the image - VkImageMemoryBarrier image_memory_barrier = { - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = NULL, - .srcAccessMask = 0, - .dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, - .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, - .newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = demo->buffers[demo->current_buffer].image, - .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; - - vkCmdPipelineBarrier(demo->draw_cmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, NULL, 0, - NULL, 1, &image_memory_barrier); - vkCmdBeginRenderPass(demo->draw_cmd, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); - vkCmdBindPipeline(demo->draw_cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - demo->pipeline); - vkCmdBindDescriptorSets(demo->draw_cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - demo->pipeline_layout, 0, 1, &demo->desc_set, 0, - NULL); - - VkViewport viewport; - memset(&viewport, 0, sizeof(viewport)); - viewport.height = (float)demo->height; - viewport.width = (float)demo->width; - viewport.minDepth = (float)0.0f; - viewport.maxDepth = (float)1.0f; - vkCmdSetViewport(demo->draw_cmd, 0, 1, &viewport); - - VkRect2D scissor; - memset(&scissor, 0, sizeof(scissor)); - scissor.extent.width = demo->width; - scissor.extent.height = demo->height; - scissor.offset.x = 0; - scissor.offset.y = 0; - vkCmdSetScissor(demo->draw_cmd, 0, 1, &scissor); - - VkDeviceSize offsets[1] = {0}; - vkCmdBindVertexBuffers(demo->draw_cmd, VERTEX_BUFFER_BIND_ID, 1, - &demo->vertices.buf, offsets); - - vkCmdDraw(demo->draw_cmd, 3, 1, 0, 0); - vkCmdEndRenderPass(demo->draw_cmd); - - VkImageMemoryBarrier prePresentBarrier = { - .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, - .pNext = NULL, - .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, - .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT, - .oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}}; - - prePresentBarrier.image = demo->buffers[demo->current_buffer].image; - VkImageMemoryBarrier *pmemory_barrier = &prePresentBarrier; - vkCmdPipelineBarrier(demo->draw_cmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, - VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, NULL, 0, - NULL, 1, pmemory_barrier); - - err = vkEndCommandBuffer(demo->draw_cmd); - assert(!err); -} - -static void demo_draw(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - VkSemaphore imageAcquiredSemaphore, drawCompleteSemaphore; - VkSemaphoreCreateInfo semaphoreCreateInfo = { - .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - .pNext = NULL, - .flags = 0, - }; - - err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, - NULL, &imageAcquiredSemaphore); - assert(!err); - - err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, - NULL, &drawCompleteSemaphore); - assert(!err); - - // Get the index of the next available swapchain image: - err = vkAcquireNextImageKHR(demo->device, demo->swapchain, UINT64_MAX, - imageAcquiredSemaphore, - (VkFence)0, // TODO: Show use of fence - &demo->current_buffer); - if (err == VK_ERROR_OUT_OF_DATE_KHR) { - // demo->swapchain is out of date (e.g. the window was resized) and - // must be recreated: - demo_resize(demo); - demo_draw(demo); - vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); - vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); - return; - } else if (err == VK_SUBOPTIMAL_KHR) { - // demo->swapchain is not as optimal as it could be, but the platform's - // presentation engine will still present the image correctly. - } else { - assert(!err); - } - - demo_flush_init_cmd(demo); - - // Wait for the present complete semaphore to be signaled to ensure - // that the image won't be rendered to until the presentation - // engine has fully released ownership to the application, and it is - // okay to render to the image. - - demo_draw_build_cmd(demo); - VkFence nullFence = VK_NULL_HANDLE; - VkPipelineStageFlags pipe_stage_flags = - VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; - VkSubmitInfo submit_info = {.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, - .pNext = NULL, - .waitSemaphoreCount = 1, - .pWaitSemaphores = &imageAcquiredSemaphore, - .pWaitDstStageMask = &pipe_stage_flags, - .commandBufferCount = 1, - .pCommandBuffers = &demo->draw_cmd, - .signalSemaphoreCount = 1, - .pSignalSemaphores = &drawCompleteSemaphore}; - - err = vkQueueSubmit(demo->queue, 1, &submit_info, nullFence); - assert(!err); - - VkPresentInfoKHR present = { - .sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, - .pNext = NULL, - .waitSemaphoreCount = 1, - .pWaitSemaphores = &drawCompleteSemaphore, - .swapchainCount = 1, - .pSwapchains = &demo->swapchain, - .pImageIndices = &demo->current_buffer, - }; - - err = vkQueuePresentKHR(demo->queue, &present); - if (err == VK_ERROR_OUT_OF_DATE_KHR) { - // demo->swapchain is out of date (e.g. the window was resized) and - // must be recreated: - demo_resize(demo); - } else if (err == VK_SUBOPTIMAL_KHR) { - // demo->swapchain is not as optimal as it could be, but the platform's - // presentation engine will still present the image correctly. - } else { - assert(!err); - } - - err = vkQueueWaitIdle(demo->queue); - assert(err == VK_SUCCESS); - - vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); - vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); -} - -static void demo_prepare_buffers(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - VkSwapchainKHR oldSwapchain = demo->swapchain; - - // Check the surface capabilities and formats - VkSurfaceCapabilitiesKHR surfCapabilities; - err = vkGetPhysicalDeviceSurfaceCapabilitiesKHR( - demo->gpu, demo->surface, &surfCapabilities); - assert(!err); - - uint32_t presentModeCount; - err = vkGetPhysicalDeviceSurfacePresentModesKHR( - demo->gpu, demo->surface, &presentModeCount, NULL); - assert(!err); - VkPresentModeKHR *presentModes = - (VkPresentModeKHR *)malloc(presentModeCount * sizeof(VkPresentModeKHR)); - assert(presentModes); - err = vkGetPhysicalDeviceSurfacePresentModesKHR( - demo->gpu, demo->surface, &presentModeCount, presentModes); - assert(!err); - - VkExtent2D swapchainExtent; - // width and height are either both 0xFFFFFFFF, or both not 0xFFFFFFFF. - if (surfCapabilities.currentExtent.width == 0xFFFFFFFF) { - // If the surface size is undefined, the size is set to the size - // of the images requested, which must fit within the minimum and - // maximum values. - swapchainExtent.width = demo->width; - swapchainExtent.height = demo->height; - - if (swapchainExtent.width < surfCapabilities.minImageExtent.width) { - swapchainExtent.width = surfCapabilities.minImageExtent.width; - } else if (swapchainExtent.width > surfCapabilities.maxImageExtent.width) { - swapchainExtent.width = surfCapabilities.maxImageExtent.width; - } - - if (swapchainExtent.height < surfCapabilities.minImageExtent.height) { - swapchainExtent.height = surfCapabilities.minImageExtent.height; - } else if (swapchainExtent.height > surfCapabilities.maxImageExtent.height) { - swapchainExtent.height = surfCapabilities.maxImageExtent.height; - } - } else { - // If the surface size is defined, the swap chain size must match - swapchainExtent = surfCapabilities.currentExtent; - demo->width = surfCapabilities.currentExtent.width; - demo->height = surfCapabilities.currentExtent.height; - } - - VkPresentModeKHR swapchainPresentMode = VK_PRESENT_MODE_FIFO_KHR; - - // Determine the number of VkImage's to use in the swap chain. - // Application desires to only acquire 1 image at a time (which is - // "surfCapabilities.minImageCount"). - uint32_t desiredNumOfSwapchainImages = surfCapabilities.minImageCount; - // If maxImageCount is 0, we can ask for as many images as we want; - // otherwise we're limited to maxImageCount - if ((surfCapabilities.maxImageCount > 0) && - (desiredNumOfSwapchainImages > surfCapabilities.maxImageCount)) { - // Application must settle for fewer images than desired: - desiredNumOfSwapchainImages = surfCapabilities.maxImageCount; - } - - VkSurfaceTransformFlagsKHR preTransform; - if (surfCapabilities.supportedTransforms & - VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) { - preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; - } else { - preTransform = surfCapabilities.currentTransform; - } - - const VkSwapchainCreateInfoKHR swapchain = { - .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, - .pNext = NULL, - .surface = demo->surface, - .minImageCount = desiredNumOfSwapchainImages, - .imageFormat = demo->format, - .imageColorSpace = demo->color_space, - .imageExtent = - { - .width = swapchainExtent.width, .height = swapchainExtent.height, - }, - .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .preTransform = preTransform, - .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, - .imageArrayLayers = 1, - .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = NULL, - .presentMode = swapchainPresentMode, - .oldSwapchain = oldSwapchain, - .clipped = true, - }; - uint32_t i; - - err = vkCreateSwapchainKHR(demo->device, &swapchain, NULL, &demo->swapchain); - assert(!err); - - // If we just re-created an existing swapchain, we should destroy the old - // swapchain at this point. - // Note: destroying the swapchain also cleans up all its associated - // presentable images once the platform is done with them. - if (oldSwapchain != VK_NULL_HANDLE) { - vkDestroySwapchainKHR(demo->device, oldSwapchain, NULL); - } - - err = vkGetSwapchainImagesKHR(demo->device, demo->swapchain, - &demo->swapchainImageCount, NULL); - assert(!err); - - VkImage *swapchainImages = - (VkImage *)malloc(demo->swapchainImageCount * sizeof(VkImage)); - assert(swapchainImages); - err = vkGetSwapchainImagesKHR(demo->device, demo->swapchain, - &demo->swapchainImageCount, - swapchainImages); - assert(!err); - - demo->buffers = (SwapchainBuffers *)malloc(sizeof(SwapchainBuffers) * - demo->swapchainImageCount); - assert(demo->buffers); - - for (i = 0; i < demo->swapchainImageCount; i++) { - VkImageViewCreateInfo color_attachment_view = { - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = NULL, - .format = demo->format, - .components = - { - .r = VK_COMPONENT_SWIZZLE_R, - .g = VK_COMPONENT_SWIZZLE_G, - .b = VK_COMPONENT_SWIZZLE_B, - .a = VK_COMPONENT_SWIZZLE_A, - }, - .subresourceRange = {.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1}, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .flags = 0, - }; - - demo->buffers[i].image = swapchainImages[i]; - - color_attachment_view.image = demo->buffers[i].image; - - err = vkCreateImageView(demo->device, &color_attachment_view, NULL, - &demo->buffers[i].view); - assert(!err); - } - - demo->current_buffer = 0; - - if (NULL != presentModes) { - free(presentModes); - } -} - -static void demo_prepare_depth(struct demo *demo) { - const VkFormat depth_format = VK_FORMAT_D16_UNORM; - const VkImageCreateInfo image = { - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = NULL, - .imageType = VK_IMAGE_TYPE_2D, - .format = depth_format, - .extent = {demo->width, demo->height, 1}, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - .flags = 0, - }; - VkMemoryAllocateInfo mem_alloc = { - .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - .pNext = NULL, - .allocationSize = 0, - .memoryTypeIndex = 0, - }; - VkImageViewCreateInfo view = { - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = NULL, - .image = VK_NULL_HANDLE, - .format = depth_format, - .subresourceRange = {.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1}, - .flags = 0, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - }; - - VkMemoryRequirements mem_reqs; - VkResult U_ASSERT_ONLY err; - bool U_ASSERT_ONLY pass; - - demo->depth.format = depth_format; - - /* create image */ - err = vkCreateImage(demo->device, &image, NULL, &demo->depth.image); - assert(!err); - - /* get memory requirements for this object */ - vkGetImageMemoryRequirements(demo->device, demo->depth.image, &mem_reqs); - - /* select memory size and type */ - mem_alloc.allocationSize = mem_reqs.size; - pass = memory_type_from_properties(demo, mem_reqs.memoryTypeBits, - 0, /* No requirements */ - &mem_alloc.memoryTypeIndex); - assert(pass); - - /* allocate memory */ - err = vkAllocateMemory(demo->device, &mem_alloc, NULL, &demo->depth.mem); - assert(!err); - - /* bind memory */ - err = - vkBindImageMemory(demo->device, demo->depth.image, demo->depth.mem, 0); - assert(!err); - - demo_set_image_layout(demo, demo->depth.image, VK_IMAGE_ASPECT_DEPTH_BIT, - VK_IMAGE_LAYOUT_UNDEFINED, - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - 0); - - /* create image view */ - view.image = demo->depth.image; - err = vkCreateImageView(demo->device, &view, NULL, &demo->depth.view); - assert(!err); -} - -static void -demo_prepare_texture_image(struct demo *demo, const uint32_t *tex_colors, - struct texture_object *tex_obj, VkImageTiling tiling, - VkImageUsageFlags usage, VkFlags required_props) { - const VkFormat tex_format = VK_FORMAT_B8G8R8A8_UNORM; - const int32_t tex_width = 2; - const int32_t tex_height = 2; - VkResult U_ASSERT_ONLY err; - bool U_ASSERT_ONLY pass; - - tex_obj->tex_width = tex_width; - tex_obj->tex_height = tex_height; - - const VkImageCreateInfo image_create_info = { - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = NULL, - .imageType = VK_IMAGE_TYPE_2D, - .format = tex_format, - .extent = {tex_width, tex_height, 1}, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .tiling = tiling, - .usage = usage, - .flags = 0, - .initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED - }; - VkMemoryAllocateInfo mem_alloc = { - .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - .pNext = NULL, - .allocationSize = 0, - .memoryTypeIndex = 0, - }; - - VkMemoryRequirements mem_reqs; - - err = - vkCreateImage(demo->device, &image_create_info, NULL, &tex_obj->image); - assert(!err); - - vkGetImageMemoryRequirements(demo->device, tex_obj->image, &mem_reqs); - - mem_alloc.allocationSize = mem_reqs.size; - pass = - memory_type_from_properties(demo, mem_reqs.memoryTypeBits, - required_props, &mem_alloc.memoryTypeIndex); - assert(pass); - - /* allocate memory */ - err = vkAllocateMemory(demo->device, &mem_alloc, NULL, &tex_obj->mem); - assert(!err); - - /* bind memory */ - err = vkBindImageMemory(demo->device, tex_obj->image, tex_obj->mem, 0); - assert(!err); - - if (required_props & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { - const VkImageSubresource subres = { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .mipLevel = 0, - .arrayLayer = 0, - }; - VkSubresourceLayout layout; - void *data; - int32_t x, y; - - vkGetImageSubresourceLayout(demo->device, tex_obj->image, &subres, - &layout); - - err = vkMapMemory(demo->device, tex_obj->mem, 0, - mem_alloc.allocationSize, 0, &data); - assert(!err); - - for (y = 0; y < tex_height; y++) { - uint32_t *row = (uint32_t *)((char *)data + layout.rowPitch * y); - for (x = 0; x < tex_width; x++) - row[x] = tex_colors[(x & 1) ^ (y & 1)]; - } - - vkUnmapMemory(demo->device, tex_obj->mem); - } - - tex_obj->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - demo_set_image_layout(demo, tex_obj->image, VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_PREINITIALIZED, tex_obj->imageLayout, - VK_ACCESS_HOST_WRITE_BIT); - /* setting the image layout does not reference the actual memory so no need - * to add a mem ref */ -} - -static void demo_destroy_texture_image(struct demo *demo, - struct texture_object *tex_obj) { - /* clean up staging resources */ - vkDestroyImage(demo->device, tex_obj->image, NULL); - vkFreeMemory(demo->device, tex_obj->mem, NULL); -} - -static void demo_prepare_textures(struct demo *demo) { - const VkFormat tex_format = VK_FORMAT_B8G8R8A8_UNORM; - VkFormatProperties props; - const uint32_t tex_colors[DEMO_TEXTURE_COUNT][2] = { - {0xffff0000, 0xff00ff00}, - }; - uint32_t i; - VkResult U_ASSERT_ONLY err; - - vkGetPhysicalDeviceFormatProperties(demo->gpu, tex_format, &props); - - for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { - if ((props.linearTilingFeatures & - VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) && - !demo->use_staging_buffer) { - /* Device can texture using linear textures */ - demo_prepare_texture_image( - demo, tex_colors[i], &demo->textures[i], VK_IMAGE_TILING_LINEAR, - VK_IMAGE_USAGE_SAMPLED_BIT, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); - } else if (props.optimalTilingFeatures & - VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) { - /* Must use staging buffer to copy linear texture to optimized */ - struct texture_object staging_texture; - - memset(&staging_texture, 0, sizeof(staging_texture)); - demo_prepare_texture_image( - demo, tex_colors[i], &staging_texture, VK_IMAGE_TILING_LINEAR, - VK_IMAGE_USAGE_TRANSFER_SRC_BIT, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); - - demo_prepare_texture_image( - demo, tex_colors[i], &demo->textures[i], - VK_IMAGE_TILING_OPTIMAL, - (VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT), - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - - demo_set_image_layout(demo, staging_texture.image, - VK_IMAGE_ASPECT_COLOR_BIT, - staging_texture.imageLayout, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - 0); - - demo_set_image_layout(demo, demo->textures[i].image, - VK_IMAGE_ASPECT_COLOR_BIT, - demo->textures[i].imageLayout, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - 0); - - VkImageCopy copy_region = { - .srcSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, - .srcOffset = {0, 0, 0}, - .dstSubresource = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1}, - .dstOffset = {0, 0, 0}, - .extent = {staging_texture.tex_width, - staging_texture.tex_height, 1}, - }; - vkCmdCopyImage( - demo->setup_cmd, staging_texture.image, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, demo->textures[i].image, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, ©_region); - - demo_set_image_layout(demo, demo->textures[i].image, - VK_IMAGE_ASPECT_COLOR_BIT, - VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, - demo->textures[i].imageLayout, - 0); - - demo_flush_init_cmd(demo); - - demo_destroy_texture_image(demo, &staging_texture); - } else { - /* Can't support VK_FORMAT_B8G8R8A8_UNORM !? */ - assert(!"No support for B8G8R8A8_UNORM as texture image format"); - } - - const VkSamplerCreateInfo sampler = { - .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, - .pNext = NULL, - .magFilter = VK_FILTER_NEAREST, - .minFilter = VK_FILTER_NEAREST, - .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT, - .mipLodBias = 0.0f, - .anisotropyEnable = VK_FALSE, - .maxAnisotropy = 1, - .compareOp = VK_COMPARE_OP_NEVER, - .minLod = 0.0f, - .maxLod = 0.0f, - .borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE, - .unnormalizedCoordinates = VK_FALSE, - }; - VkImageViewCreateInfo view = { - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .pNext = NULL, - .image = VK_NULL_HANDLE, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = tex_format, - .components = - { - VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, - VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A, - }, - .subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1}, - .flags = 0, - }; - - /* create sampler */ - err = vkCreateSampler(demo->device, &sampler, NULL, - &demo->textures[i].sampler); - assert(!err); - - /* create image view */ - view.image = demo->textures[i].image; - err = vkCreateImageView(demo->device, &view, NULL, - &demo->textures[i].view); - assert(!err); - } -} - -static void demo_prepare_vertices(struct demo *demo) { - // clang-format off - const float vb[3][5] = { - /* position texcoord */ - { -1.0f, -1.0f, 0.25f, 0.0f, 0.0f }, - { 1.0f, -1.0f, 0.25f, 1.0f, 0.0f }, - { 0.0f, 1.0f, 1.0f, 0.5f, 1.0f }, - }; - // clang-format on - const VkBufferCreateInfo buf_info = { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .pNext = NULL, - .size = sizeof(vb), - .usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, - .flags = 0, - }; - VkMemoryAllocateInfo mem_alloc = { - .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - .pNext = NULL, - .allocationSize = 0, - .memoryTypeIndex = 0, - }; - VkMemoryRequirements mem_reqs; - VkResult U_ASSERT_ONLY err; - bool U_ASSERT_ONLY pass; - void *data; - - memset(&demo->vertices, 0, sizeof(demo->vertices)); - - err = vkCreateBuffer(demo->device, &buf_info, NULL, &demo->vertices.buf); - assert(!err); - - vkGetBufferMemoryRequirements(demo->device, demo->vertices.buf, &mem_reqs); - assert(!err); - - mem_alloc.allocationSize = mem_reqs.size; - pass = memory_type_from_properties(demo, mem_reqs.memoryTypeBits, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, - &mem_alloc.memoryTypeIndex); - assert(pass); - - err = vkAllocateMemory(demo->device, &mem_alloc, NULL, &demo->vertices.mem); - assert(!err); - - err = vkMapMemory(demo->device, demo->vertices.mem, 0, - mem_alloc.allocationSize, 0, &data); - assert(!err); - - memcpy(data, vb, sizeof(vb)); - - vkUnmapMemory(demo->device, demo->vertices.mem); - - err = vkBindBufferMemory(demo->device, demo->vertices.buf, - demo->vertices.mem, 0); - assert(!err); - - demo->vertices.vi.sType = - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; - demo->vertices.vi.pNext = NULL; - demo->vertices.vi.vertexBindingDescriptionCount = 1; - demo->vertices.vi.pVertexBindingDescriptions = demo->vertices.vi_bindings; - demo->vertices.vi.vertexAttributeDescriptionCount = 2; - demo->vertices.vi.pVertexAttributeDescriptions = demo->vertices.vi_attrs; - - demo->vertices.vi_bindings[0].binding = VERTEX_BUFFER_BIND_ID; - demo->vertices.vi_bindings[0].stride = sizeof(vb[0]); - demo->vertices.vi_bindings[0].inputRate = VK_VERTEX_INPUT_RATE_VERTEX; - - demo->vertices.vi_attrs[0].binding = VERTEX_BUFFER_BIND_ID; - demo->vertices.vi_attrs[0].location = 0; - demo->vertices.vi_attrs[0].format = VK_FORMAT_R32G32B32_SFLOAT; - demo->vertices.vi_attrs[0].offset = 0; - - demo->vertices.vi_attrs[1].binding = VERTEX_BUFFER_BIND_ID; - demo->vertices.vi_attrs[1].location = 1; - demo->vertices.vi_attrs[1].format = VK_FORMAT_R32G32_SFLOAT; - demo->vertices.vi_attrs[1].offset = sizeof(float) * 3; -} - -static void demo_prepare_descriptor_layout(struct demo *demo) { - const VkDescriptorSetLayoutBinding layout_binding = { - .binding = 0, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = DEMO_TEXTURE_COUNT, - .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT, - .pImmutableSamplers = NULL, - }; - const VkDescriptorSetLayoutCreateInfo descriptor_layout = { - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - .pNext = NULL, - .bindingCount = 1, - .pBindings = &layout_binding, - }; - VkResult U_ASSERT_ONLY err; - - err = vkCreateDescriptorSetLayout(demo->device, &descriptor_layout, NULL, - &demo->desc_layout); - assert(!err); - - const VkPipelineLayoutCreateInfo pPipelineLayoutCreateInfo = { - .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, - .pNext = NULL, - .setLayoutCount = 1, - .pSetLayouts = &demo->desc_layout, - }; - - err = vkCreatePipelineLayout(demo->device, &pPipelineLayoutCreateInfo, NULL, - &demo->pipeline_layout); - assert(!err); -} - -static void demo_prepare_render_pass(struct demo *demo) { - const VkAttachmentDescription attachments[2] = { - [0] = - { - .format = demo->format, - .samples = VK_SAMPLE_COUNT_1_BIT, - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, - .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, - .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - }, - [1] = - { - .format = demo->depth.format, - .samples = VK_SAMPLE_COUNT_1_BIT, - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, - .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, - .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, - .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, - .initialLayout = - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - .finalLayout = - VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - }, - }; - const VkAttachmentReference color_reference = { - .attachment = 0, .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, - }; - const VkAttachmentReference depth_reference = { - .attachment = 1, - .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - }; - const VkSubpassDescription subpass = { - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, - .flags = 0, - .inputAttachmentCount = 0, - .pInputAttachments = NULL, - .colorAttachmentCount = 1, - .pColorAttachments = &color_reference, - .pResolveAttachments = NULL, - .pDepthStencilAttachment = &depth_reference, - .preserveAttachmentCount = 0, - .pPreserveAttachments = NULL, - }; - const VkRenderPassCreateInfo rp_info = { - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, - .pNext = NULL, - .attachmentCount = 2, - .pAttachments = attachments, - .subpassCount = 1, - .pSubpasses = &subpass, - .dependencyCount = 0, - .pDependencies = NULL, - }; - VkResult U_ASSERT_ONLY err; - - err = vkCreateRenderPass(demo->device, &rp_info, NULL, &demo->render_pass); - assert(!err); -} - -static VkShaderModule -demo_prepare_shader_module(struct demo *demo, const void *code, size_t size) { - VkShaderModuleCreateInfo moduleCreateInfo; - VkShaderModule module; - VkResult U_ASSERT_ONLY err; - - moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - moduleCreateInfo.pNext = NULL; - - moduleCreateInfo.codeSize = size; - moduleCreateInfo.pCode = code; - moduleCreateInfo.flags = 0; - err = vkCreateShaderModule(demo->device, &moduleCreateInfo, NULL, &module); - assert(!err); - - return module; -} - -static VkShaderModule demo_prepare_vs(struct demo *demo) { - size_t size = sizeof(vertShaderCode); - - demo->vert_shader_module = - demo_prepare_shader_module(demo, vertShaderCode, size); - - return demo->vert_shader_module; -} - -static VkShaderModule demo_prepare_fs(struct demo *demo) { - size_t size = sizeof(fragShaderCode); - - demo->frag_shader_module = - demo_prepare_shader_module(demo, fragShaderCode, size); - - return demo->frag_shader_module; -} - -static void demo_prepare_pipeline(struct demo *demo) { - VkGraphicsPipelineCreateInfo pipeline; - VkPipelineCacheCreateInfo pipelineCache; - - VkPipelineVertexInputStateCreateInfo vi; - VkPipelineInputAssemblyStateCreateInfo ia; - VkPipelineRasterizationStateCreateInfo rs; - VkPipelineColorBlendStateCreateInfo cb; - VkPipelineDepthStencilStateCreateInfo ds; - VkPipelineViewportStateCreateInfo vp; - VkPipelineMultisampleStateCreateInfo ms; - VkDynamicState dynamicStateEnables[VK_DYNAMIC_STATE_RANGE_SIZE]; - VkPipelineDynamicStateCreateInfo dynamicState; - - VkResult U_ASSERT_ONLY err; - - memset(dynamicStateEnables, 0, sizeof dynamicStateEnables); - memset(&dynamicState, 0, sizeof dynamicState); - dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; - dynamicState.pDynamicStates = dynamicStateEnables; - - memset(&pipeline, 0, sizeof(pipeline)); - pipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - pipeline.layout = demo->pipeline_layout; - - vi = demo->vertices.vi; - - memset(&ia, 0, sizeof(ia)); - ia.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - ia.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - - memset(&rs, 0, sizeof(rs)); - rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; - rs.polygonMode = VK_POLYGON_MODE_FILL; - rs.cullMode = VK_CULL_MODE_BACK_BIT; - rs.frontFace = VK_FRONT_FACE_CLOCKWISE; - rs.depthClampEnable = VK_FALSE; - rs.rasterizerDiscardEnable = VK_FALSE; - rs.depthBiasEnable = VK_FALSE; - rs.lineWidth = 1.0f; - - memset(&cb, 0, sizeof(cb)); - cb.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; - VkPipelineColorBlendAttachmentState att_state[1]; - memset(att_state, 0, sizeof(att_state)); - att_state[0].colorWriteMask = 0xf; - att_state[0].blendEnable = VK_FALSE; - cb.attachmentCount = 1; - cb.pAttachments = att_state; - - memset(&vp, 0, sizeof(vp)); - vp.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; - vp.viewportCount = 1; - dynamicStateEnables[dynamicState.dynamicStateCount++] = - VK_DYNAMIC_STATE_VIEWPORT; - vp.scissorCount = 1; - dynamicStateEnables[dynamicState.dynamicStateCount++] = - VK_DYNAMIC_STATE_SCISSOR; - - memset(&ds, 0, sizeof(ds)); - ds.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; - ds.depthTestEnable = VK_TRUE; - ds.depthWriteEnable = VK_TRUE; - ds.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL; - ds.depthBoundsTestEnable = VK_FALSE; - ds.back.failOp = VK_STENCIL_OP_KEEP; - ds.back.passOp = VK_STENCIL_OP_KEEP; - ds.back.compareOp = VK_COMPARE_OP_ALWAYS; - ds.stencilTestEnable = VK_FALSE; - ds.front = ds.back; - - memset(&ms, 0, sizeof(ms)); - ms.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; - ms.pSampleMask = NULL; - ms.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - - // Two stages: vs and fs - pipeline.stageCount = 2; - VkPipelineShaderStageCreateInfo shaderStages[2]; - memset(&shaderStages, 0, 2 * sizeof(VkPipelineShaderStageCreateInfo)); - - shaderStages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - shaderStages[0].stage = VK_SHADER_STAGE_VERTEX_BIT; - shaderStages[0].module = demo_prepare_vs(demo); - shaderStages[0].pName = "main"; - - shaderStages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - shaderStages[1].module = demo_prepare_fs(demo); - shaderStages[1].pName = "main"; - - pipeline.pVertexInputState = &vi; - pipeline.pInputAssemblyState = &ia; - pipeline.pRasterizationState = &rs; - pipeline.pColorBlendState = &cb; - pipeline.pMultisampleState = &ms; - pipeline.pViewportState = &vp; - pipeline.pDepthStencilState = &ds; - pipeline.pStages = shaderStages; - pipeline.renderPass = demo->render_pass; - pipeline.pDynamicState = &dynamicState; - - memset(&pipelineCache, 0, sizeof(pipelineCache)); - pipelineCache.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; - - err = vkCreatePipelineCache(demo->device, &pipelineCache, NULL, - &demo->pipelineCache); - assert(!err); - err = vkCreateGraphicsPipelines(demo->device, demo->pipelineCache, 1, - &pipeline, NULL, &demo->pipeline); - assert(!err); - - vkDestroyPipelineCache(demo->device, demo->pipelineCache, NULL); - - vkDestroyShaderModule(demo->device, demo->frag_shader_module, NULL); - vkDestroyShaderModule(demo->device, demo->vert_shader_module, NULL); -} - -static void demo_prepare_descriptor_pool(struct demo *demo) { - const VkDescriptorPoolSize type_count = { - .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .descriptorCount = DEMO_TEXTURE_COUNT, - }; - const VkDescriptorPoolCreateInfo descriptor_pool = { - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .pNext = NULL, - .maxSets = 1, - .poolSizeCount = 1, - .pPoolSizes = &type_count, - }; - VkResult U_ASSERT_ONLY err; - - err = vkCreateDescriptorPool(demo->device, &descriptor_pool, NULL, - &demo->desc_pool); - assert(!err); -} - -static void demo_prepare_descriptor_set(struct demo *demo) { - VkDescriptorImageInfo tex_descs[DEMO_TEXTURE_COUNT]; - VkWriteDescriptorSet write; - VkResult U_ASSERT_ONLY err; - uint32_t i; - - VkDescriptorSetAllocateInfo alloc_info = { - .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .pNext = NULL, - .descriptorPool = demo->desc_pool, - .descriptorSetCount = 1, - .pSetLayouts = &demo->desc_layout}; - err = vkAllocateDescriptorSets(demo->device, &alloc_info, &demo->desc_set); - assert(!err); - - memset(&tex_descs, 0, sizeof(tex_descs)); - for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { - tex_descs[i].sampler = demo->textures[i].sampler; - tex_descs[i].imageView = demo->textures[i].view; - tex_descs[i].imageLayout = VK_IMAGE_LAYOUT_GENERAL; - } - - memset(&write, 0, sizeof(write)); - write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; - write.dstSet = demo->desc_set; - write.descriptorCount = DEMO_TEXTURE_COUNT; - write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; - write.pImageInfo = tex_descs; - - vkUpdateDescriptorSets(demo->device, 1, &write, 0, NULL); -} - -static void demo_prepare_framebuffers(struct demo *demo) { - VkImageView attachments[2]; - attachments[1] = demo->depth.view; - - const VkFramebufferCreateInfo fb_info = { - .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, - .pNext = NULL, - .renderPass = demo->render_pass, - .attachmentCount = 2, - .pAttachments = attachments, - .width = demo->width, - .height = demo->height, - .layers = 1, - }; - VkResult U_ASSERT_ONLY err; - uint32_t i; - - demo->framebuffers = (VkFramebuffer *)malloc(demo->swapchainImageCount * - sizeof(VkFramebuffer)); - assert(demo->framebuffers); - - for (i = 0; i < demo->swapchainImageCount; i++) { - attachments[0] = demo->buffers[i].view; - err = vkCreateFramebuffer(demo->device, &fb_info, NULL, - &demo->framebuffers[i]); - assert(!err); - } -} - -static void demo_prepare(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - - const VkCommandPoolCreateInfo cmd_pool_info = { - .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, - .pNext = NULL, - .queueFamilyIndex = demo->graphics_queue_node_index, - .flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, - }; - err = vkCreateCommandPool(demo->device, &cmd_pool_info, NULL, - &demo->cmd_pool); - assert(!err); - - const VkCommandBufferAllocateInfo cmd = { - .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, - .pNext = NULL, - .commandPool = demo->cmd_pool, - .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY, - .commandBufferCount = 1, - }; - err = vkAllocateCommandBuffers(demo->device, &cmd, &demo->draw_cmd); - assert(!err); - - demo_prepare_buffers(demo); - demo_prepare_depth(demo); - demo_prepare_textures(demo); - demo_prepare_vertices(demo); - demo_prepare_descriptor_layout(demo); - demo_prepare_render_pass(demo); - demo_prepare_pipeline(demo); - - demo_prepare_descriptor_pool(demo); - demo_prepare_descriptor_set(demo); - - demo_prepare_framebuffers(demo); -} - -static void demo_error_callback(int error, const char* description) { - printf("GLFW error: %s\n", description); - fflush(stdout); -} - -static void demo_key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { - if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) - glfwSetWindowShouldClose(window, GLFW_TRUE); -} - -static void demo_refresh_callback(GLFWwindow* window) { - struct demo* demo = glfwGetWindowUserPointer(window); - demo_draw(demo); -} - -static void demo_resize_callback(GLFWwindow* window, int width, int height) { - struct demo* demo = glfwGetWindowUserPointer(window); - demo->width = width; - demo->height = height; - demo_resize(demo); -} - -static void demo_run(struct demo *demo) { - while (!glfwWindowShouldClose(demo->window)) { - glfwPollEvents(); - - demo_draw(demo); - - if (demo->depthStencil > 0.99f) - demo->depthIncrement = -0.001f; - if (demo->depthStencil < 0.8f) - demo->depthIncrement = 0.001f; - - demo->depthStencil += demo->depthIncrement; - - // Wait for work to finish before updating MVP. - vkDeviceWaitIdle(demo->device); - demo->curFrame++; - if (demo->frameCount != INT32_MAX && demo->curFrame == demo->frameCount) - glfwSetWindowShouldClose(demo->window, GLFW_TRUE); - } -} - -static void demo_create_window(struct demo *demo) { - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - - demo->window = glfwCreateWindow(demo->width, - demo->height, - APP_LONG_NAME, - NULL, - NULL); - if (!demo->window) { - // It didn't work, so try to give a useful error: - printf("Cannot create a window in which to draw!\n"); - fflush(stdout); - exit(1); - } - - glfwSetWindowUserPointer(demo->window, demo); - glfwSetWindowRefreshCallback(demo->window, demo_refresh_callback); - glfwSetFramebufferSizeCallback(demo->window, demo_resize_callback); - glfwSetKeyCallback(demo->window, demo_key_callback); -} - -/* - * Return 1 (true) if all layer names specified in check_names - * can be found in given layer properties. - */ -static VkBool32 demo_check_layers(uint32_t check_count, const char **check_names, - uint32_t layer_count, - VkLayerProperties *layers) { - uint32_t i, j; - for (i = 0; i < check_count; i++) { - VkBool32 found = 0; - for (j = 0; j < layer_count; j++) { - if (!strcmp(check_names[i], layers[j].layerName)) { - found = 1; - break; - } - } - if (!found) { - fprintf(stderr, "Cannot find layer: %s\n", check_names[i]); - return 0; - } - } - return 1; -} - -static void demo_init_vk(struct demo *demo) { - VkResult err; - uint32_t i = 0; - uint32_t required_extension_count = 0; - uint32_t instance_extension_count = 0; - uint32_t instance_layer_count = 0; - uint32_t validation_layer_count = 0; - const char **required_extensions = NULL; - const char **instance_validation_layers = NULL; - demo->enabled_extension_count = 0; - demo->enabled_layer_count = 0; - - char *instance_validation_layers_alt1[] = { - "VK_LAYER_LUNARG_standard_validation" - }; - - char *instance_validation_layers_alt2[] = { - "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", - "VK_LAYER_LUNARG_object_tracker", "VK_LAYER_LUNARG_image", - "VK_LAYER_LUNARG_core_validation", "VK_LAYER_LUNARG_swapchain", - "VK_LAYER_GOOGLE_unique_objects" - }; - - /* Look for validation layers */ - VkBool32 validation_found = 0; - if (demo->validate) { - - err = vkEnumerateInstanceLayerProperties(&instance_layer_count, NULL); - assert(!err); - - instance_validation_layers = (const char**) instance_validation_layers_alt1; - if (instance_layer_count > 0) { - VkLayerProperties *instance_layers = - malloc(sizeof (VkLayerProperties) * instance_layer_count); - err = vkEnumerateInstanceLayerProperties(&instance_layer_count, - instance_layers); - assert(!err); - - - validation_found = demo_check_layers( - ARRAY_SIZE(instance_validation_layers_alt1), - instance_validation_layers, instance_layer_count, - instance_layers); - if (validation_found) { - demo->enabled_layer_count = ARRAY_SIZE(instance_validation_layers_alt1); - demo->enabled_layers[0] = "VK_LAYER_LUNARG_standard_validation"; - validation_layer_count = 1; - } else { - // use alternative set of validation layers - instance_validation_layers = - (const char**) instance_validation_layers_alt2; - demo->enabled_layer_count = ARRAY_SIZE(instance_validation_layers_alt2); - validation_found = demo_check_layers( - ARRAY_SIZE(instance_validation_layers_alt2), - instance_validation_layers, instance_layer_count, - instance_layers); - validation_layer_count = - ARRAY_SIZE(instance_validation_layers_alt2); - for (i = 0; i < validation_layer_count; i++) { - demo->enabled_layers[i] = instance_validation_layers[i]; - } - } - free(instance_layers); - } - - if (!validation_found) { - ERR_EXIT("vkEnumerateInstanceLayerProperties failed to find " - "required validation layer.\n\n" - "Please look at the Getting Started guide for additional " - "information.\n", - "vkCreateInstance Failure"); - } - } - - /* Look for instance extensions */ - required_extensions = glfwGetRequiredInstanceExtensions(&required_extension_count); - if (!required_extensions) { - ERR_EXIT("glfwGetRequiredInstanceExtensions failed to find the " - "platform surface extensions.\n\nDo you have a compatible " - "Vulkan installable client driver (ICD) installed?\nPlease " - "look at the Getting Started guide for additional " - "information.\n", - "vkCreateInstance Failure"); - } - - for (i = 0; i < required_extension_count; i++) { - demo->extension_names[demo->enabled_extension_count++] = required_extensions[i]; - assert(demo->enabled_extension_count < 64); - } - - err = vkEnumerateInstanceExtensionProperties( - NULL, &instance_extension_count, NULL); - assert(!err); - - if (instance_extension_count > 0) { - VkExtensionProperties *instance_extensions = - malloc(sizeof(VkExtensionProperties) * instance_extension_count); - err = vkEnumerateInstanceExtensionProperties( - NULL, &instance_extension_count, instance_extensions); - assert(!err); - for (i = 0; i < instance_extension_count; i++) { - if (!strcmp(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, - instance_extensions[i].extensionName)) { - if (demo->validate) { - demo->extension_names[demo->enabled_extension_count++] = - VK_EXT_DEBUG_REPORT_EXTENSION_NAME; - } - } - assert(demo->enabled_extension_count < 64); - } - - free(instance_extensions); - } - - const VkApplicationInfo app = { - .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, - .pNext = NULL, - .pApplicationName = APP_SHORT_NAME, - .applicationVersion = 0, - .pEngineName = APP_SHORT_NAME, - .engineVersion = 0, - .apiVersion = VK_API_VERSION_1_0, - }; - VkInstanceCreateInfo inst_info = { - .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, - .pNext = NULL, - .pApplicationInfo = &app, - .enabledLayerCount = demo->enabled_layer_count, - .ppEnabledLayerNames = (const char *const *)instance_validation_layers, - .enabledExtensionCount = demo->enabled_extension_count, - .ppEnabledExtensionNames = (const char *const *)demo->extension_names, - }; - - uint32_t gpu_count; - - err = vkCreateInstance(&inst_info, NULL, &demo->inst); - if (err == VK_ERROR_INCOMPATIBLE_DRIVER) { - ERR_EXIT("Cannot find a compatible Vulkan installable client driver " - "(ICD).\n\nPlease look at the Getting Started guide for " - "additional information.\n", - "vkCreateInstance Failure"); - } else if (err == VK_ERROR_EXTENSION_NOT_PRESENT) { - ERR_EXIT("Cannot find a specified extension library" - ".\nMake sure your layers path is set appropriately\n", - "vkCreateInstance Failure"); - } else if (err) { - ERR_EXIT("vkCreateInstance failed.\n\nDo you have a compatible Vulkan " - "installable client driver (ICD) installed?\nPlease look at " - "the Getting Started guide for additional information.\n", - "vkCreateInstance Failure"); - } - - gladLoadVulkanUserPtr(NULL, glad_vulkan_callback, demo->inst); - - /* Make initial call to query gpu_count, then second call for gpu info*/ - err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, NULL); - assert(!err && gpu_count > 0); - - if (gpu_count > 0) { - VkPhysicalDevice *physical_devices = - malloc(sizeof(VkPhysicalDevice) * gpu_count); - err = vkEnumeratePhysicalDevices(demo->inst, &gpu_count, - physical_devices); - assert(!err); - /* For tri demo we just grab the first physical device */ - demo->gpu = physical_devices[0]; - free(physical_devices); - } else { - ERR_EXIT("vkEnumeratePhysicalDevices reported zero accessible devices." - "\n\nDo you have a compatible Vulkan installable client" - " driver (ICD) installed?\nPlease look at the Getting Started" - " guide for additional information.\n", - "vkEnumeratePhysicalDevices Failure"); - } - - gladLoadVulkanUserPtr(demo->gpu, glad_vulkan_callback, demo->inst); - - /* Look for device extensions */ - uint32_t device_extension_count = 0; - VkBool32 swapchainExtFound = 0; - demo->enabled_extension_count = 0; - - err = vkEnumerateDeviceExtensionProperties(demo->gpu, NULL, - &device_extension_count, NULL); - assert(!err); - - if (device_extension_count > 0) { - VkExtensionProperties *device_extensions = - malloc(sizeof(VkExtensionProperties) * device_extension_count); - err = vkEnumerateDeviceExtensionProperties( - demo->gpu, NULL, &device_extension_count, device_extensions); - assert(!err); - - for (i = 0; i < device_extension_count; i++) { - if (!strcmp(VK_KHR_SWAPCHAIN_EXTENSION_NAME, - device_extensions[i].extensionName)) { - swapchainExtFound = 1; - demo->extension_names[demo->enabled_extension_count++] = - VK_KHR_SWAPCHAIN_EXTENSION_NAME; - } - assert(demo->enabled_extension_count < 64); - } - - free(device_extensions); - } - - if (!swapchainExtFound) { - ERR_EXIT("vkEnumerateDeviceExtensionProperties failed to find " - "the " VK_KHR_SWAPCHAIN_EXTENSION_NAME - " extension.\n\nDo you have a compatible " - "Vulkan installable client driver (ICD) installed?\nPlease " - "look at the Getting Started guide for additional " - "information.\n", - "vkCreateInstance Failure"); - } - - if (demo->validate) { - VkDebugReportCallbackCreateInfoEXT dbgCreateInfo; - dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; - dbgCreateInfo.flags = - VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT; - dbgCreateInfo.pfnCallback = demo->use_break ? BreakCallback : dbgFunc; - dbgCreateInfo.pUserData = demo; - dbgCreateInfo.pNext = NULL; - err = vkCreateDebugReportCallbackEXT(demo->inst, &dbgCreateInfo, NULL, - &demo->msg_callback); - switch (err) { - case VK_SUCCESS: - break; - case VK_ERROR_OUT_OF_HOST_MEMORY: - ERR_EXIT("CreateDebugReportCallback: out of host memory\n", - "CreateDebugReportCallback Failure"); - break; - default: - ERR_EXIT("CreateDebugReportCallback: unknown failure\n", - "CreateDebugReportCallback Failure"); - break; - } - } - - vkGetPhysicalDeviceProperties(demo->gpu, &demo->gpu_props); - - // Query with NULL data to get count - vkGetPhysicalDeviceQueueFamilyProperties(demo->gpu, &demo->queue_count, - NULL); - - demo->queue_props = (VkQueueFamilyProperties *)malloc( - demo->queue_count * sizeof(VkQueueFamilyProperties)); - vkGetPhysicalDeviceQueueFamilyProperties(demo->gpu, &demo->queue_count, - demo->queue_props); - assert(demo->queue_count >= 1); - - vkGetPhysicalDeviceFeatures(demo->gpu, &demo->gpu_features); - - // Graphics queue and MemMgr queue can be separate. - // TODO: Add support for separate queues, including synchronization, - // and appropriate tracking for QueueSubmit -} - -static void demo_init_device(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - - float queue_priorities[1] = {0.0}; - const VkDeviceQueueCreateInfo queue = { - .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, - .pNext = NULL, - .queueFamilyIndex = demo->graphics_queue_node_index, - .queueCount = 1, - .pQueuePriorities = queue_priorities}; - - - VkPhysicalDeviceFeatures features; - memset(&features, 0, sizeof(features)); - if (demo->gpu_features.shaderClipDistance) { - features.shaderClipDistance = VK_TRUE; - } - - VkDeviceCreateInfo device = { - .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, - .pNext = NULL, - .queueCreateInfoCount = 1, - .pQueueCreateInfos = &queue, - .enabledLayerCount = 0, - .ppEnabledLayerNames = NULL, - .enabledExtensionCount = demo->enabled_extension_count, - .ppEnabledExtensionNames = (const char *const *)demo->extension_names, - .pEnabledFeatures = &features, - }; - - err = vkCreateDevice(demo->gpu, &device, NULL, &demo->device); - assert(!err); -} - -static void demo_init_vk_swapchain(struct demo *demo) { - VkResult U_ASSERT_ONLY err; - uint32_t i; - - // Create a WSI surface for the window: - glfwCreateWindowSurface(demo->inst, demo->window, NULL, &demo->surface); - - // Iterate over each queue to learn whether it supports presenting: - VkBool32 *supportsPresent = - (VkBool32 *)malloc(demo->queue_count * sizeof(VkBool32)); - for (i = 0; i < demo->queue_count; i++) { - vkGetPhysicalDeviceSurfaceSupportKHR(demo->gpu, i, demo->surface, - &supportsPresent[i]); - } - - // Search for a graphics and a present queue in the array of queue - // families, try to find one that supports both - uint32_t graphicsQueueNodeIndex = UINT32_MAX; - uint32_t presentQueueNodeIndex = UINT32_MAX; - for (i = 0; i < demo->queue_count; i++) { - if ((demo->queue_props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0) { - if (graphicsQueueNodeIndex == UINT32_MAX) { - graphicsQueueNodeIndex = i; - } - - if (supportsPresent[i] == VK_TRUE) { - graphicsQueueNodeIndex = i; - presentQueueNodeIndex = i; - break; - } - } - } - if (presentQueueNodeIndex == UINT32_MAX) { - // If didn't find a queue that supports both graphics and present, then - // find a separate present queue. - for (i = 0; i < demo->queue_count; ++i) { - if (supportsPresent[i] == VK_TRUE) { - presentQueueNodeIndex = i; - break; - } - } - } - free(supportsPresent); - - // Generate error if could not find both a graphics and a present queue - if (graphicsQueueNodeIndex == UINT32_MAX || - presentQueueNodeIndex == UINT32_MAX) { - ERR_EXIT("Could not find a graphics and a present queue\n", - "Swapchain Initialization Failure"); - } - - // TODO: Add support for separate queues, including presentation, - // synchronization, and appropriate tracking for QueueSubmit. - // NOTE: While it is possible for an application to use a separate graphics - // and a present queues, this demo program assumes it is only using - // one: - if (graphicsQueueNodeIndex != presentQueueNodeIndex) { - ERR_EXIT("Could not find a common graphics and a present queue\n", - "Swapchain Initialization Failure"); - } - - demo->graphics_queue_node_index = graphicsQueueNodeIndex; - - demo_init_device(demo); - - vkGetDeviceQueue(demo->device, demo->graphics_queue_node_index, 0, - &demo->queue); - - // Get the list of VkFormat's that are supported: - uint32_t formatCount; - err = vkGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, - &formatCount, NULL); - assert(!err); - VkSurfaceFormatKHR *surfFormats = - (VkSurfaceFormatKHR *)malloc(formatCount * sizeof(VkSurfaceFormatKHR)); - err = vkGetPhysicalDeviceSurfaceFormatsKHR(demo->gpu, demo->surface, - &formatCount, surfFormats); - assert(!err); - // If the format list includes just one entry of VK_FORMAT_UNDEFINED, - // the surface has no preferred format. Otherwise, at least one - // supported format will be returned. - if (formatCount == 1 && surfFormats[0].format == VK_FORMAT_UNDEFINED) { - demo->format = VK_FORMAT_B8G8R8A8_UNORM; - } else { - assert(formatCount >= 1); - demo->format = surfFormats[0].format; - } - demo->color_space = surfFormats[0].colorSpace; - - demo->curFrame = 0; - - // Get Memory information and properties - vkGetPhysicalDeviceMemoryProperties(demo->gpu, &demo->memory_properties); -} - -static void demo_init_connection(struct demo *demo) { - glfwSetErrorCallback(demo_error_callback); - - if (!glfwInit()) { - printf("Cannot initialize GLFW.\nExiting ...\n"); - fflush(stdout); - exit(1); - } - - if (!glfwVulkanSupported()) { - printf("GLFW failed to find the Vulkan loader.\nExiting ...\n"); - fflush(stdout); - exit(1); - } - - gladLoadVulkanUserPtr(NULL, glad_vulkan_callback, NULL); -} - -static void demo_init(struct demo *demo, const int argc, const char *argv[]) -{ - int i; - memset(demo, 0, sizeof(*demo)); - demo->frameCount = INT32_MAX; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "--use_staging") == 0) { - demo->use_staging_buffer = true; - continue; - } - if (strcmp(argv[i], "--break") == 0) { - demo->use_break = true; - continue; - } - if (strcmp(argv[i], "--validate") == 0) { - demo->validate = true; - continue; - } - if (strcmp(argv[i], "--c") == 0 && demo->frameCount == INT32_MAX && - i < argc - 1 && sscanf(argv[i + 1], "%d", &demo->frameCount) == 1 && - demo->frameCount >= 0) { - i++; - continue; - } - - fprintf(stderr, "Usage:\n %s [--use_staging] [--validate] [--break] " - "[--c ]\n", - APP_SHORT_NAME); - fflush(stderr); - exit(1); - } - - demo_init_connection(demo); - demo_init_vk(demo); - - demo->width = 300; - demo->height = 300; - demo->depthStencil = 1.0; - demo->depthIncrement = -0.01f; -} - -static void demo_cleanup(struct demo *demo) { - uint32_t i; - - for (i = 0; i < demo->swapchainImageCount; i++) { - vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL); - } - free(demo->framebuffers); - vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL); - - if (demo->setup_cmd) { - vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->setup_cmd); - } - vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->draw_cmd); - vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL); - - vkDestroyPipeline(demo->device, demo->pipeline, NULL); - vkDestroyRenderPass(demo->device, demo->render_pass, NULL); - vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL); - vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL); - - vkDestroyBuffer(demo->device, demo->vertices.buf, NULL); - vkFreeMemory(demo->device, demo->vertices.mem, NULL); - - for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { - vkDestroyImageView(demo->device, demo->textures[i].view, NULL); - vkDestroyImage(demo->device, demo->textures[i].image, NULL); - vkFreeMemory(demo->device, demo->textures[i].mem, NULL); - vkDestroySampler(demo->device, demo->textures[i].sampler, NULL); - } - - for (i = 0; i < demo->swapchainImageCount; i++) { - vkDestroyImageView(demo->device, demo->buffers[i].view, NULL); - } - - vkDestroyImageView(demo->device, demo->depth.view, NULL); - vkDestroyImage(demo->device, demo->depth.image, NULL); - vkFreeMemory(demo->device, demo->depth.mem, NULL); - - vkDestroySwapchainKHR(demo->device, demo->swapchain, NULL); - free(demo->buffers); - - vkDestroyDevice(demo->device, NULL); - if (demo->validate) { - vkDestroyDebugReportCallbackEXT(demo->inst, demo->msg_callback, NULL); - } - vkDestroySurfaceKHR(demo->inst, demo->surface, NULL); - vkDestroyInstance(demo->inst, NULL); - - free(demo->queue_props); - - glfwDestroyWindow(demo->window); - glfwTerminate(); -} - -static void demo_resize(struct demo *demo) { - uint32_t i; - - // In order to properly resize the window, we must re-create the swapchain - // AND redo the command buffers, etc. - // - // First, perform part of the demo_cleanup() function: - - for (i = 0; i < demo->swapchainImageCount; i++) { - vkDestroyFramebuffer(demo->device, demo->framebuffers[i], NULL); - } - free(demo->framebuffers); - vkDestroyDescriptorPool(demo->device, demo->desc_pool, NULL); - - if (demo->setup_cmd) { - vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->setup_cmd); - demo->setup_cmd = VK_NULL_HANDLE; - } - vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->draw_cmd); - vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL); - - vkDestroyPipeline(demo->device, demo->pipeline, NULL); - vkDestroyRenderPass(demo->device, demo->render_pass, NULL); - vkDestroyPipelineLayout(demo->device, demo->pipeline_layout, NULL); - vkDestroyDescriptorSetLayout(demo->device, demo->desc_layout, NULL); - - vkDestroyBuffer(demo->device, demo->vertices.buf, NULL); - vkFreeMemory(demo->device, demo->vertices.mem, NULL); - - for (i = 0; i < DEMO_TEXTURE_COUNT; i++) { - vkDestroyImageView(demo->device, demo->textures[i].view, NULL); - vkDestroyImage(demo->device, demo->textures[i].image, NULL); - vkFreeMemory(demo->device, demo->textures[i].mem, NULL); - vkDestroySampler(demo->device, demo->textures[i].sampler, NULL); - } - - for (i = 0; i < demo->swapchainImageCount; i++) { - vkDestroyImageView(demo->device, demo->buffers[i].view, NULL); - } - - vkDestroyImageView(demo->device, demo->depth.view, NULL); - vkDestroyImage(demo->device, demo->depth.image, NULL); - vkFreeMemory(demo->device, demo->depth.mem, NULL); - - free(demo->buffers); - - // Second, re-perform the demo_prepare() function, which will re-create the - // swapchain: - demo_prepare(demo); -} - -int main(const int argc, const char *argv[]) { - struct demo demo; - - demo_init(&demo, argc, argv); - demo_create_window(&demo); - demo_init_vk_swapchain(&demo); - - demo_prepare(&demo); - demo_run(&demo); - - demo_cleanup(&demo); - - return validation_error; -} - diff --git a/third_party/penumbra/vendor/glfw/tests/windows.c b/third_party/penumbra/vendor/glfw/tests/windows.c deleted file mode 100644 index 6669856f1e0..00000000000 --- a/third_party/penumbra/vendor/glfw/tests/windows.c +++ /dev/null @@ -1,174 +0,0 @@ -//======================================================================== -// Simple multi-window test -// Copyright (c) Camilla Löwy -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== -// -// This test creates four windows and clears each in a different color -// -//======================================================================== - -#include -#define GLFW_INCLUDE_NONE -#include - -#include -#include - -#include "getopt.h" - -static const char* titles[] = -{ - "Red", - "Green", - "Blue", - "Yellow" -}; - -static const struct -{ - float r, g, b; -} colors[] = -{ - { 0.95f, 0.32f, 0.11f }, - { 0.50f, 0.80f, 0.16f }, - { 0.f, 0.68f, 0.94f }, - { 0.98f, 0.74f, 0.04f } -}; - -static void usage(void) -{ - printf("Usage: windows [-h] [-b] [-f] \n"); - printf("Options:\n"); - printf(" -b create decorated windows\n"); - printf(" -f set focus on show off for all but first window\n"); - printf(" -h show this help\n"); -} - -static void error_callback(int error, const char* description) -{ - fprintf(stderr, "Error: %s\n", description); -} - -static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) -{ - if (action != GLFW_PRESS) - return; - - switch (key) - { - case GLFW_KEY_SPACE: - { - int xpos, ypos; - glfwGetWindowPos(window, &xpos, &ypos); - glfwSetWindowPos(window, xpos, ypos); - break; - } - - case GLFW_KEY_ESCAPE: - glfwSetWindowShouldClose(window, GLFW_TRUE); - break; - } -} - -int main(int argc, char** argv) -{ - int i, ch; - int decorated = GLFW_FALSE; - int focusOnShow = GLFW_TRUE; - int running = GLFW_TRUE; - GLFWwindow* windows[4]; - - while ((ch = getopt(argc, argv, "bfh")) != -1) - { - switch (ch) - { - case 'b': - decorated = GLFW_TRUE; - break; - case 'f': - focusOnShow = GLFW_FALSE; - break; - case 'h': - usage(); - exit(EXIT_SUCCESS); - default: - usage(); - exit(EXIT_FAILURE); - } - } - - glfwSetErrorCallback(error_callback); - - if (!glfwInit()) - exit(EXIT_FAILURE); - - glfwWindowHint(GLFW_DECORATED, decorated); - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - - for (i = 0; i < 4; i++) - { - int left, top, right, bottom; - if (i) - glfwWindowHint(GLFW_FOCUS_ON_SHOW, focusOnShow); - - windows[i] = glfwCreateWindow(200, 200, titles[i], NULL, NULL); - if (!windows[i]) - { - glfwTerminate(); - exit(EXIT_FAILURE); - } - - glfwSetKeyCallback(windows[i], key_callback); - - glfwMakeContextCurrent(windows[i]); - gladLoadGL(glfwGetProcAddress); - glClearColor(colors[i].r, colors[i].g, colors[i].b, 1.f); - - glfwGetWindowFrameSize(windows[i], &left, &top, &right, &bottom); - glfwSetWindowPos(windows[i], - 100 + (i & 1) * (200 + left + right), - 100 + (i >> 1) * (200 + top + bottom)); - } - - for (i = 0; i < 4; i++) - glfwShowWindow(windows[i]); - - while (running) - { - for (i = 0; i < 4; i++) - { - glfwMakeContextCurrent(windows[i]); - glClear(GL_COLOR_BUFFER_BIT); - glfwSwapBuffers(windows[i]); - - if (glfwWindowShouldClose(windows[i])) - running = GLFW_FALSE; - } - - glfwWaitEvents(); - } - - glfwTerminate(); - exit(EXIT_SUCCESS); -} - diff --git a/third_party/penumbra/vendor/libtess2/Include/tesselator.h b/third_party/penumbra/vendor/libtess2/Include/tesselator.h index 3d431559a1b..cf56287d848 100755 --- a/third_party/penumbra/vendor/libtess2/Include/tesselator.h +++ b/third_party/penumbra/vendor/libtess2/Include/tesselator.h @@ -136,7 +136,7 @@ typedef struct TESSalloc TESSalloc; #define TESS_UNDEF (~(TESSindex)0) -#define TESS_NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) +#define TESS_NOTUSED(v) (void)(v) // Custom memory allocator interface. // The internal memory allocator allocates mesh edges, vertices and faces @@ -236,7 +236,7 @@ int tessGetElementCount( TESStesselator *tess ); const TESSindex* tessGetElements( TESStesselator *tess ); #ifdef __cplusplus -}; +} #endif #endif // TESSELATOR_H diff --git a/third_party/penumbra/vendor/libtess2/Source/bucketalloc.c b/third_party/penumbra/vendor/libtess2/Source/bucketalloc.c index 79e419f6aa0..7d79ae6926e 100755 --- a/third_party/penumbra/vendor/libtess2/Source/bucketalloc.c +++ b/third_party/penumbra/vendor/libtess2/Source/bucketalloc.c @@ -55,15 +55,15 @@ struct BucketAlloc static int CreateBucket( struct BucketAlloc* ba ) { - unsigned int size; + size_t size; Bucket* bucket; void* freelist; unsigned char* head; unsigned char* it; // Allocate memory for the bucket - size = (unsigned int)sizeof(Bucket) + ba->itemSize * ba->bucketSize; - bucket = (Bucket*)ba->alloc->memalloc( ba->alloc->userData, size ); + size = sizeof(Bucket) + (size_t) (ba->itemSize * ba->bucketSize); + bucket = (Bucket*)ba->alloc->memalloc( ba->alloc->userData, (unsigned int) size ); if ( !bucket ) return 0; bucket->next = 0; diff --git a/third_party/penumbra/vendor/libtess2/Source/geom.c b/third_party/penumbra/vendor/libtess2/Source/geom.c index 66005540d48..6d918e1c0ab 100755 --- a/third_party/penumbra/vendor/libtess2/Source/geom.c +++ b/third_party/penumbra/vendor/libtess2/Source/geom.c @@ -216,9 +216,9 @@ void tesedgeIntersect( TESSvertex *o1, TESSvertex *d1, * using the TransLeq ordering to find the intersection t-value. */ - if( ! VertLeq( o1, d1 )) { Swap( o1, d1 ); } - if( ! VertLeq( o2, d2 )) { Swap( o2, d2 ); } - if( ! VertLeq( o1, o2 )) { Swap( o1, o2 ); Swap( d1, d2 ); } + if( ! VertLeq( o1, d1 )) { Swap( o1, d1 ) {}; } + if( ! VertLeq( o2, d2 )) { Swap( o2, d2 ) {}; } + if( ! VertLeq( o1, o2 )) { Swap( o1, o2 ) {}; Swap( d1, d2 ) {}; } if( ! VertLeq( o2, d1 )) { /* Technically, no intersection -- do our best */ @@ -239,9 +239,9 @@ void tesedgeIntersect( TESSvertex *o1, TESSvertex *d1, /* Now repeat the process for t */ - if( ! TransLeq( o1, d1 )) { Swap( o1, d1 ); } - if( ! TransLeq( o2, d2 )) { Swap( o2, d2 ); } - if( ! TransLeq( o1, o2 )) { Swap( o1, o2 ); Swap( d1, d2 ); } + if( ! TransLeq( o1, d1 )) { Swap( o1, d1 ) {}; } + if( ! TransLeq( o2, d2 )) { Swap( o2, d2 ) {}; } + if( ! TransLeq( o1, o2 )) { Swap( o1, o2 ) {}; Swap( d1, d2 ) {}; } if( ! TransLeq( o2, d1 )) { /* Technically, no intersection -- do our best */ @@ -260,34 +260,34 @@ void tesedgeIntersect( TESSvertex *o1, TESSvertex *d1, v->t = Interpolate( z1, o2->t, z2, d2->t ); } } - -TESSreal inCircle( TESSvertex *v, TESSvertex *v0, TESSvertex *v1, TESSvertex *v2 ) { - TESSreal adx, ady, bdx, bdy, cdx, cdy; - TESSreal abdet, bcdet, cadet; - TESSreal alift, blift, clift; - - adx = v0->s - v->s; - ady = v0->t - v->t; - bdx = v1->s - v->s; - bdy = v1->t - v->t; - cdx = v2->s - v->s; - cdy = v2->t - v->t; - - abdet = adx * bdy - bdx * ady; - bcdet = bdx * cdy - cdx * bdy; - cadet = cdx * ady - adx * cdy; - - alift = adx * adx + ady * ady; - blift = bdx * bdx + bdy * bdy; - clift = cdx * cdx + cdy * cdy; - - return alift * bcdet + blift * cadet + clift * abdet; -} + +TESSreal inCircle( TESSvertex *v, TESSvertex *v0, TESSvertex *v1, TESSvertex *v2 ) { + TESSreal adx, ady, bdx, bdy, cdx, cdy; + TESSreal abdet, bcdet, cadet; + TESSreal alift, blift, clift; + + adx = v0->s - v->s; + ady = v0->t - v->t; + bdx = v1->s - v->s; + bdy = v1->t - v->t; + cdx = v2->s - v->s; + cdy = v2->t - v->t; + + abdet = adx * bdy - bdx * ady; + bcdet = bdx * cdy - cdx * bdy; + cadet = cdx * ady - adx * cdy; + + alift = adx * adx + ady * ady; + blift = bdx * bdx + bdy * bdy; + clift = cdx * cdx + cdy * cdy; + + return alift * bcdet + blift * cadet + clift * abdet; +} /* Returns 1 is edge is locally delaunay */ int tesedgeIsLocallyDelaunay( TESShalfEdge *e ) -{ - return inCircle(e->Sym->Lnext->Lnext->Org, e->Lnext->Org, e->Lnext->Lnext->Org, e->Org) < 0; +{ + return inCircle(e->Sym->Lnext->Lnext->Org, e->Lnext->Org, e->Lnext->Lnext->Org, e->Org) < 0; } diff --git a/third_party/penumbra/vendor/libtess2/Source/mesh.c b/third_party/penumbra/vendor/libtess2/Source/mesh.c index a0fa08e577f..16c8a76616d 100755 --- a/third_party/penumbra/vendor/libtess2/Source/mesh.c +++ b/third_party/penumbra/vendor/libtess2/Source/mesh.c @@ -748,7 +748,7 @@ int tessMeshMergeConvexFaces( TESSmesh *mesh, int maxVertsPerFace ) return 1; } -void tessMeshFlipEdge( TESSmesh *mesh, TESShalfEdge *edge ) +void tessMeshFlipEdge( TESShalfEdge *edge ) { TESShalfEdge *a0 = edge; TESShalfEdge *a1 = a0->Lnext; diff --git a/third_party/penumbra/vendor/libtess2/Source/mesh.h b/third_party/penumbra/vendor/libtess2/Source/mesh.h index 479c66f369e..36ab087b444 100755 --- a/third_party/penumbra/vendor/libtess2/Source/mesh.h +++ b/third_party/penumbra/vendor/libtess2/Source/mesh.h @@ -258,7 +258,7 @@ int tessMeshMergeConvexFaces( TESSmesh *mesh, int maxVertsPerFace ); void tessMeshDeleteMesh( TESSalloc* alloc, TESSmesh *mesh ); void tessMeshZapFace( TESSmesh *mesh, TESSface *fZap ); -void tessMeshFlipEdge( TESSmesh *mesh, TESShalfEdge *edge ); +void tessMeshFlipEdge( TESShalfEdge *edge ); #ifdef NDEBUG #define tessMeshCheckMesh( mesh ) diff --git a/third_party/penumbra/vendor/libtess2/Source/priorityq.c b/third_party/penumbra/vendor/libtess2/Source/priorityq.c index 62a6654535e..095e95b6049 100755 --- a/third_party/penumbra/vendor/libtess2/Source/priorityq.c +++ b/third_party/penumbra/vendor/libtess2/Source/priorityq.c @@ -334,7 +334,7 @@ void pqDeletePriorityQ( TESSalloc* alloc, PriorityQ *pq ) #define LT(x,y) (! LEQ(y,x)) #define GT(x,y) (! LEQ(x,y)) -#define Swap(a,b) if(1){PQkey *tmp = *a; *a = *b; *b = tmp;}else +#define Swap(a,b) if(1){PQkey *tmp = *a; *a = *b; *b = tmp;} else /* really tessPqSortInit */ int pqInit( TESSalloc* alloc, PriorityQ *pq ) @@ -382,9 +382,9 @@ int pqInit( TESSalloc* alloc, PriorityQ *pq ) do { do { ++i; } while( GT( **i, *piv )); do { --j; } while( LT( **j, *piv )); - Swap( i, j ); + Swap( i, j ) {}; } while( i < j ); - Swap( i, j ); /* Undo last swap */ + Swap( i, j ) {}; /* Undo last swap */ if( i - p < r - j ) { top->p = j+1; top->r = r; ++top; r = i-1; diff --git a/third_party/penumbra/vendor/libtess2/Source/sweep.c b/third_party/penumbra/vendor/libtess2/Source/sweep.c index 32a56bf4060..5b901ec786f 100755 --- a/third_party/penumbra/vendor/libtess2/Source/sweep.c +++ b/third_party/penumbra/vendor/libtess2/Source/sweep.c @@ -263,7 +263,7 @@ static void FinishRegion( TESStesselator *tess, ActiveRegion *reg ) TESShalfEdge *e = reg->eUp; TESSface *f = e->Lface; - f->inside = reg->inside; + f->inside = (char)reg->inside; f->anEdge = e; /* optimization for tessMeshTessellateMonoRegion() */ DeleteRegion( tess, reg ); } @@ -538,7 +538,7 @@ static int CheckForLeftSplice( TESStesselator *tess, ActiveRegion *regUp ) e = tessMeshSplitEdge( tess->mesh, eUp ); if (e == NULL) longjmp(tess->env,1); if ( !tessMeshSplice( tess->mesh, eLo->Sym, e ) ) longjmp(tess->env,1); - e->Lface->inside = regUp->inside; + e->Lface->inside = (char)regUp->inside; } else { if( EdgeSign( eLo->Dst, eUp->Dst, eLo->Org ) > 0 ) return FALSE; @@ -547,7 +547,7 @@ static int CheckForLeftSplice( TESStesselator *tess, ActiveRegion *regUp ) e = tessMeshSplitEdge( tess->mesh, eLo ); if (e == NULL) longjmp(tess->env,1); if ( !tessMeshSplice( tess->mesh, eUp->Lnext, eLo->Sym ) ) longjmp(tess->env,1); - e->Rface->inside = regUp->inside; + e->Rface->inside = (char)regUp->inside; } return TRUE; } @@ -1135,7 +1135,9 @@ static void InitEdgeDict( TESStesselator *tess ) static void DoneEdgeDict( TESStesselator *tess ) { ActiveRegion *reg; +#ifndef NDEBUG int fixedEdges = 0; +#endif while( (reg = (ActiveRegion *)dictKey( dictMin( tess->dict ))) != NULL ) { /* diff --git a/third_party/penumbra/vendor/libtess2/Source/tess.c b/third_party/penumbra/vendor/libtess2/Source/tess.c index 5f47f8de066..f5e7d755fa5 100755 --- a/third_party/penumbra/vendor/libtess2/Source/tess.c +++ b/third_party/penumbra/vendor/libtess2/Source/tess.c @@ -83,8 +83,8 @@ static void ComputeNormal( TESStesselator *tess, TESSreal norm[3] ) { TESSvertex *v, *v1, *v2; TESSreal c, tLen2, maxLen2; - TESSreal maxVal[3], minVal[3], d1[3], d2[3], tNorm[3]; - TESSvertex *maxVert[3], *minVert[3]; + TESSreal maxVal[3] = {0}, minVal[3] = {0}, d1[3] = {0}, d2[3] = {0}, tNorm[3] = {0}; + TESSvertex *maxVert[3] = {NULL}, *minVert[3] = {NULL}; TESSvertex *vHead = &tess->mesh->vHead; int i; @@ -210,7 +210,7 @@ extern int RandomSweep; void tessProjectPolygon( TESStesselator *tess ) { TESSvertex *v, *vHead = &tess->mesh->vHead; - TESSreal norm[3]; + TESSreal norm[3] = {0}; TESSreal *sUnit, *tUnit; int i, first, computedNormal = FALSE; @@ -380,7 +380,7 @@ int tessMeshTessellateMonoRegion( TESSmesh *mesh, TESSface *face ) */ int tessMeshTessellateInterior( TESSmesh *mesh ) { - TESSface *f, *next; + TESSface *f, *next = {NULL}; /*LINTED*/ for( f = mesh->fHead.next; f != &mesh->fHead; f = next ) { @@ -487,9 +487,9 @@ void tessMeshRefineDelaunay( TESSmesh *mesh, TESSalloc *alloc ) e = stackPop(&stack); e->mark = e->Sym->mark = 0; if (!tesedgeIsLocallyDelaunay(e)) { - TESShalfEdge *edges[4]; + TESShalfEdge *edges[4] = {NULL}; int i; - tessMeshFlipEdge(mesh, e); + tessMeshFlipEdge(e); // for each opposite edge edges[0] = e->Lnext; edges[1] = e->Lprev; @@ -516,7 +516,7 @@ void tessMeshRefineDelaunay( TESSmesh *mesh, TESSalloc *alloc ) */ void tessMeshDiscardExterior( TESSmesh *mesh ) { - TESSface *f, *next; + TESSface *f, *next = {NULL}; /*LINTED*/ for( f = mesh->fHead.next; f != &mesh->fHead; f = next ) { @@ -539,7 +539,7 @@ void tessMeshDiscardExterior( TESSmesh *mesh ) int tessMeshSetWindingNumber( TESSmesh *mesh, int value, int keepOnlyBoundary ) { - TESShalfEdge *e, *eNext; + TESShalfEdge *e, *eNext = {NULL}; for( e = mesh->eHead.next; e != &mesh->eHead; e = eNext ) { eNext = e->next; diff --git a/third_party/penumbra/vendor/libtess2/Source/tess.h b/third_party/penumbra/vendor/libtess2/Source/tess.h index 30fda27bc28..994cef3a92e 100755 --- a/third_party/penumbra/vendor/libtess2/Source/tess.h +++ b/third_party/penumbra/vendor/libtess2/Source/tess.h @@ -46,6 +46,7 @@ extern "C" { //typedef struct TESStesselator TESStesselator; struct TESStesselator { + jmp_buf env; /* place to jump to when memAllocs fail */ /*** state needed for collecting the input data ***/ TESSmesh *mesh; /* stores the input contours, and eventually @@ -83,7 +84,6 @@ struct TESStesselator { TESSalloc alloc; - jmp_buf env; /* place to jump to when memAllocs fail */ }; #ifdef __cplusplus From 0bf6ef5862e84193d86bc55d5eb608f88cf67954 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Fri, 1 Sep 2023 15:11:29 -0600 Subject: [PATCH 091/161] Update use of Penumbra in EnergyPlus source. --- src/EnergyPlus/SolarShading.cc | 77 +++++++++++++++++++++------------- src/EnergyPlus/SolarShading.hh | 12 +++++- 2 files changed, 59 insertions(+), 30 deletions(-) diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index c9eb0f0376f..aa5a9a44835 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -492,18 +492,10 @@ void GetShadowingInput(EnergyPlusData &state) state.dataSysVars->shadingMethod = ShadingMethod::PolygonClipping; state.dataIPShortCut->cAlphaArgs(aNum) = "PolygonClipping"; #else - auto error_callback = [](const int messageType, const std::string &message, void *contextPtr) { - auto *state = reinterpret_cast(contextPtr); - if (messageType == Pumbra::MSG_ERR) { - ShowSevereError(*state, message); - } else if (messageType == Pumbra::MSG_WARN) { - ShowWarningError(*state, message); - } else { // if (messageType == MSG_INFO) - ShowMessage(*state, message); - } - }; - if (Pumbra::Penumbra::isValidContext()) { - state.dataSolarShading->penumbra = std::make_unique(error_callback, &state, pixelRes); + if (Penumbra::Penumbra::is_valid_context()) { + std::shared_ptr penumbra_logger = std::make_shared(); + penumbra_logger->set_message_context(&state); + state.dataSolarShading->penumbra = std::make_unique(pixelRes, penumbra_logger); } else { ShowWarningError(state, "No GPU found (required for PixelCounting)"); ShowContinueError(state, "PolygonClipping will be used instead"); @@ -5271,7 +5263,7 @@ void DetermineShadowingCombinations(EnergyPlusData &state) if (!skipSurface) { // Add surfaces to penumbra... - Pumbra::Polygon poly; + Penumbra::Polygon poly; if (state.dataSurface->Surface(GRSNR).Reveal > 0.0) { Real64 R = state.dataSurface->Surface(GRSNR).Reveal; @@ -5289,7 +5281,7 @@ void DetermineShadowingCombinations(EnergyPlusData &state) vPrev = v[i - 1]; } - Pumbra::Polygon rPoly; // Reveal surface + Penumbra::Polygon rPoly; // Reveal surface rPoly.push_back(v[i].x); rPoly.push_back(v[i].y); rPoly.push_back(v[i].z); @@ -5306,8 +5298,8 @@ void DetermineShadowingCombinations(EnergyPlusData &state) rPoly.push_back(vPrev.y); rPoly.push_back(vPrev.z); - Pumbra::Surface rSurf(rPoly); - state.dataSolarShading->penumbra->addSurface(rSurf); + Penumbra::Surface rSurf(rPoly, fmt::format("{} reveal {}", state.dataSurface->Surface(GRSNR).Name, i)); + state.dataSolarShading->penumbra->add_surface(rSurf); } } else { for (auto const &v : state.dataSurface->Surface(GRSNR).Vertex) { @@ -5316,7 +5308,7 @@ void DetermineShadowingCombinations(EnergyPlusData &state) poly.push_back(v.z); } } - Pumbra::Surface pSurf(poly); + Penumbra::Surface pSurf(poly, state.dataSurface->Surface(GRSNR).Name); // Punch holes for subsurfaces if (state.dataSurface->Surface(GRSNR).BaseSurf == GRSNR) { // Only look for subsurfaces on base surfaces @@ -5325,7 +5317,7 @@ void DetermineShadowingCombinations(EnergyPlusData &state) if (!state.dataSurface->Surface(subSurface).HeatTransSurf) continue; // Skip non heat transfer subsurfaces if (subSurface == GRSNR) continue; // Surface itself cannot be its own subsurface - Pumbra::Polygon subPoly; + Penumbra::Polygon subPoly; if (state.dataSurface->Surface(subSurface).Reveal > 0.0) { Real64 R = state.dataSurface->Surface(subSurface).Reveal; auto &norm = state.dataSurface->Surface(subSurface).NewellSurfaceNormalVector; @@ -5342,10 +5334,10 @@ void DetermineShadowingCombinations(EnergyPlusData &state) } } - pSurf.addHole(subPoly); + pSurf.add_hole(subPoly); } } - state.dataSurface->SurfPenumbraID(GRSNR) = state.dataSolarShading->penumbra->addSurface(pSurf); + state.dataSurface->SurfPenumbraID(GRSNR) = state.dataSolarShading->penumbra->add_surface(pSurf); state.dataSolarShading->penumbraIDs.push_back(state.dataSurface->SurfPenumbraID(GRSNR)); } } @@ -5618,8 +5610,8 @@ void DetermineShadowingCombinations(EnergyPlusData &state) CastingSurface.deallocate(); #ifndef EP_NO_OPENGL - if (state.dataSolarShading->penumbra && state.dataSolarShading->penumbra->getNumSurfaces() > 0) { - state.dataSolarShading->penumbra->setModel(); + if (state.dataSolarShading->penumbra && state.dataSolarShading->penumbra->get_number_of_surfaces() > 0) { + state.dataSolarShading->penumbra->set_model(); } #endif } @@ -5681,8 +5673,8 @@ void SHADOW(EnergyPlusData &state, if (state.dataSolarShading->penumbra) { Real64 ElevSun = Constant::PiOvr2 - std::acos(state.dataSolarShading->SUNCOS(3)); Real64 AzimSun = std::atan2(state.dataSolarShading->SUNCOS(1), state.dataSolarShading->SUNCOS(2)); - state.dataSolarShading->penumbra->setSunPosition(AzimSun, ElevSun); - state.dataSolarShading->penumbra->submitPSSA(); + state.dataSolarShading->penumbra->set_sun_position(AzimSun, ElevSun); + state.dataSolarShading->penumbra->submit_pssa(); } #endif @@ -5718,7 +5710,7 @@ void SHADOW(EnergyPlusData &state, if (state.dataSolarShading->penumbra && id >= 0) { // SurfSunlitArea(HTS) = buildingPSSF.at(id) / SurfSunCosTheta(HTS); state.dataSolarShading->SurfSunlitArea(HTS) = - state.dataSolarShading->penumbra->fetchPSSA(id) / state.dataSolarShading->SurfSunCosTheta(HTS); + state.dataSolarShading->penumbra->retrieve_pssa(id) / state.dataSolarShading->SurfSunCosTheta(HTS); // SurfSunlitArea(HTS) = penumbra->fetchPSSA(Surface(HTS).PenumbraID)/SurfSunCosTheta(HTS); for (int SS = 1; SS <= NSBS; ++SS) { int HTSS = state.dataShadowComb->ShadowComb(HTS).SubSurf(SS); @@ -5726,7 +5718,7 @@ void SHADOW(EnergyPlusData &state, if (id >= 0) { // SurfSunlitArea(HTSS) = buildingPSSF.at(id) / SurfSunCosTheta(HTSS); state.dataSolarShading->SurfSunlitArea(HTSS) = - state.dataSolarShading->penumbra->fetchPSSA(id) / state.dataSolarShading->SurfSunCosTheta(HTSS); + state.dataSolarShading->penumbra->retrieve_pssa(id) / state.dataSolarShading->SurfSunCosTheta(HTSS); // SurfSunlitArea(HTSS) = penumbra->fetchPSSA(Surface(HTSS).PenumbraID)/SurfSunCosTheta(HTSS); if (state.dataSolarShading->SurfSunlitArea(HTSS) > 0.0) { if (iHour > 0 && TS > 0) @@ -6269,7 +6261,7 @@ void CalcInteriorSolarOverlaps(EnergyPlusData &state, if (!UseSimpleDistribution) { // Compute overlaps - std::map pssas; + std::unordered_map pssas; #ifndef EP_NO_OPENGL if (state.dataSolarShading->penumbra) { @@ -6281,8 +6273,9 @@ void CalcInteriorSolarOverlaps(EnergyPlusData &state, pbBackSurfaces.push_back(state.dataSurface->SurfPenumbraID(bkSurfNum)); } } - pssas = state.dataSolarShading->penumbra->calculateInteriorPSSAs({(unsigned)state.dataSurface->SurfPenumbraID(HTSS)}, pbBackSurfaces); - // penumbra->renderInteriorScene({(unsigned)Surface(HTSS).PenumbraID}, pbBackSurfaces); + pssas = + state.dataSolarShading->penumbra->calculate_interior_pssas({(unsigned)state.dataSurface->SurfPenumbraID(HTSS)}, pbBackSurfaces); + // penumbra->render_interior_scene({(unsigned)Surface(HTSS).PenumbraID}, pbBackSurfaces); JBKS = 0; for (int bkSurfNum : state.dataShadowComb->ShadowComb(GRSNR).BackSurf) { @@ -12925,3 +12918,29 @@ void TimestepInitComplexFenestration(EnergyPlusData &state) } } // namespace EnergyPlus::SolarShading + +namespace EnergyPlus { + +void EnergyPlusLogger::error(const std::string_view message) +{ + auto *state = reinterpret_cast(message_context); + std::string message_string(message); + ShowSevereError(*state, message_string); +} +void EnergyPlusLogger::warning(const std::string_view message) +{ + auto *state = reinterpret_cast(message_context); + std::string message_string(message); + ShowWarningError(*state, message_string); +} +void EnergyPlusLogger::info(const std::string_view message) +{ + auto *state = reinterpret_cast(message_context); + std::string message_string(message); + ShowMessage(*state, message_string); +} +void EnergyPlusLogger::debug(const std::string_view message) +{ + info(message); +} +} // namespace EnergyPlus diff --git a/src/EnergyPlus/SolarShading.hh b/src/EnergyPlus/SolarShading.hh index 0d0bd6ca9b0..6d98ecfd325 100644 --- a/src/EnergyPlus/SolarShading.hh +++ b/src/EnergyPlus/SolarShading.hh @@ -430,7 +430,7 @@ struct SolarShadingData : BaseGlobalStruct #ifdef EP_NO_OPENGL bool penumbra = false; #else - std::unique_ptr penumbra = nullptr; + std::unique_ptr penumbra = nullptr; #endif bool GetInputFlag = true; @@ -642,6 +642,16 @@ struct SolarShadingData : BaseGlobalStruct { } }; + +class EnergyPlusLogger : public Courierr::Courierr +{ +public: + void error(const std::string_view message) override; + void warning(const std::string_view message) override; + void info(const std::string_view message) override; + void debug(const std::string_view message) override; +}; + } // namespace EnergyPlus #endif From 76c8113f2bde215311f35bd5a6bef7d6df494e93 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 1 Sep 2023 17:31:09 -0600 Subject: [PATCH 092/161] Fix typos in warnings, and other misc typos. --- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 32 +++++++++---------- src/EnergyPlus/UnitarySystem.cc | 32 +++++++++---------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index ba032fcffe2..9f8dd4e8f54 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -3921,7 +3921,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) // If defrost is disabled in the VRF condenser, it must be disabled in the DX coil // Defrost primarily handled in parent object, set defrost capacity to 1 to avoid autosizing. // Defrost capacity is used for nothing more than setting defrost power/consumption report - // variables which are not reported. The coil's defrost algorythm IS used to derate the coil + // variables which are not reported. The coil's defrost algorithm IS used to derate the coil SetDXCoolingCoilData(state, thisVrfTU.HeatCoilIndex, ErrorsFound, @@ -4156,7 +4156,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) // If defrost is disabled in the VRF condenser, it must be disabled in the DX coil // Defrost primarily handled in parent object, set defrost capacity to 1 to avoid autosizing. // Defrost capacity is used for nothing more than setting defrost power/consumption report - // variables which are not reported. The coil's defrost algorythm IS used to derate the coil + // variables which are not reported. The coil's defrost algorithm IS used to derate the coil SetDXCoolingCoilData(state, thisVrfTU.HeatCoilIndex, ErrorsFound, @@ -4220,7 +4220,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) _, state.dataHVACVarRefFlow->VRF(thisVrfTU.VRFSysNum).HeatingCapacitySizeRatio); } - // Check VRF DX heating coil heating capacity as a fuction of temperature performance curve. Only report here for + // Check VRF DX heating coil heating capacity as a function of temperature performance curve. Only report here for // biquadratic curve type. if (thisVrfTU.VRFSysNum > 0 && thisVrfTU.HeatCoilIndex > 0 && state.dataCurveManager->PerfCurve(GetDXCoilCapFTCurveIndex(state, thisVrfTU.HeatCoilIndex, ErrorsFound))->numDims == 2) { @@ -4543,7 +4543,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) ShowWarningError(state, cCurrentModuleObject + " = " + thisVrfTU.Name + " with Fan:SystemModel is used in " + cAlphaArgs(8) + "\""); ShowContinueError(state, format("...The number of speed = {:.0R}.", double(NumSpeeds))); - ShowContinueError(state, "...Multiple speed fan will be appiled to this unit. The speed number is determined by load."); + ShowContinueError(state, "...Multiple speed fan will be applied to this unit. The speed number is determined by load."); } } } @@ -9790,7 +9790,7 @@ void VRFTerminalUnitEquipment::CalcVRF(EnergyPlusData &state, } } - Real64 LatentLoadMet = 0.0; // latent load deleivered [kgWater/s] + Real64 LatentLoadMet = 0.0; // latent load delivered [kgWater/s] Real64 TempOut = 0.0; Real64 TempIn = 0.0; if (this->ATMixerExists) { @@ -9970,7 +9970,7 @@ void ReportVRFTerminalUnit(EnergyPlusData &state, int const VRFTUNum) // index t TempOut = state.dataLoopNodes->Node(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).VRFTUOutletNodeNum).Temp; TempIn = state.dataLoopNodes->Node(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).VRFTUInletNodeNum).Temp; } - // latent heat vaporization/condensation used in moist air psychometrics + // latent heat vaporization/condensation used in moist air psychrometrics Real64 const H2OHtOfVap = PsyHgAirFnWTdb(0.0, TempOut); // convert latent in kg/s to watts TotalConditioning = SensibleConditioning + (LatentConditioning * H2OHtOfVap); @@ -10994,7 +10994,7 @@ void getVRFTUZoneLoad( if (InitFlag) { // this will need more investigation. Using Remaining* variable during the initial load calculation seems wrong. // This may also have implications when VRF TUs are in the air loop or if SP control is used - // another question is whether initialization of the opeating mode should look at TotalOutputRequired or RemainingOutputRequired + // another question is whether initialization of the operating mode should look at TotalOutputRequired or RemainingOutputRequired zoneLoad = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).ZoneNum).RemainingOutputRequired / state.dataHVACVarRefFlow->VRFTU(VRFTUNum).controlZoneMassFlowFrac; LoadToCoolingSP = @@ -12804,7 +12804,7 @@ void VRFTerminalUnitEquipment::ControlVRF_FluidTCtrl(EnergyPlusData &state, auto f = [&state, VRFTUNum, FirstHVACIteration, QZnReq, OnOffAirFlowRatio](Real64 const PartLoadRatio) { Real64 QZnReqTemp = QZnReq; // denominator representing zone load (W) Real64 ActualOutput; // delivered capacity of VRF terminal unit - Real64 SuppHeatCoilLoad = 0.0; // supplemetal heating coil load (W) + Real64 SuppHeatCoilLoad = 0.0; // supplemental heating coil load (W) bool setPointControlled = state.dataHVACVarRefFlow->VRFTU(VRFTUNum).isSetPointControlled; Real64 nonConstOnOffAirFlowRatio = OnOffAirFlowRatio; @@ -13718,7 +13718,7 @@ void VRFCondenserEquipment::VRFOU_TeModification( // PURPOSE OF THIS SUBROUTINE: // This is part of the low load modification algorithm for the VRF-FluidTCtrl model. It aims - // to find a new Te (Te_update) that can generate a new compressor suction temperature (Tsuction) equalling + // to find a new Te (Te_update) that can generate a new compressor suction temperature (Tsuction) equaling // to the given compressor suction temperature (Te_low). This requires the re-calculate of piping loss. // METHODOLOGY EMPLOYED: @@ -14134,7 +14134,7 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: - // This subroutine simulates the compressor performance at given oprtaional conditions (cooling mode). More specifically, it sepcifies + // This subroutine simulates the compressor performance at given operational conditions (cooling mode). More specifically, it specifies // the compressor speed to provide sufficient evaporative capacity, and calculate the power of the compressor running at the specified // speed. Note that it may be needed to manipulate the operational conditions to further adjust system capacity at low load conditions. // The low load modification logics are different for cooling mode and heating mode. @@ -14288,7 +14288,7 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, // Pipe_Pe_assumed, Pipe_m_ref, Pipe_SH_merged ); { // Initialization of Iteration_Te (Label11) - // i.e., find a new Te (Pipe_Te_assumed) that can generate a new T_suction equalling to SmallLoadTe. + // i.e., find a new Te (Pipe_Te_assumed) that can generate a new T_suction equaling to SmallLoadTe. // This requires the re-calculate of piping loss. NumIteTe = 1; MaxNumIteTe = (this->EvaporatingTemp - SmallLoadTe) / 0.1 + 1; // upper bound and lower bound of Te iterations @@ -14689,7 +14689,7 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, // // PURPOSE OF THIS SUBROUTINE: // Determine the operational mode of the VRF-HR system, given the terminal unit side load conditions. - // Compressor and OU hex performance are analysed for each mode. + // Compressor and OU hex performance are analyzed for each mode. // A number of OU side operational parameters are also calculated here, including: // (1) OU evaporator load Q_c_OU (2) OU condenser load Q_h_OU (3) OU fan energy consumption // (4) OU compressor speed and energy consumption @@ -15462,7 +15462,7 @@ void VRFTerminalUnitEquipment::CalcVRFSuppHeatingCoil(EnergyPlusData &state, state, this->SuppHeatCoilName, FirstHVACIteration, this->SuppHeatCoilIndex, QActual, this->OpMode, PartLoadRatio); if (QActual > SuppHeatCoilLoad) { auto f = [&state, VRFTUNum, FirstHVACIteration, SuppHeatCoilLoad](Real64 const PartLoadFrac) { - Real64 QActual = 0.0; // actual heating load deleivered [W] + Real64 QActual = 0.0; // actual heating load delivered [W] Real64 mdot = state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow * PartLoadFrac; state.dataLoopNodes->Node(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidInletNode).MassFlowRate = mdot; WaterCoils::SimulateWaterCoilComponents(state, @@ -15522,7 +15522,7 @@ Real64 VRFTerminalUnitEquipment::HotWaterHeatingCoilResidual(EnergyPlusData &sta // fraction residual to zero. // METHODOLOGY EMPLOYED: - // runs Coil:Heating:Water component object to get the actual heating load deleivered [W] at a + // runs Coil:Heating:Water component object to get the actual heating load delivered [W] at a // given part load ratio and calculates the residual as defined above // Return value @@ -15532,7 +15532,7 @@ Real64 VRFTerminalUnitEquipment::HotWaterHeatingCoilResidual(EnergyPlusData &sta int VRFTUNum = int(Par[1]); // index to current terminal unit simulated bool FirstHVACIteration = Par[2]; // 0 flag if it first HVAC iteration, or else 1 Real64 SuppHeatCoilLoad = Par[3]; // supplemental heating coil load to be met [W] - Real64 QActual = 0.0; // actual heating load deleivered [W] + Real64 QActual = 0.0; // actual heating load delivered [W] // Real64 mdot = min(state.dataLoopNodes->Node(VRFTU(VRFTUNum).SuppHeatCoilFluidOutletNode).MassFlowRateMaxAvail, // VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow * PartLoadFrac); @@ -15570,7 +15570,7 @@ Real64 VRFTerminalUnitEquipment::HeatingCoilCapacityLimit( // ( m_dot_air * Cp_air_avg * DeltaT_air_across_heating_coil) [W] // Return value - Real64 HeatCoilCapacityAllowed; // heating coil maximum capacity that can be deleivered at current time [W] + Real64 HeatCoilCapacityAllowed; // heating coil maximum capacity that can be delivered at current time [W] Real64 MDotAir = state.dataLoopNodes->Node(HeatCoilAirInletNode).MassFlowRate; Real64 CpAirIn = Psychrometrics::PsyCpAirFnW(state.dataLoopNodes->Node(HeatCoilAirInletNode).HumRat); diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index d1eb022ebd2..356fcd1a409 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -1282,8 +1282,8 @@ namespace UnitarySystems { void UnitarySys::frostControlSetPointLimit(EnergyPlusData &state, Real64 &TempSetPoint, // temperature setpoint of the sensor node Real64 &HumRatSetPoint, // humidity ratio setpoint of the sensor node - Real64 const BaroPress, // baromtric pressure, Pa [N/m^2] - Real64 const TfrostControl, // minimum temperature limit for forst control + Real64 const BaroPress, // barometric pressure, Pa [N/m^2] + Real64 const TfrostControl, // minimum temperature limit for frost control int const ControlMode // temperature or humidity control mode ) { @@ -1293,7 +1293,7 @@ namespace UnitarySystems { // DATE WRITTEN January 2013 // PURPOSE OF THIS SUBROUTINE: - // Controls the forst formation condition based on user specified minimum DX coil outlet + // Controls the frost formation condition based on user specified minimum DX coil outlet // air temperature. Resets the cooling setpoint based on the user specified limiting // temperature for frost control. @@ -1353,7 +1353,7 @@ namespace UnitarySystems { // DATE WRITTEN February 2013 // PURPOSE OF THIS SUBROUTINE: - // This subroutine is for sizing unitary system components for which nominal cpacities + // This subroutine is for sizing unitary system components for which nominal capacities // and flow rates have not been specified in the input. Coil sizing is preformed in the coil module. // Future modifications will size coils here and "push" this info to the specific coil. @@ -1398,7 +1398,7 @@ namespace UnitarySystems { select_EqSizing = &OASysEqSizing(state.dataSize->CurOASysNum); } else if (state.dataSize->CurSysNum > 0) { select_EqSizing = &state.dataSize->UnitarySysEqSizing(state.dataSize->CurSysNum); - // this was reseting data set by OutdoorAirUnit when UnitarySystem is child + // this was resetting data set by OutdoorAirUnit when UnitarySystem is child // question is then who resets these (#8751 temporary fix)? // move here for now and only reset UnitarySystem flags, then find better way to do this select_EqSizing->AirFlow = false; @@ -1558,7 +1558,7 @@ namespace UnitarySystems { if (!this->m_HeatCoilExists) state.dataSize->ZoneCoolingOnlyFan = true; TempSize = this->m_MaxCoolAirVolFlow; SaveCurDuctType = state.dataSize->CurDuctType; - // might want to rethink this method. Tries to find the larger of cooling or heating capcity + // might want to rethink this method. Tries to find the larger of cooling or heating capacity // however, if there is no heating coil the cooling air flow rate is used, not the main flow rate // this is fine if there are no other systems on the branch. CoilSystem does not do this (#8761). if (this->m_sysType == SysType::Unitary) state.dataSize->CurDuctType = DataHVACGlobals::AirDuctType::Cooling; @@ -2549,7 +2549,7 @@ namespace UnitarySystems { } } - // TODO: Determine operating mode based on dehumdification stuff, using normalMode for now + // TODO: Determine operating mode based on dehumidification stuff, using normalMode for now if (this->m_NumOfSpeedCooling != (int)newCoil.performance.normalMode.speeds.size()) { ShowWarningError(state, format("{}: {} = {}", RoutineName, CompType, CompName)); ShowContinueError(state, "Number of cooling speeds does not match coil object."); @@ -2688,7 +2688,7 @@ namespace UnitarySystems { DXCoils::SimDXCoilMultiSpeed(state, blankString, 1.0, 1.0, this->m_CoolingCoilIndex, 0, 0, DataHVACGlobals::CompressorOperation::Off); if (!HardSizeNoDesRun && EqSizing.Capacity) { // do nothing, the vars EqSizing.DesCoolingLoad and DataSizing::DXCoolCap are already set earlier and the values could be max of the - // cooling and heating autosized values. Thus reseting them here to user specified value may not be the design size used else where + // cooling and heating autosized values. Thus resetting them here to user specified value may not be the design size used else where } else { state.dataSize->DXCoolCap = DXCoils::GetCoilCapacityByIndexType(state, this->m_CoolingCoilIndex, this->m_CoolingCoilType_Num, ErrFound); @@ -4054,7 +4054,7 @@ namespace UnitarySystems { } if (!AirLoopFound && !ZoneEquipmentFound && !OASysFound) { - // Unsucessful attempt to get all input data. + // Unsuccessful attempt to get all input data. return; } else if (ZoneEquipmentFound || OASysFound || (AirLoopFound && (this->m_ZoneInletNode > 0 || this->m_ControlType == UnitarySysCtrlType::Setpoint))) { @@ -5540,7 +5540,7 @@ namespace UnitarySystems { } // Users may not provide SA flow input fields (below) and leave them blank. Check if other coil is AutoSized first to - // alieviate input requirements. check if coil has no air flow input (VolFlow = 0) and other coil isDataSizing::AutoSized. If so, + // alleviate input requirements. check if coil has no air flow input (VolFlow = 0) and other coil isDataSizing::AutoSized. If so, // use AutoSize for coil with 0 air flow rate. This means that the coils MUST mine the air flow rate if it exists if (this->m_CoolCoilExists && this->m_HeatCoilExists) { if (this->m_MaxCoolAirVolFlow == DataSizing::AutoSize && this->m_MaxHeatAirVolFlow == 0 && loc_m_HeatingSAFMethod == "") { @@ -6448,7 +6448,7 @@ namespace UnitarySystems { // UnitarySystem has a single field for max outlet temp this->DesignMaxOutletTemp = input_data.maximum_supply_air_temperature; } else { - // PTHP has a field for max outlet temp for supplmental heater and max outlet temp for SZVAV + // PTHP has a field for max outlet temp for supplemental heater and max outlet temp for SZVAV if (this->m_ControlType == UnitarySysCtrlType::CCMASHRAE) { this->DesignMaxOutletTemp = input_data.maximum_supply_air_temperature; } else { @@ -6839,7 +6839,7 @@ namespace UnitarySystems { cCurrentModuleObject + " = " + this->Name + " with Fan:SystemModel is used in " + this->input_specs.supply_fan_name + "\""); ShowContinueError(state, format("...The number of speed = {:.0R}.", double(NumSpeeds))); - ShowContinueError(state, "...Multiple speed fan will be appiled to this unit. The speed number is determined by load."); + ShowContinueError(state, "...Multiple speed fan will be applied to this unit. The speed number is determined by load."); } } } @@ -15228,7 +15228,7 @@ namespace UnitarySystems { void UnitarySys::simMultiSpeedCoils(EnergyPlusData &state, int const AirLoopNum, // Index to air loop bool const FirstHVACIteration, // True when first HVAC iteration - DataHVACGlobals::CompressorOperation &CompressorOn, // compresor on/off control + DataHVACGlobals::CompressorOperation &CompressorOn, // compressor on/off control bool const SensibleLoad, bool const LatentLoad, Real64 const PartLoadFrac, @@ -16210,7 +16210,7 @@ namespace UnitarySystems { // DX Coil output depends on the compressor speed which is being varied to zero the residual. // METHODOLOGY EMPLOYED: - // Calls calc routine sof multi speed or variable speed coils to get outlet humidity ratio at the given compressor speed + // Calls calc routines of multi speed or variable speed coils to get outlet humidity ratio at the given compressor speed // and calculates the residual as defined above // FUNCTION LOCAL VARIABLE DECLARATIONS: @@ -17876,7 +17876,7 @@ namespace UnitarySystems { state.dataUnitarySystems->setupOutputOnce = false; } else { ShowSevereError(state, - "setupAllOutputVar: Developer error. Should never get here. Remove when confortable that UnitarySys::allocateUnitarySys " + "setupAllOutputVar: Developer error. Should never get here. Remove when comfortable that UnitarySys::allocateUnitarySys " "is working as expected."); ShowFatalError(state, "setupAllOutputVar: Developer error. Conflict in number of UnitarySystems."); } @@ -17943,7 +17943,7 @@ namespace UnitarySystems { highSpeedEconMassFlowRate, highSpeedEconMassFlowRate / this->m_CoolMassFlowRate[this->m_NumOfSpeedCooling]); econClgOutput = cpAir * highSpeedEconMassFlowRate * (zoneTemp - (outdoorAirTemp + highSpeedFanDT)); - // check if economizer alone can meet the load, or if we have reached the maximumm cooling speed + // check if economizer alone can meet the load, or if we have reached the maximum cooling speed if (econClgOutput > std::abs(zoneLoad) || clgSpd == this->m_NumOfSpeedCooling) { // low speed economizer operation is handled through normal process (i.e., no staging operation) if (clgSpd > 1) { From 7fe6676db345e8fc8dae108e2564eac0feeffc35 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 5 Sep 2023 12:19:09 -0600 Subject: [PATCH 093/161] Update penumbra unit test. --- tst/EnergyPlus/unit/SolarShading.unit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index e1c5f293b9e..8d9634acf9c 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3889,7 +3889,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #else - if (!Pumbra::Penumbra::isValidContext()) { + if (!Penumbra::Penumbra::is_valid_context()) { EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); From b030f530a9161375397e03faa526983d9c1fd28b Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Tue, 5 Sep 2023 12:24:01 -0600 Subject: [PATCH 094/161] Update to latest penumbra changes. --- third_party/penumbra/src/gl/context.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/penumbra/src/gl/context.cpp b/third_party/penumbra/src/gl/context.cpp index 9fe66dbe833..9eac598a15d 100644 --- a/third_party/penumbra/src/gl/context.cpp +++ b/third_party/penumbra/src/gl/context.cpp @@ -544,7 +544,7 @@ std::vector Context::retrieve_pssas(const std::vector &surf std::vector pssas; pssas.reserve(surface_indices.size()); for (const unsigned int surface_index : surface_indices) { - pssas.emplace_back(retrieve_pssa(surface_index)); + pssas.push_back(retrieve_pssa(surface_index)); } return pssas; } @@ -553,7 +553,7 @@ std::vector Context::retrieve_pssa() { std::vector pssas; pssas.reserve(model.surface_buffers.size()); for (auto const &surface_buffer : model.surface_buffers) { - pssas.emplace_back(retrieve_pssa(surface_buffer.index)); + pssas.push_back(retrieve_pssa(surface_buffer.index)); } return pssas; } From 4bb2b85237950ad06c52207df5322a6087855ef7 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 5 Sep 2023 14:19:10 -0400 Subject: [PATCH 095/161] Added flag for calculating Leakage Flow Rate --- src/EnergyPlus/DataDefineEquip.hh | 2 ++ src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/DataDefineEquip.hh b/src/EnergyPlus/DataDefineEquip.hh index 05d5a3c6423..01a4c61f259 100644 --- a/src/EnergyPlus/DataDefineEquip.hh +++ b/src/EnergyPlus/DataDefineEquip.hh @@ -129,6 +129,8 @@ namespace DataDefineEquip { Real64 HeatGain = 0.0; // [J] Real64 CoolGain = 0.0; // [J] bool EachOnceFlag = true; + bool IsConstLeakageRate = + false; // if true, the leakage rate is fraction of the ADU maxiumum flow rate else it is fraction of the maxiumum available flow // Default Constructor ZoneAirEquip() diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index a1cb22612e6..a00b50351a0 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -333,18 +333,22 @@ namespace ZoneAirLoopEquipmentManager { "AirTerminal:SingleDuct:VAV:Reheat")) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat; + state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:NoReheat")) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat; + state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat")) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat; + state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat")) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat; + state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:SeriesPIU:Reheat")) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = @@ -689,8 +693,14 @@ namespace ZoneAirLoopEquipmentManager { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; - MassFlowRateUpStreamLeakMax = - max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); + if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate) { + MassFlowRateUpStreamLeakMax = + max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); + } else { + MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * + state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax, + 0.0); + } if (MassFlowRateMaxAvail > MassFlowRateUpStreamLeakMax) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail = MassFlowRateMaxAvail - MassFlowRateUpStreamLeakMax; From 8777d422f6d8c7559a975c32dcf6b68d31c07899 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 5 Sep 2023 15:25:50 -0400 Subject: [PATCH 096/161] Clang format fix --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index a00b50351a0..639dfa632eb 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -677,7 +677,7 @@ namespace ZoneAirLoopEquipmentManager { Real64 MassFlowRateMinAvail; // min avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateUpStreamLeakMax; // max upstream leak flow rate [kg/s] Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) - Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) + Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) ProvideSysOutput = true; for (AirDistCompNum = 1; AirDistCompNum <= state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).NumComponents; ++AirDistCompNum) { From 90da4655c7f6e60f09c61238c7a8c5080d7c9ddd Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 5 Sep 2023 15:29:35 -0400 Subject: [PATCH 097/161] Corrected the logic of new flag var use --- src/EnergyPlus/DataDefineEquip.hh | 3 +-- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/DataDefineEquip.hh b/src/EnergyPlus/DataDefineEquip.hh index 01a4c61f259..dc7f690cc5f 100644 --- a/src/EnergyPlus/DataDefineEquip.hh +++ b/src/EnergyPlus/DataDefineEquip.hh @@ -129,8 +129,7 @@ namespace DataDefineEquip { Real64 HeatGain = 0.0; // [J] Real64 CoolGain = 0.0; // [J] bool EachOnceFlag = true; - bool IsConstLeakageRate = - false; // if true, the leakage rate is fraction of the ADU maxiumum flow rate else it is fraction of the maxiumum available flow + bool IsConstLeakageRate = false; // if true, constant leakage rate, if false proportional leakage rate will be calculated // Default Constructor ZoneAirEquip() diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 639dfa632eb..f9962da0b0d 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -692,14 +692,13 @@ namespace ZoneAirLoopEquipmentManager { if (InNodeNum > 0) { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate) { - MassFlowRateUpStreamLeakMax = - max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); - } else { MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax, 0.0); + } else { + MassFlowRateUpStreamLeakMax = + max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); } if (MassFlowRateMaxAvail > MassFlowRateUpStreamLeakMax) { state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; From d6fd96cebad973d5a23780e10e0599be592de02f Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Thu, 7 Sep 2023 08:50:50 -0400 Subject: [PATCH 098/161] Reverted changes for VAV air terminals --- src/EnergyPlus/DataAirLoop.hh | 39 ++++++++++--------- src/EnergyPlus/SimAirServingZones.cc | 12 ++++++ src/EnergyPlus/SimAirServingZones.hh | 22 ++++++----- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 10 ++++- 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/EnergyPlus/DataAirLoop.hh b/src/EnergyPlus/DataAirLoop.hh index 2b49d996f33..760ee2b2874 100644 --- a/src/EnergyPlus/DataAirLoop.hh +++ b/src/EnergyPlus/DataAirLoop.hh @@ -161,25 +161,26 @@ namespace DataAirLoop { struct AirLoopFlowData // Derived type for air loop flow information { // Members - Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] - Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) - Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager - Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] - Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] - Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step - Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] - Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] - Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] - Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust - Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] - Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] - Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] - Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] - Real64 FanPLR = 1.0; // Operating PLR of air loop fan - Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate - Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] - bool FlowError = false; // error flag for flow error message - Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum + Real64 DesSupply = 0.0; // design supply air mass flow rate for loop [kg/s] + Real64 DesReturnFrac = 1.0; // the design return flow rate as a fraction of supply flow assuming no exhaust (0 to 1) + Real64 SysToZoneDesFlowRatio = 0.0; // System design flow divided by the sum of the zone design flows + Real64 ReqSupplyFrac = 1.0; // required flow (as a fraction of DesSupply) set by a manager + Real64 MinOutAir = 0.0; // minimum outside air mass flow rate [kg/s] + Real64 MaxOutAir = 0.0; // current maximum available outside air mass flow rate [kg/s] + Real64 OAMinFrac = 0.0; // minimum outside air flow fraction this time step + Real64 Previous = 0.0; // Previous mass air flow rate for this loop [kg/s] + Real64 SupFlow = 0.0; // supply air flow rate (includes LeakFlow) [kg/s] + Real64 ZoneRetFlow = 0.0; // return air flow rate at all zone return air nodes (includes RecircFlow, excludes LeakFlow) [kg/s] + Real64 ZoneRetFlowRatio = 1.0; // ratio for adjusting zone return flows for excess zone exhaust + Real64 SysRetFlow = 0.0; // return air flow rate back to central return (excludes RecircFlow, includes LeakFlow) [kg/s] + Real64 RecircFlow = 0.0; // sum of zone plenum recirculated flows [kg/s] + Real64 LeakFlow = 0.0; // sum of air distribution leak flows to return plenum [kg/s] + Real64 ExcessZoneExhFlow = 0.0; // excess zone exhuast flows made up by reduced return flow in other zones on same airloop [kg/s] + Real64 FanPLR = 1.0; // Operating PLR of air loop fan + Real64 OAFrac = 0.0; // fraction of outside air to mixed air mass flow rate + Real64 OAFlow = 0.0; // oa flow rate this time step [kg/s] + bool FlowError = false; // error flag for flow error message + Real64 BypassMassFlow = 0.0; // air loop bypass mass flow NOT entering splitter but included in mixer or plenum }; enum class ControllerKind diff --git a/src/EnergyPlus/SimAirServingZones.cc b/src/EnergyPlus/SimAirServingZones.cc index cc7d6dbde08..51b4b832b28 100644 --- a/src/EnergyPlus/SimAirServingZones.cc +++ b/src/EnergyPlus/SimAirServingZones.cc @@ -2087,8 +2087,20 @@ void InitAirLoops(EnergyPlusData &state, bool const FirstHVACIteration) // TRUE // calculate the ratio of air loop design flow to the sum of the zone design flows for (int AirLoopNum = 1; AirLoopNum <= numPrimaryAirSys; ++AirLoopNum) { auto &thisPrimaryAirSys = state.dataAirSystemsData->PrimaryAirSystems(AirLoopNum); + auto &thisAirToZoneNodeInfo = state.dataAirLoop->AirToZoneNodeInfo(AirLoopNum); + state.dataSimAirServingZones->SumZoneDesFlow = 0.0; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply = thisPrimaryAirSys.DesignVolFlowRate * state.dataEnvrn->StdRhoAir; state.dataAirLoop->AirLoopFlow(AirLoopNum).DesReturnFrac = thisPrimaryAirSys.DesignReturnFlowFraction; + for (int ZoneInSysIndex = 1; ZoneInSysIndex <= thisAirToZoneNodeInfo.NumZonesCooled; ++ZoneInSysIndex) { + state.dataSimAirServingZones->TUInNode = thisAirToZoneNodeInfo.TermUnitCoolInletNodes(ZoneInSysIndex); + state.dataSimAirServingZones->SumZoneDesFlow += state.dataLoopNodes->Node(state.dataSimAirServingZones->TUInNode).MassFlowRateMax; + } + if (state.dataSimAirServingZones->SumZoneDesFlow > VerySmallMassFlow) { + state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = + state.dataAirLoop->AirLoopFlow(AirLoopNum).DesSupply / state.dataSimAirServingZones->SumZoneDesFlow; + } else { + state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio = 1.0; + } } for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { diff --git a/src/EnergyPlus/SimAirServingZones.hh b/src/EnergyPlus/SimAirServingZones.hh index cd0e8faaca5..3a476f92b3e 100644 --- a/src/EnergyPlus/SimAirServingZones.hh +++ b/src/EnergyPlus/SimAirServingZones.hh @@ -236,8 +236,9 @@ struct SimAirServingZonesData : BaseGlobalStruct Real64 Vou = 0.0; // Uncorrected outdoor air intake for all zones per ASHRAE std 62.1 Real64 Vot = 0.0; // Required outdoor air intake at primary AHU per ASHRAE std 62.1 - int TUInNode = 0; // inlet node number of a terminal unit - Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s + int TUInNode = 0; // inlet node number of a terminal unit + Real64 SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system + Real64 OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s Real64 MassFlowSetToler; int salIterMax = 0; // Maximum of iteration counters across all air loops int salIterTot = 0; // Aggregated number of iterations across all air loops @@ -303,14 +304,15 @@ struct SimAirServingZonesData : BaseGlobalStruct this->Vou = 0.0; this->Vot = 0.0; - this->TUInNode = 0; // inlet node number of a terminal unit - this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s - this->salIterMax = 0; // Maximum of iteration counters across all air loops - this->salIterTot = 0; // Aggregated number of iterations across all air loops - this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops - this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop - this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop - this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations + this->TUInNode = 0; // inlet node number of a terminal unit + this->SumZoneDesFlow = 0.0; // sum of the zone design air mass flow rates for zones served by a system + this->OAReliefDiff = 0.0; // local for massflow change across OA system, kg/s + this->salIterMax = 0; // Maximum of iteration counters across all air loops + this->salIterTot = 0; // Aggregated number of iterations across all air loops + this->NumCallsTot = 0; // Aggregated number fo times SimAirLoopComponents() has been invoked across all air loops + this->IterMaxSAL2 = 0; // Maximum number of iterations performed by each controller on this air loop + this->IterTotSAL2 = 0; // Aggregated number of iterations performed by each controller on this air loop + this->NumCallsSAL2 = 0; // Number of times SimAirLoopComponents() has been invoked per air loop for either Solve or ReSolve operations this->AirLoopConvergedFlagSAL = false; this->DoWarmRestartFlagSAL = false; this->WarmRestartStatusSAL = DataHVACControllers::ControllerWarmRestart::None; diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index f9962da0b0d..615ecf0e3c3 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -673,9 +673,11 @@ namespace ZoneAirLoopEquipmentManager { int AirDistCompNum; int InNodeNum; // air distribution unit inlet node int OutNodeNum; // air distribution unit outlet node + int AirLoopNum(0); // index of air loop Real64 MassFlowRateMaxAvail; // max avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateMinAvail; // min avail mass flow rate excluding leaks [kg/s] Real64 MassFlowRateUpStreamLeakMax; // max upstream leak flow rate [kg/s] + Real64 DesFlowRatio(0.0); // ratio of system to sum of zones design flow rate Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) @@ -693,8 +695,14 @@ namespace ZoneAirLoopEquipmentManager { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate) { + AirLoopNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirLoopNum; + if (AirLoopNum > 0) { + DesFlowRatio = state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio; + } else { + DesFlowRatio = 1.0; + } MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * - state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax, + state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax * DesFlowRatio, 0.0); } else { MassFlowRateUpStreamLeakMax = From 8f2959c72bbaa98bff0795461bf8678df2d8da19 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 7 Sep 2023 09:54:30 -0600 Subject: [PATCH 099/161] Fix sentence [decent_ci_skip] --- .../src/overview/group-condenser-equipment.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/input-output-reference/src/overview/group-condenser-equipment.tex b/doc/input-output-reference/src/overview/group-condenser-equipment.tex index 07457dadedc..2c6495d206c 100644 --- a/doc/input-output-reference/src/overview/group-condenser-equipment.tex +++ b/doc/input-output-reference/src/overview/group-condenser-equipment.tex @@ -3385,7 +3385,7 @@ \subsubsection{Inputs} \paragraph{Field: G-Function Reference Ratio}\label{field-g-function-reference-ratio} -The G-Functions may be formulated slightly differently based on the program which generated them. The original g-functions as defined by Eskilson are based on an borehole radius to active length ratio of 0.0005. If the physical ratio is different from this, a correction must be applied. EnergyPlus will apply the correction, based on the reference ratio entered in this field. Therefore, therefore two possible input configurations. +The G-Functions may be formulated slightly differently based on the program which generated them. The original g-functions as defined by Eskilson are based on an borehole radius to active length ratio of 0.0005. If the physical ratio is different from this, a correction must be applied. EnergyPlus will apply the correction, based on the reference ratio entered in this field. Therefore, there are two possible input configurations. \begin{itemize} \item From 415b095afc5bfaae794a6a31cc15f38cc00dc60a Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 7 Sep 2023 22:28:26 -0600 Subject: [PATCH 100/161] Fix water heater outputs. --- .../src/overview/group-water-heaters.tex | 4 ++-- .../standard-output-reports/output-table-summaryreports.tex | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/input-output-reference/src/overview/group-water-heaters.tex b/doc/input-output-reference/src/overview/group-water-heaters.tex index 01d16a04aac..73d5696bd74 100644 --- a/doc/input-output-reference/src/overview/group-water-heaters.tex +++ b/doc/input-output-reference/src/overview/group-water-heaters.tex @@ -443,7 +443,7 @@ \subsubsection{Outputs}\label{outputs-040} \item HVAC,Average,Water Heater Total Demand Heat Transfer Rate {[}W{]} \item - HVAC,Sum,Water Heater Total Demand Energy {[}J{]} + HVAC,Sum,Water Heater Total Demand Heat Transfer Energy {[}J{]} \item HVAC,Average,Water Heater Heating Rate {[}W{]} \item @@ -562,7 +562,7 @@ \subsubsection{Outputs}\label{outputs-040} The average heating rate demanded to maintain the setpoint temperature. -\paragraph{Water Heater Total Demand Energy {[}J{]}}\label{water-heater-total-demand-energy-j} +\paragraph{Water Heater Total Demand Heat Transfer Energy {[}J{]}}\label{water-heater-total-demand-heat-transfer-energy-j} The heating energy demanded to maintain the setpoint temperature. diff --git a/doc/input-output-reference/src/standard-output-reports/output-table-summaryreports.tex b/doc/input-output-reference/src/standard-output-reports/output-table-summaryreports.tex index 827b146a3a8..e993c30e3f3 100644 --- a/doc/input-output-reference/src/standard-output-reports/output-table-summaryreports.tex +++ b/doc/input-output-reference/src/standard-output-reports/output-table-summaryreports.tex @@ -1406,7 +1406,7 @@ \subsubsection{Predefined Monthly Summary Reports}\label{predefined-monthly-summ \begin{itemize} \item - Water Heater Total Demand Energy (SumOrAverage) + Water Heater Total Demand Heat Transfer Energy (SumOrAverage) \item Water Heater Use Side Heat Transfer Energy (SumOrAverage) \item @@ -1414,7 +1414,7 @@ \subsubsection{Predefined Monthly Summary Reports}\label{predefined-monthly-summ \item Water Heater Gas Consumption (SumOrAverage) \item - Water Heater Total Demand Energy (HoursNonZero) + Water Heater Total Demand Heat Transfer Energy (HoursNonZero) \item Water Heater Loss Demand Energy (SumOrAverage) \item From 92c6d7cefb9847566afacb874c3e4efb63414196 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Thu, 7 Sep 2023 22:44:08 -0600 Subject: [PATCH 101/161] Fix WaterHeaterReportMonthly output fields --- src/EnergyPlus/InputProcessing/InputProcessor.cc | 2 +- src/EnergyPlus/OutputReportTabular.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/InputProcessing/InputProcessor.cc b/src/EnergyPlus/InputProcessing/InputProcessor.cc index d6b437768eb..6016650d5f9 100644 --- a/src/EnergyPlus/InputProcessing/InputProcessor.cc +++ b/src/EnergyPlus/InputProcessing/InputProcessor.cc @@ -2369,7 +2369,7 @@ void InputProcessor::addVariablesForMonthlyReport(EnergyPlusData &state, std::st addRecordToOutputVariableStructure(state, "*", "WATER HEATER HEAT LOSS ENERGY"); addRecordToOutputVariableStructure(state, "*", "WATER HEATER TANK TEMPERATURE"); addRecordToOutputVariableStructure(state, "*", "WATER HEATER HEAT RECOVERY SUPPLY ENERGY"); - addRecordToOutputVariableStructure(state, "*", "WATER HEATER SOURCE ENERGY"); + addRecordToOutputVariableStructure(state, "*", "WATER HEATER SOURCE SIDE HEAT TRANSFER ENERGY"); } else if (reportName == "GENERATORREPORTMONTHLY") { addRecordToOutputVariableStructure(state, "*", "GENERATOR PRODUCED AC ELECTRICITY ENERGY"); diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 0aaadc08999..0bd6c6cfb46 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -2664,7 +2664,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Water Heater Heat Loss Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Water Heater Tank Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Water Heater Heat Recovery Supply Energy", "", AggType::SumOrAvg); - AddMonthlyFieldSetInput(state, curReport, "Water Heater Source Energy", "", AggType::SumOrAvg); + AddMonthlyFieldSetInput(state, curReport, "Water Heater Source Side Heat Transfer Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(51).show) { curReport = AddMonthlyReport(state, "GeneratorReportMonthly", 2); From e56ce5c3f1225a3e6e2aa681801cce66311f12e3 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 10:20:22 +0200 Subject: [PATCH 102/161] Add a unit test for #9621 fails with diff ``` With diff: @@ -1,1 +1,434 @@ - ** Warning ** In Output:Table:Monthly 'SPACE GAINS ANNUAL REPORT' invalid Variable or Meter Name 'NON EXISTANT VARIABLE'\n + ** Warning ** In Output:Table:Monthly 'SPACE GAINS ANNUAL REPORT' invalid Variable or Meter Name 'NON EXISTANT VARIABLE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'ZONE AIR SYSTEM SENSIBLE COOLING ENERGY' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'ZONE AIR SYSTEM SENSIBLE COOLING RATE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'SITE OUTDOOR AIR DRYBULB TEMPERATURE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'SITE OUTDOOR AIR WETBULB TEMPERATURE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'ZONE TOTAL INTERNAL LATENT GAIN ENERGY' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'ZONE TOTAL INTERNAL LATENT GAIN RATE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'SITE OUTDOOR AIR DRYBULB TEMPERATURE' + ** Warning ** In Output:Table:Monthly 'ZoneCoolingSummaryMonthly' invalid Variable or Meter Name 'SITE OUTDOOR AIR WETBULB TEMPERATURE' + ** Warning ** In Output:Table:Monthly 'ZoneHeatingSummaryMonthly' invalid Variable or Meter Name 'ZONE AIR SYSTEM SENSIBLE HEATING ENERGY' [...] ``` --- .../unit/OutputReportTabular.unit.cc | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index 2b222d85238..8c27bd49726 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -7183,10 +7183,7 @@ TEST_F(SQLiteFixture, OutputReportTabular_WriteLoadComponentSummaryTables_AirLoo state->dataSize->SysSizInput.allocate(state->dataSize->NumSysSizInput); state->dataSize->SysSizInput(1).AirLoopNum = 1; state->dataSize->SysSizInput(1).SizingOption = DataSizing::NonCoincident; - auto degC_to_F = [](Real64 celsius) constexpr - { - return celsius * (9.0 / 5.0) + 32.0; - }; + auto degC_to_F = [](Real64 celsius) constexpr { return celsius * (9.0 / 5.0) + 32.0; }; constexpr Real64 coolMixTempSys = 26.2; constexpr Real64 coolMixTempSysIP = degC_to_F(coolMixTempSys); constexpr Real64 heatMixTempSys = -1.7; @@ -12586,3 +12583,52 @@ TEST_F(SQLiteFixture, UpdateSizing_EndSysSizingCalc) Real64 return_val = execAndReturnFirstDouble(query); EXPECT_EQ(return_val, 5080.22); } + +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnOnMissingMonthlyVariable) +{ + // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones + std::string const idf_objects = delimited_string({ + "Output:Table:Monthly,", + " Space Gains Annual Report, !- Name", + " 2, !- Digits After Decimal", + " Exterior Lights Electricity Energy, !- Variable or Meter 1 Name", + " SumOrAverage, !- Aggregation Type for Variable or Meter 1", + " NON EXISTANT VARIABLE, !- Variable or Meter 2 Name", + " Maximum; !- Aggregation Type for Variable or Meter 2", + + "Output:Table:SummaryReports,", + " AllSummaryAndMonthly; !- Report 1 Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + Real64 extLitUse; + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite1", + {}, + "Electricity", + "Exterior Lights", + "General"); + + state->dataGlobal->DoWeathSim = true; + state->dataGlobal->TimeStepZone = 0.25; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + + GetInputTabularMonthly(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); + GetInputOutputTableSummaryReports(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly + 1); + + InitializeTabularMonthly(*state); + + std::string const expected_error = delimited_string({ + " ** Warning ** In Output:Table:Monthly 'SPACE GAINS ANNUAL REPORT' invalid Variable or Meter Name 'NON EXISTANT VARIABLE'", + }); + compare_err_stream(expected_error); +} From 8b3a9e11cba0691a77862bdfbd76682400c03c7d Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 10:27:07 +0200 Subject: [PATCH 103/161] Fix #9621 - Do not issue a warning for Invalid Variable or Meter Name in Monthly table if it's one of the Named Monthly ones --- src/EnergyPlus/OutputReportTabular.cc | 136 +++++++++++++------------- src/EnergyPlus/OutputReportTabular.hh | 20 ++-- 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 0aaadc08999..2327170dc44 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -407,7 +407,7 @@ void GetInputTabularMonthly(EnergyPlusData &state) } } -int AddMonthlyReport(EnergyPlusData &state, std::string const &inReportName, int const inNumDigitsShown) +int AddMonthlyReport(EnergyPlusData &state, std::string const &inReportName, int const inNumDigitsShown, bool isNamedMonthly) { // SUBROUTINE INFORMATION: // AUTHOR Jason Glazer @@ -458,6 +458,7 @@ int AddMonthlyReport(EnergyPlusData &state, std::string const &inReportName, int // initialize new record ort->MonthlyInput(ort->MonthlyInputCount).name = inReportName; ort->MonthlyInput(ort->MonthlyInputCount).showDigits = inNumDigitsShown; + ort->MonthlyInput(ort->MonthlyInputCount).isNamedMonthly = isNamedMonthly; return ort->MonthlyInputCount; } @@ -618,8 +619,11 @@ void InitializeTabularMonthly(EnergyPlusData &state) int KeyCount = 0; GetVariableKeyCountandType(state, curVariMeter, KeyCount, TypeVar, AvgSumVar, StepTypeVar, UnitsVar); if (TypeVar == OutputProcessor::VariableType::NotFound) { - ShowWarningError( - state, format("In Output:Table:Monthly '{}' invalid Variable or Meter Name '{}'", ort->MonthlyInput(TabNum).name, curVariMeter)); + if (!ort->MonthlyInput(TabNum).isNamedMonthly) { + ShowWarningError( + state, + format("In Output:Table:Monthly '{}' invalid Variable or Meter Name '{}'", ort->MonthlyInput(TabNum).name, curVariMeter)); + } } // IF (KeyCount > maxKeyCount) THEN // DEALLOCATE(NamesOfKeys) @@ -2165,7 +2169,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) // ---------------------------------------------------------------------------------------- if (ort->namedMonthly(1).show) { - curReport = AddMonthlyReport(state, "ZoneCoolingSummaryMonthly", 2); + curReport = AddMonthlyReport(state, "ZoneCoolingSummaryMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Air System Sensible Cooling Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Air System Sensible Cooling Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::ValueWhenMaxMin); @@ -2176,20 +2180,20 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(2).show) { - curReport = AddMonthlyReport(state, "ZoneHeatingSummaryMonthly", 2); + curReport = AddMonthlyReport(state, "ZoneHeatingSummaryMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Air System Sensible Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Air System Sensible Heating Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(3).show) { - curReport = AddMonthlyReport(state, "ZoneElectricSummaryMonthly", 2); + curReport = AddMonthlyReport(state, "ZoneElectricSummaryMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Lights Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Lights Electricity Energy", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Zone Electric Equipment Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Electric Equipment Electricity Energy", "", AggType::Maximum); } if (ort->namedMonthly(4).show) { - curReport = AddMonthlyReport(state, "SpaceGainsMonthly", 2); + curReport = AddMonthlyReport(state, "SpaceGainsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone People Total Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Lights Total Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Electric Equipment Total Heating Energy", "", AggType::SumOrAvg); @@ -2201,7 +2205,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Infiltration Sensible Heat Loss Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(5).show) { - curReport = AddMonthlyReport(state, "PeakSpaceGainsMonthly", 2); + curReport = AddMonthlyReport(state, "PeakSpaceGainsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone People Total Heating Energy", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Zone Lights Total Heating Energy", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Zone Electric Equipment Total Heating Energy", "", AggType::Maximum); @@ -2213,7 +2217,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Infiltration Sensible Heat Loss Energy", "", AggType::Maximum); } if (ort->namedMonthly(6).show) { - curReport = AddMonthlyReport(state, "SpaceGainComponentsAtCoolingPeakMonthly", 2); + curReport = AddMonthlyReport(state, "SpaceGainComponentsAtCoolingPeakMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Air System Sensible Cooling Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Zone People Total Heating Energy", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "Zone Lights Total Heating Energy", "", AggType::ValueWhenMaxMin); @@ -2226,21 +2230,21 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Infiltration Sensible Heat Loss Energy", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(7).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionElectricityNaturalGasMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionElectricityNaturalGasMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Electricity:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Electricity:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "NaturalGas:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "NaturalGas:Facility", "", AggType::Maximum); } if (ort->namedMonthly(8).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionElectricityGeneratedPropaneMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionElectricityGeneratedPropaneMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ElectricityProduced:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "ElectricityProduced:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Propane:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Propane:Facility", "", AggType::Maximum); } if (ort->namedMonthly(9).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionDieselFuelOilMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionDieselFuelOilMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Diesel:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Diesel:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "FuelOilNo1:Facility", "", AggType::SumOrAvg); @@ -2249,7 +2253,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "FuelOilNo2:Facility", "", AggType::Maximum); } if (ort->namedMonthly(10).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionDistrictHeatingCoolingMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionDistrictHeatingCoolingMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "DistrictCooling:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "DistrictCooling:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "DistrictHeatingWater:Facility", "", AggType::SumOrAvg); @@ -2258,21 +2262,21 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "DistrictHeatingSteam:Facility", "", AggType::Maximum); } if (ort->namedMonthly(11).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionCoalGasolineMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionCoalGasolineMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Coal:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Coal:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Gasoline:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Gasoline:Facility", "", AggType::Maximum); } if (ort->namedMonthly(12).show) { - curReport = AddMonthlyReport(state, "EnergyConsumptionOtherFuelsMonthly", 2); + curReport = AddMonthlyReport(state, "EnergyConsumptionOtherFuelsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "OtherFuel1:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "OtherFuel1:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "OtherFuel2:Facility", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "OtherFuel2:Facility", "", AggType::Maximum); } if (ort->namedMonthly(13).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionElectricityMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionElectricityMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "InteriorLights:Electricity", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "ExteriorLights:Electricity", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "InteriorEquipment:Electricity", "", AggType::SumOrAvg); @@ -2288,7 +2292,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Electricity", "", AggType::SumOrAvg); } if (ort->namedMonthly(14).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionNaturalGasMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionNaturalGasMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "InteriorEquipment:NaturalGas", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:NaturalGas", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:NaturalGas", "", AggType::SumOrAvg); @@ -2298,7 +2302,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Humidifier:NaturalGas", "", AggType::SumOrAvg); } if (ort->namedMonthly(15).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionDieselMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionDieselMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Diesel", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling:Diesel", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:Diesel", "", AggType::SumOrAvg); @@ -2306,7 +2310,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Diesel", "", AggType::SumOrAvg); } if (ort->namedMonthly(16).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionFuelOilMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionFuelOilMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:FuelOilNo1", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling:FuelOilNo1", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:FuelOilNo1", "", AggType::SumOrAvg); @@ -2319,13 +2323,13 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:FuelOilNo2", "", AggType::SumOrAvg); } if (ort->namedMonthly(17).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionCoalMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionCoalMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Coal", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:Coal", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "WaterSystems:Coal", "", AggType::SumOrAvg); } if (ort->namedMonthly(18).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionPropaneMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionPropaneMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Propane", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling:Propane", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:Propane", "", AggType::SumOrAvg); @@ -2334,7 +2338,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Humidifier:Propane", "", AggType::SumOrAvg); } if (ort->namedMonthly(19).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionGasolineMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionGasolineMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Gasoline", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling:Gasoline", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:Gasoline", "", AggType::SumOrAvg); @@ -2342,7 +2346,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Gasoline", "", AggType::SumOrAvg); } if (ort->namedMonthly(20).show) { - curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionOtherFuelsMonthly", 2); + curReport = AddMonthlyReport(state, "EndUseEnergyConsumptionOtherFuelsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:OtherFuel1", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling:OtherFuel1", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating:OtherFuel1", "", AggType::SumOrAvg); @@ -2355,7 +2359,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:OtherFuel2", "", AggType::SumOrAvg); } if (ort->namedMonthly(21).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseElectricityPart1Monthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseElectricityPart1Monthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "InteriorLights:Electricity", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "ExteriorLights:Electricity", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "InteriorEquipment:Electricity", "", AggType::Maximum); @@ -2365,7 +2369,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Heating:Electricity", "", AggType::Maximum); } if (ort->namedMonthly(22).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseElectricityPart2Monthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseElectricityPart2Monthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Cooling:Electricity", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "HeatRejection:Electricity", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Humidifier:Electricity", "", AggType::Maximum); @@ -2374,7 +2378,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Electricity", "", AggType::Maximum); } if (ort->namedMonthly(23).show) { - curReport = AddMonthlyReport(state, "ElectricComponentsOfPeakDemandMonthly", 2); + curReport = AddMonthlyReport(state, "ElectricComponentsOfPeakDemandMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Electricity:Facility", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "InteriorLights:Electricity", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "InteriorEquipment:Electricity", "", AggType::ValueWhenMaxMin); @@ -2387,7 +2391,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "HeatRejection:Electricity", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(24).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseNaturalGasMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseNaturalGasMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "InteriorEquipment:NaturalGas", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:NaturalGas", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:NaturalGas", "", AggType::Maximum); @@ -2396,7 +2400,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:NaturalGas", "", AggType::Maximum); } if (ort->namedMonthly(25).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseDieselMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseDieselMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Diesel", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling:Diesel", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:Diesel", "", AggType::Maximum); @@ -2404,7 +2408,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Diesel", "", AggType::Maximum); } if (ort->namedMonthly(26).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseFuelOilMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseFuelOilMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:FuelOilNo1", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling:FuelOilNo1", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:FuelOilNo1", "", AggType::Maximum); @@ -2417,13 +2421,13 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:FuelOilNo2", "", AggType::Maximum); } if (ort->namedMonthly(27).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseCoalMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseCoalMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Coal", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:Coal", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "WaterSystems:Coal", "", AggType::Maximum); } if (ort->namedMonthly(28).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUsePropaneMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUsePropaneMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Propane", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling:Propane", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:Propane", "", AggType::Maximum); @@ -2431,7 +2435,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Propane", "", AggType::Maximum); } if (ort->namedMonthly(29).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseGasolineMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseGasolineMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:Gasoline", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling:Gasoline", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:Gasoline", "", AggType::Maximum); @@ -2439,7 +2443,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:Gasoline", "", AggType::Maximum); } if (ort->namedMonthly(30).show) { - curReport = AddMonthlyReport(state, "PeakEnergyEndUseOtherFuelsMonthly", 2); + curReport = AddMonthlyReport(state, "PeakEnergyEndUseOtherFuelsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "ExteriorEquipment:OtherFuel1", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling:OtherFuel1", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Heating:OtherFuel1", "", AggType::Maximum); @@ -2452,7 +2456,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cogeneration:OtherFuel2", "", AggType::Maximum); } if (ort->namedMonthly(31).show) { - curReport = AddMonthlyReport(state, "SetpointsNotMetWithTemperaturesMonthly", 2); + curReport = AddMonthlyReport(state, "SetpointsNotMetWithTemperaturesMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Heating Setpoint Not Met Time", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Zone Mean Air Temperature", "", AggType::SumOrAverageHoursShown); AddMonthlyFieldSetInput(state, curReport, "Zone Heating Setpoint Not Met While Occupied Time", "", AggType::HoursNonZero); @@ -2463,7 +2467,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Mean Air Temperature", "", AggType::SumOrAverageHoursShown); } if (ort->namedMonthly(32).show) { - curReport = AddMonthlyReport(state, "ComfortReportSimple55Monthly", 2); + curReport = AddMonthlyReport(state, "ComfortReportSimple55Monthly", 2, true); AddMonthlyFieldSetInput( state, curReport, "Zone Thermal Comfort ASHRAE 55 Simple Model Summer Clothes Not Comfortable Time", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Zone Mean Air Temperature", "", AggType::SumOrAverageHoursShown); @@ -2475,14 +2479,14 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Mean Air Temperature", "", AggType::SumOrAverageHoursShown); } if (ort->namedMonthly(33).show) { - curReport = AddMonthlyReport(state, "UnglazedTranspiredSolarCollectorSummaryMonthly", 5); + curReport = AddMonthlyReport(state, "UnglazedTranspiredSolarCollectorSummaryMonthly", 5, true); AddMonthlyFieldSetInput(state, curReport, "Solar Collector System Efficiency", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Solar Collector System Efficiency", "", AggType::SumOrAverageHoursShown); AddMonthlyFieldSetInput(state, curReport, "Solar Collector Outside Face Suction Velocity", "", AggType::SumOrAverageHoursShown); AddMonthlyFieldSetInput(state, curReport, "Solar Collector Sensible Heating Rate", "", AggType::SumOrAverageHoursShown); } if (ort->namedMonthly(34).show) { - curReport = AddMonthlyReport(state, "OccupantComfortDataSummaryMonthly", 5); + curReport = AddMonthlyReport(state, "OccupantComfortDataSummaryMonthly", 5, true); AddMonthlyFieldSetInput(state, curReport, "People Occupant Count", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "People Air Temperature", "", AggType::SumOrAverageHoursShown); AddMonthlyFieldSetInput(state, curReport, "People Air Relative Humidity", "", AggType::SumOrAverageHoursShown); @@ -2490,7 +2494,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Thermal Comfort Fanger Model PPD", "", AggType::SumOrAverageHoursShown); } if (ort->namedMonthly(35).show) { - curReport = AddMonthlyReport(state, "ChillerReportMonthly", 2); + curReport = AddMonthlyReport(state, "ChillerReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Chiller Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Chiller Electricity Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Chiller Electricity Energy", "", AggType::HoursNonZero); @@ -2503,7 +2507,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Chiller Part Load Ratio", "", AggType::Maximum); } if (ort->namedMonthly(36).show) { - curReport = AddMonthlyReport(state, "TowerReportMonthly", 2); + curReport = AddMonthlyReport(state, "TowerReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Cooling Tower Fan Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling Tower Fan Electricity Energy", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Cooling Tower Fan Electricity Rate", "", AggType::Maximum); @@ -2513,7 +2517,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cooling Tower Mass Flow Rate", "", AggType::SumOrAvg); } if (ort->namedMonthly(37).show) { - curReport = AddMonthlyReport(state, "BoilerReportMonthly", 2); + curReport = AddMonthlyReport(state, "BoilerReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Boiler Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Boiler Gas Consumption", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Boiler Heating Energy", "", AggType::HoursNonZero); @@ -2527,7 +2531,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Boiler Part Load Ratio", "", AggType::Maximum); } if (ort->namedMonthly(38).show) { - curReport = AddMonthlyReport(state, "DXReportMonthly", 2); + curReport = AddMonthlyReport(state, "DXReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Total Cooling Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Total Cooling Energy", "", AggType::HoursNonZero); @@ -2543,7 +2547,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Crankcase Heater Electricity Rate", "", AggType::Maximum); } if (ort->namedMonthly(39).show) { - curReport = AddMonthlyReport(state, "WindowReportMonthly", 2); + curReport = AddMonthlyReport(state, "WindowReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Solar Radiation Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Beam Solar Radiation Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Diffuse Solar Radiation Rate", "", AggType::SumOrAvg); @@ -2554,7 +2558,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Surface Storm Window On Off Status", "", AggType::HoursNonZero); } if (ort->namedMonthly(40).show) { - curReport = AddMonthlyReport(state, "WindowEnergyReportMonthly", 2); + curReport = AddMonthlyReport(state, "WindowEnergyReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Solar Radiation Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Beam Solar Radiation Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Surface Window Transmitted Diffuse Solar Radiation Energy", "", AggType::SumOrAvg); @@ -2562,7 +2566,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Surface Window Heat Loss Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(41).show) { - curReport = AddMonthlyReport(state, "WindowZoneSummaryMonthly", 2); + curReport = AddMonthlyReport(state, "WindowZoneSummaryMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Heat Gain Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Heat Loss Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Transmitted Solar Radiation Rate", "", AggType::SumOrAvg); @@ -2572,7 +2576,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Interior Windows Total Transmitted Beam Solar Radiation Rate", "", AggType::SumOrAvg); } if (ort->namedMonthly(42).show) { - curReport = AddMonthlyReport(state, "WindowEnergyZoneSummaryMonthly", 2); + curReport = AddMonthlyReport(state, "WindowEnergyZoneSummaryMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Heat Gain Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Heat Loss Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Windows Total Transmitted Solar Radiation Energy", "", AggType::SumOrAvg); @@ -2582,7 +2586,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Interior Windows Total Transmitted Beam Solar Radiation Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(43).show) { - curReport = AddMonthlyReport(state, "AverageOutdoorConditionsMonthly", 2); + curReport = AddMonthlyReport(state, "AverageOutdoorConditionsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Dewpoint Temperature", "", AggType::SumOrAvg); @@ -2593,7 +2597,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Rain Status", "", AggType::SumOrAvg); } if (ort->namedMonthly(44).show) { - curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumDryBulbMonthly", 2); + curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumDryBulbMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Dewpoint Temperature", "", AggType::ValueWhenMaxMin); @@ -2603,7 +2607,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Direct Solar Radiation Rate per Area", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(45).show) { - curReport = AddMonthlyReport(state, "OutdoorConditionsMinimumDryBulbMonthly", 2); + curReport = AddMonthlyReport(state, "OutdoorConditionsMinimumDryBulbMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::Minimum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Dewpoint Temperature", "", AggType::ValueWhenMaxMin); @@ -2613,7 +2617,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Direct Solar Radiation Rate per Area", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(46).show) { - curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumWetBulbMonthly", 2); + curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumWetBulbMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Dewpoint Temperature", "", AggType::ValueWhenMaxMin); @@ -2623,7 +2627,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Direct Solar Radiation Rate per Area", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(47).show) { - curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumDewPointMonthly", 2); + curReport = AddMonthlyReport(state, "OutdoorConditionsMaximumDewPointMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Dewpoint Temperature", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Drybulb Temperature", "", AggType::ValueWhenMaxMin); AddMonthlyFieldSetInput(state, curReport, "Site Outdoor Air Wetbulb Temperature", "", AggType::ValueWhenMaxMin); @@ -2633,7 +2637,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Direct Solar Radiation Rate per Area", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(48).show) { - curReport = AddMonthlyReport(state, "OutdoorGroundConditionsMonthly", 2); + curReport = AddMonthlyReport(state, "OutdoorGroundConditionsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Ground Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Site Surface Ground Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Site Deep Ground Temperature", "", AggType::SumOrAvg); @@ -2642,7 +2646,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Site Snow on Ground Status", "", AggType::SumOrAvg); } if (ort->namedMonthly(49).show) { - curReport = AddMonthlyReport(state, "WindowACReportMonthly", 2); + curReport = AddMonthlyReport(state, "WindowACReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Window Air Conditioner Total Cooling Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Window Air Conditioner Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Window Air Conditioner Total Cooling Energy", "", AggType::HoursNonZero); @@ -2654,7 +2658,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Window Air Conditioner Electricity Rate", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(50).show) { - curReport = AddMonthlyReport(state, "WaterHeaterReportMonthly", 2); + curReport = AddMonthlyReport(state, "WaterHeaterReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Water Heater Total Demand Heat Transfer Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Water Heater Use Side Heat Transfer Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Water Heater Burner Heating Energy", "", AggType::SumOrAvg); @@ -2667,7 +2671,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Water Heater Source Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(51).show) { - curReport = AddMonthlyReport(state, "GeneratorReportMonthly", 2); + curReport = AddMonthlyReport(state, "GeneratorReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Generator Produced AC Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Generator Diesel Consumption", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Generator Gas Consumption", "", AggType::SumOrAvg); @@ -2679,7 +2683,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Generator Exhaust Air Temperature", "", AggType::SumOrAvg); } if (ort->namedMonthly(52).show) { - curReport = AddMonthlyReport(state, "DaylightingReportMonthly", 2); + curReport = AddMonthlyReport(state, "DaylightingReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Site Exterior Beam Normal Illuminance", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Daylighting Lighting Power Multiplier", "", AggType::SumOrAverageHoursShown); AddMonthlyFieldSetInput(state, curReport, "Daylighting Lighting Power Multiplier", "", AggType::MinimumDuringHoursShown); @@ -2693,7 +2697,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Daylighting Reference Point 2 Daylight Illuminance Setpoint Exceeded Time", "", AggType::SumOrAvg); } if (ort->namedMonthly(53).show) { - curReport = AddMonthlyReport(state, "CoilReportMonthly", 2); + curReport = AddMonthlyReport(state, "CoilReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Heating Coil Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Heating Coil Heating Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Total Cooling Energy", "", AggType::SumOrAvg); @@ -2703,21 +2707,21 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Cooling Coil Wetted Area Fraction", "", AggType::SumOrAvg); } if (ort->namedMonthly(54).show) { - curReport = AddMonthlyReport(state, "PlantLoopDemandReportMonthly", 2); + curReport = AddMonthlyReport(state, "PlantLoopDemandReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Cooling Demand Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Cooling Demand Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Heating Demand Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Heating Demand Rate", "", AggType::Maximum); } if (ort->namedMonthly(55).show) { - curReport = AddMonthlyReport(state, "FanReportMonthly", 2); + curReport = AddMonthlyReport(state, "FanReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Fan Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Fan Rise in Air Temperature", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Fan Electricity Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Fan Rise in Air Temperature", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(56).show) { - curReport = AddMonthlyReport(state, "PumpReportMonthly", 2); + curReport = AddMonthlyReport(state, "PumpReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Pump Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Pump Fluid Heat Gain Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Pump Electricity Rate", "", AggType::Maximum); @@ -2727,7 +2731,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Pump Mass Flow Rate", "", AggType::ValueWhenMaxMin); } if (ort->namedMonthly(57).show) { - curReport = AddMonthlyReport(state, "CondLoopDemandReportMonthly", 2); + curReport = AddMonthlyReport(state, "CondLoopDemandReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Cooling Demand Rate", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Cooling Demand Rate", "", AggType::Maximum); AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Inlet Temperature", "", AggType::ValueWhenMaxMin); @@ -2736,12 +2740,12 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Plant Supply Side Heating Demand Rate", "", AggType::Maximum); } if (ort->namedMonthly(58).show) { - curReport = AddMonthlyReport(state, "ZoneTemperatureOscillationReportMonthly", 2); + curReport = AddMonthlyReport(state, "ZoneTemperatureOscillationReportMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Oscillating Temperatures Time", "", AggType::HoursNonZero); AddMonthlyFieldSetInput(state, curReport, "Zone People Occupant Count", "", AggType::SumOrAverageHoursShown); } if (ort->namedMonthly(59).show) { - curReport = AddMonthlyReport(state, "AirLoopSystemEnergyAndWaterUseMonthly", 2); + curReport = AddMonthlyReport(state, "AirLoopSystemEnergyAndWaterUseMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Air System Hot Water Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Steam Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Chilled Water Energy", "", AggType::SumOrAvg); @@ -2751,7 +2755,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) } if (ort->namedMonthly(60).show) { - curReport = AddMonthlyReport(state, "AirLoopSystemComponentLoadsMonthly", 2); + curReport = AddMonthlyReport(state, "AirLoopSystemComponentLoadsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Air System Fan Air Heating Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Cooling Coil Total Cooling Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Heating Coil Total Heating Energy", "", AggType::SumOrAvg); @@ -2762,7 +2766,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Air System Desiccant Dehumidifier Total Cooling Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(61).show) { - curReport = AddMonthlyReport(state, "AirLoopSystemComponentEnergyUseMonthly", 2); + curReport = AddMonthlyReport(state, "AirLoopSystemComponentEnergyUseMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Air System Fan Electricity Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Heating Coil Hot Water Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Air System Cooling Coil Chilled Water Energy", "", AggType::SumOrAvg); @@ -2777,7 +2781,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Air System Desiccant Dehumidifier Electricity Energy", "", AggType::SumOrAvg); } if (ort->namedMonthly(62).show) { - curReport = AddMonthlyReport(state, "MechanicalVentilationLoadsMonthly", 2); + curReport = AddMonthlyReport(state, "MechanicalVentilationLoadsMonthly", 2, true); AddMonthlyFieldSetInput(state, curReport, "Zone Mechanical Ventilation No Load Heat Removal Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Zone Mechanical Ventilation Cooling Load Increase Energy", "", AggType::SumOrAvg); AddMonthlyFieldSetInput( @@ -2791,7 +2795,7 @@ void CreatePredefinedMonthlyReports(EnergyPlusData &state) AddMonthlyFieldSetInput(state, curReport, "Zone Mechanical Ventilation Air Changes per Hour", "", AggType::SumOrAvg); } if (ort->namedMonthly(63).show) { - curReport = AddMonthlyReport(state, "HeatEmissionsReportMonthly", 2); + curReport = AddMonthlyReport(state, "HeatEmissionsReportMonthly", 2, true); // Place holder AddMonthlyFieldSetInput(state, curReport, "Site Total Surface Heat Emission to Air", "", AggType::SumOrAvg); AddMonthlyFieldSetInput(state, curReport, "Site Total Zone Exfiltration Heat Loss", "", AggType::SumOrAvg); diff --git a/src/EnergyPlus/OutputReportTabular.hh b/src/EnergyPlus/OutputReportTabular.hh index f96d1c6a659..b0287813f88 100644 --- a/src/EnergyPlus/OutputReportTabular.hh +++ b/src/EnergyPlus/OutputReportTabular.hh @@ -331,17 +331,13 @@ namespace OutputReportTabular { struct MonthlyInputType { // Members - std::string name; // identifier - int numFieldSet; // number of monthly field sets - int firstFieldSet; // pointer to the first field set - int numTables; // number of tables - int firstTable; // pointer to the first table - int showDigits; // the number of digits to be shown - - // Default Constructor - MonthlyInputType() : numFieldSet(0), firstFieldSet(0), numTables(0), firstTable(0), showDigits(0) - { - } + std::string name; // identifier + int numFieldSet = 0; // number of monthly field sets + int firstFieldSet = 0; // pointer to the first field set + int numTables = 0; // number of tables + int firstTable = 0; // pointer to the first table + int showDigits = 0; // the number of digits to be shown + bool isNamedMonthly = false; }; struct MonthlyFieldSetInputType @@ -523,7 +519,7 @@ namespace OutputReportTabular { void GetInputTabularMonthly(EnergyPlusData &state); - int AddMonthlyReport(EnergyPlusData &state, std::string const &inReportName, int const inNumDigitsShown); + int AddMonthlyReport(EnergyPlusData &state, std::string const &inReportName, int const inNumDigitsShown, bool isNamedMonthly = false); void AddMonthlyFieldSetInput( EnergyPlusData &state, int const inMonthReport, std::string const &inVariMeter, std::string const &inColHead, AggType const inAggregate); From 9818a480f8976eebef43950fb99ffdd5fe01dbf5 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 13:24:05 +0200 Subject: [PATCH 104/161] Add lots of testing with the desired behavior in each case. --- .../unit/OutputReportTabular.unit.cc | 245 +++++++++++++++++- 1 file changed, 239 insertions(+), 6 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index 8c27bd49726..415d8a5e86f 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -8602,6 +8602,7 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_8317_ValidateOutputTableMon state->dataGlobal->DoWeathSim = true; state->dataGlobal->TimeStepZone = 0.25; state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = false; InitializeOutput(*state); @@ -8623,12 +8624,10 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_8317_ValidateOutputTableMon OutputReportTabular::GetInputTabularMonthly(*state); OutputReportTabular::InitializeTabularMonthly(*state); - std::string expected_error = delimited_string({ - " ** Warning ** In Output:Table:Monthly 'MY REPORT' invalid Variable or Meter Name 'HEATING:GAS'", - " ** Warning ** In Output:Table:Monthly 'MY REPORT' invalid Variable or Meter Name 'EXTERIOR LIGHTS ELECTRIC POWER'", - " ** Warning ** In Output:Table:Monthly 'MY REPORT' invalid Variable or Meter Name 'ALWAYSON'", + std::string const expected_error = delimited_string({ + " ** Warning ** Processing Monthly Tabular Reports: Variable names not valid for this simulation", + " ** ~~~ ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual variables.", }); - compare_err_stream(expected_error); } @@ -12584,7 +12583,7 @@ TEST_F(SQLiteFixture, UpdateSizing_EndSysSizingCalc) EXPECT_EQ(return_val, 5080.22); } -TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnOnMissingMonthlyVariable) +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnMonthly) { // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones std::string const idf_objects = delimited_string({ @@ -12617,8 +12616,139 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnOnMissingMonthlyVariabl "General"); state->dataGlobal->DoWeathSim = true; + state->dataGlobal->KindOfSim = Constant::KindOfSim::RunPeriodWeather; // Trigger the extra warning + state->dataGlobal->TimeStepZone = 0.25; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = false; + + GetInputTabularMonthly(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); + GetInputOutputTableSummaryReports(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly + 1); + + InitializeTabularMonthly(*state); + + std::string const expected_error = delimited_string({ + " ** Warning ** Processing Monthly Tabular Reports: Variable names not valid for this simulation", + " ** ~~~ ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual variables.", + }); + compare_err_stream(expected_error); +} + +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnMonthly_AlwaysIfWeatherRunRequested) +{ + // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones + // If I request a Weater File run Period I expect a warning + // Regardless of the fact that the sizing run happens first + std::string const idf_objects = delimited_string({ + "SimulationControl,", + " No, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " Yes, !- Run Simulation for Sizing Periods", + " Yes; !- Run Simulation for Weather File Run Periods", + + "Output:Table:Monthly,", + " Space Gains Annual Report, !- Name", + " 2, !- Digits After Decimal", + " Exterior Lights Electricity Energy, !- Variable or Meter 1 Name", + " SumOrAverage, !- Aggregation Type for Variable or Meter 1", + " NON EXISTANT VARIABLE, !- Variable or Meter 2 Name", + " Maximum; !- Aggregation Type for Variable or Meter 2", + + "Output:Table:SummaryReports,", + " AllSummaryAndMonthly; !- Report 1 Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + SimulationManager::GetProjectData(*state); + EXPECT_TRUE(state->dataGlobal->DoDesDaySim); + EXPECT_TRUE(state->dataGlobal->DoWeathSim); + + Real64 extLitUse; + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite1", + {}, + "Electricity", + "Exterior Lights", + "General"); + + // In a regular simulation with the above SimulationControl, when InitializeTabularMonthly is called it's DesignDay + state->dataGlobal->KindOfSim = Constant::KindOfSim::DesignDay; + state->dataGlobal->TimeStepZone = 0.25; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = false; + + GetInputTabularMonthly(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); + GetInputOutputTableSummaryReports(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly + 1); + + InitializeTabularMonthly(*state); + + std::string const expected_error = delimited_string({ + " ** Warning ** Processing Monthly Tabular Reports: Variable names not valid for this simulation", + " ** ~~~ ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual variables.", + }); + compare_err_stream(expected_error); +} + +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnMonthlyDisplayExtraWarnings) +{ + // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones + std::string const idf_objects = delimited_string({ + "Output:Table:Monthly,", + " Space Gains Annual Report, !- Name", + " 2, !- Digits After Decimal", + " NON EXISTANT VARIABLE, !- Variable or Meter 1 Name", + " SumOrAverage, !- Aggregation Type for Variable or Meter 1", + " NON EXISTANT VARIABLE BIS, !- Variable or Meter 2 Name", + " Maximum; !- Aggregation Type for Variable or Meter 2", + + "Output:Table:SummaryReports,", + " AllSummaryAndMonthly; !- Report 1 Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + Real64 extLitUse; + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite1", + {}, + "Electricity", + "Exterior Lights", + "General"); + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite2", + {}, + "Electricity", + "Exterior Lights", + "General"); + + state->dataGlobal->DoWeathSim = true; + state->dataGlobal->KindOfSim = Constant::KindOfSim::RunPeriodWeather; // Trigger the extra warning state->dataGlobal->TimeStepZone = 0.25; state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = true; GetInputTabularMonthly(*state); EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); @@ -12628,7 +12758,110 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_WarnOnMissingMonthlyVariabl InitializeTabularMonthly(*state); std::string const expected_error = delimited_string({ + " ** Warning ** Processing Monthly Tabular Reports: Variable names not valid for this simulation", + " ** ~~~ ** ..Variables not valid for this simulation will have \"[Invalid/Undefined]\" in the Units Column of the Table Report.", " ** Warning ** In Output:Table:Monthly 'SPACE GAINS ANNUAL REPORT' invalid Variable or Meter Name 'NON EXISTANT VARIABLE'", + " ** Warning ** In Output:Table:Monthly 'SPACE GAINS ANNUAL REPORT' invalid Variable or Meter Name 'NON EXISTANT VARIABLE BIS'", }); compare_err_stream(expected_error); } + +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_NoWarnMonthlIfNoWeatherFileRun) +{ + // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones + std::string const idf_objects = delimited_string({ + "Output:Table:Monthly,", + " Space Gains Annual Report, !- Name", + " 2, !- Digits After Decimal", + " NON EXISTANT VARIABLE, !- Variable or Meter 1 Name", + " SumOrAverage, !- Aggregation Type for Variable or Meter 1", + " NON EXISTANT VARIABLE BIS, !- Variable or Meter 2 Name", + " Maximum; !- Aggregation Type for Variable or Meter 2", + + "Output:Table:SummaryReports,", + " AllSummaryAndMonthly; !- Report 1 Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + Real64 extLitUse; + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite1", + {}, + "Electricity", + "Exterior Lights", + "General"); + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite2", + {}, + "Electricity", + "Exterior Lights", + "General"); + + state->dataGlobal->DoWeathSim = false; // <- here + state->dataGlobal->KindOfSim = Constant::KindOfSim::DesignDay; + state->dataGlobal->TimeStepZone = 0.25; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = true; + + GetInputTabularMonthly(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); + GetInputOutputTableSummaryReports(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly + 1); + + InitializeTabularMonthly(*state); + + compare_err_stream(""); +} + +TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_DontWarnMonthlyIfOnlyNamedReports) +{ + // #9621 - Only warn if a bad variable is defined in a Monthly table user requested, not on the AllSummaryAndMonthly ones + std::string const idf_objects = delimited_string({ + "Output:Table:SummaryReports,", + " AllSummaryAndMonthly; !- Report 1 Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + Real64 extLitUse; + + SetupOutputVariable(*state, + "Exterior Lights Electricity Energy", + OutputProcessor::Unit::J, + extLitUse, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "Lite1", + {}, + "Electricity", + "Exterior Lights", + "General"); + + state->dataGlobal->DoWeathSim = true; + state->dataGlobal->KindOfSim = Constant::KindOfSim::RunPeriodWeather; // Trigger the extra warning + state->dataGlobal->TimeStepZone = 0.25; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 60.0; + state->dataGlobal->DisplayExtraWarnings = true; + + GetInputTabularMonthly(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 0); + GetInputOutputTableSummaryReports(*state); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly); + + InitializeTabularMonthly(*state); + + compare_err_stream(""); +} From f29246f246063547b582aae35faf80d622cf49cc Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 13:26:14 +0200 Subject: [PATCH 105/161] Adjust the monthly warnings * Avoid printing two warnings when display extra warning (My fault, in #8348) * Do not print individual variables if non display extra warning * Reorganize when single line warning is issued to be more logical * Reduce number of printed lines --- src/EnergyPlus/OutputReportTabular.cc | 70 ++++++++++----------------- src/EnergyPlus/OutputReportTabular.hh | 2 - 2 files changed, 25 insertions(+), 47 deletions(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 2327170dc44..397421cec84 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -614,15 +614,13 @@ void InitializeTabularMonthly(EnergyPlusData &state) // #ifdef ITM_KEYCACHE // Noel comment: First time in this TabNum/ColNum loop, let's save the results // of GetVariableKeyCountandType & GetVariableKeys. - std::string const &curVariMeter = UtilityRoutines::makeUPPER(ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).variMeter); + std::string const curVariMeter = UtilityRoutines::makeUPPER(ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).variMeter); // call the key count function but only need count during this pass int KeyCount = 0; GetVariableKeyCountandType(state, curVariMeter, KeyCount, TypeVar, AvgSumVar, StepTypeVar, UnitsVar); if (TypeVar == OutputProcessor::VariableType::NotFound) { if (!ort->MonthlyInput(TabNum).isNamedMonthly) { - ShowWarningError( - state, - format("In Output:Table:Monthly '{}' invalid Variable or Meter Name '{}'", ort->MonthlyInput(TabNum).name, curVariMeter)); + ++state.dataOutRptTab->ErrCount1; } } // IF (KeyCount > maxKeyCount) THEN @@ -725,6 +723,22 @@ void InitializeTabularMonthly(EnergyPlusData &state) ort->MonthlyColumns(colNum).duration = 0.0; } + // std::count_if(ort->MonthlyInput.begin(), ort->MonthlyInputCount.end(), [](auto& monthlyInput) + // If no weather file run requested, don't bother issuing a warning + bool issueWarnings = false; + if (state.dataGlobal->DoWeathSim && (state.dataOutRptTab->ErrCount1 > 0)) { + ShowWarningError(state, "Processing Monthly Tabular Reports: Variable names not valid for this simulation"); + + if (!state.dataGlobal->DisplayExtraWarnings) { + ShowContinueError(state, "...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual variables."); + } else { + ShowContinueError(state, + "..Variables not valid for this simulation will have \"[Invalid/Undefined]\" in the Units Column of " + "the Table Report."); + issueWarnings = true; + } + } + int ColumnsRecount = 0; int TablesRecount = 0; for (int TabNum = 1; TabNum <= ort->MonthlyInputCount; ++TabNum) { @@ -734,45 +748,16 @@ void InitializeTabularMonthly(EnergyPlusData &state) int UniqueKeyCount = 0; bool environmentKeyFound = false; for (int colNum = 1; colNum <= NumColumns; ++colNum) { - // #ifdef ITM_KEYCACHE - // Noel comment: Here is where we could use the saved values std::string const &curVariMeter = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).variMeterUpper; const int KeyCount = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).keyCount; TypeVar = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).typeOfVar; AvgSumVar = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).varAvgSum; StepTypeVar = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).varStepType; UnitsVar = ort->MonthlyFieldSetInput(FirstColumn + colNum - 1).varUnits; - // DO iKey = 1, KeyCount !noel - // NamesOfKeys(iKey) = MonthlyFieldSetInput(FirstColumn + ColNum - 1)%NamesOfKeys(iKey) !noel - // IndexesForKeyVar(iKey) = MonthlyFieldSetInput(FirstColumn + ColNum - 1)%IndexesForKeyVar(iKey) !noel - // ENDDO - // #else - // curVariMeter = UtilityRoutines::makeUPPER(MonthlyFieldSetInput(FirstColumn + ColNum - 1)%variMeter) - // ! call the key count function but only need count during this pass - // CALL GetVariableKeyCountandType(state, curVariMeter,KeyCount,TypeVar,AvgSumVar,StepTypeVar,UnitsVar) - // ALLOCATE(NamesOfKeys(KeyCount)) - // ALLOCATE(IndexesForKeyVar(KeyCount)) - // CALL GetVariableKeys(state, curVariMeter,TypeVar,NamesOfKeys,IndexesForKeyVar) - // #endif - if (KeyCount == 0) { - ++state.dataOutRptTab->ErrCount1; - if (state.dataOutRptTab->ErrCount1 == 1 && !state.dataGlobal->DisplayExtraWarnings && - state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodWeather) { - ShowWarningError(state, "Processing Monthly Tabular Reports: Variable names not valid for this simulation"); - ShowContinueError(state, "...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual variables."); - } - // fixing CR5878 removed the showing of the warning once about a specific variable. - if (state.dataGlobal->DisplayExtraWarnings && state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodWeather) { - ShowWarningError(state, format("Processing Monthly Tabular Reports: {}", ort->MonthlyInput(TabNum).name)); - ShowContinueError(state, format("..Variable name={} not valid for this simulation.", curVariMeter)); - if (state.dataOutRptTab->VarWarning) { - ShowContinueError(state, - "..Variables not valid for this simulation will have \"[Invalid/Undefined]\" in the Units Column of " - "the Table Report."); - state.dataOutRptTab->VarWarning = false; - } - } + if (KeyCount == 0 && issueWarnings && !ort->MonthlyInput(TabNum).isNamedMonthly) { + ShowWarningError( + state, format("In Output:Table:Monthly '{}' invalid Variable or Meter Name '{}'", ort->MonthlyInput(TabNum).name, curVariMeter)); } for (int iKey = 1; iKey <= KeyCount; ++iKey) { found = 0; @@ -930,17 +915,12 @@ void InitializeTabularMonthly(EnergyPlusData &state) } } else { // if no key corresponds to this instance of the report // fixing CR5878 removed the showing of the warning once about a specific variable. - if (state.dataGlobal->DisplayExtraWarnings && state.dataGlobal->KindOfSim == Constant::KindOfSim::RunPeriodWeather) { - ShowWarningError(state, format("Processing Monthly Tabular Reports: {}", ort->MonthlyInput(TabNum).name)); - ShowContinueError(state, format("..Variable name={} not valid for this simulation.", curVariMeter)); + if (issueWarnings && !ort->MonthlyInput(TabNum).isNamedMonthly) { + ShowWarningError( + state, + format("In Output:Table:Monthly '{}' invalid Variable or Meter Name '{}'", ort->MonthlyInput(TabNum).name, curVariMeter)); ShowContinueError( state, format("..i.e., Variable name={}:{} not valid for this simulation.", UniqueKeyNames(kUniqueKey), curVariMeter)); - if (state.dataOutRptTab->VarWarning) { - ShowContinueError(state, - "..Variables not valid for this simulation will have \"[Invalid/Undefined]\" in the Units Column " - "of the Table Report."); - state.dataOutRptTab->VarWarning = false; - } } ort->MonthlyColumns(mColumn).varName = curVariMeter; ort->MonthlyColumns(mColumn).varNum = 0; diff --git a/src/EnergyPlus/OutputReportTabular.hh b/src/EnergyPlus/OutputReportTabular.hh index b0287813f88..305ed6b1c43 100644 --- a/src/EnergyPlus/OutputReportTabular.hh +++ b/src/EnergyPlus/OutputReportTabular.hh @@ -1240,7 +1240,6 @@ struct OutputReportTabularData : BaseGlobalStruct int numPeopleAdaptive = 0; Real64 BigNum = 0.0; - bool VarWarning = true; int ErrCount1 = 0; Array1D MonthlyColumnsTypeOfVar; Array1D MonthlyColumnsStepType; @@ -1541,7 +1540,6 @@ struct OutputReportTabularData : BaseGlobalStruct this->numPeopleAdaptive = 0; this->BigNum = 0.0; - this->VarWarning = true; this->ErrCount1 = 0; this->MonthlyColumnsTypeOfVar.clear(); this->MonthlyColumnsStepType.clear(); From 85b5f09f1bcf1d4834e16929672da8170f8ffc73 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 14:51:12 +0200 Subject: [PATCH 106/161] Clang format change that snuck in --- tst/EnergyPlus/unit/OutputReportTabular.unit.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index 415d8a5e86f..de13324b99a 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -7183,7 +7183,10 @@ TEST_F(SQLiteFixture, OutputReportTabular_WriteLoadComponentSummaryTables_AirLoo state->dataSize->SysSizInput.allocate(state->dataSize->NumSysSizInput); state->dataSize->SysSizInput(1).AirLoopNum = 1; state->dataSize->SysSizInput(1).SizingOption = DataSizing::NonCoincident; - auto degC_to_F = [](Real64 celsius) constexpr { return celsius * (9.0 / 5.0) + 32.0; }; + auto degC_to_F = [](Real64 celsius) constexpr + { + return celsius * (9.0 / 5.0) + 32.0; + }; constexpr Real64 coolMixTempSys = 26.2; constexpr Real64 coolMixTempSysIP = degC_to_F(coolMixTempSys); constexpr Real64 heatMixTempSys = -1.7; From c39acfff7d73f67b9c693d2461cc68e6bd2e0769 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 14:59:46 +0200 Subject: [PATCH 107/161] Fix failing test --- tst/EnergyPlus/unit/OutputReportTabular.unit.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index de13324b99a..0eca5a46938 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -12822,11 +12822,15 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_NoWarnMonthlIfNoWeatherFile GetInputTabularMonthly(*state); EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, 1); GetInputOutputTableSummaryReports(*state); - EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly + 1); + EXPECT_EQ(state->dataOutRptTab->MonthlyInputCount, numNamedMonthly); InitializeTabularMonthly(*state); - compare_err_stream(""); + std::string const expected_error = delimited_string({ + " ** Warning ** Output:Table:Monthly requested with SimulationControl Run Simulation for Weather File Run Periods set to No so " + "Output:Table:Monthly will not be generated", + }); + compare_err_stream(expected_error); } TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_DontWarnMonthlyIfOnlyNamedReports) From 13e0df849f8abecf2ed77970e030edccf4ae8d07 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Fri, 8 Sep 2023 09:32:50 -0400 Subject: [PATCH 108/161] Updated IO Ref doc; added missing air terminals supported in ADU --- .../src/overview/group-zone-equipment.tex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/input-output-reference/src/overview/group-zone-equipment.tex b/doc/input-output-reference/src/overview/group-zone-equipment.tex index 8a1466be8e8..cd6b21c8528 100644 --- a/doc/input-output-reference/src/overview/group-zone-equipment.tex +++ b/doc/input-output-reference/src/overview/group-zone-equipment.tex @@ -57,7 +57,9 @@ \subsection{ZoneHVAC:AirDistributionUnit}\label{zonehvacairdistributionunit} \item \hyperref[airterminaldualductvavoutdoorair]{AirTerminal:DualDuct:VAV:OutdoorAir} \item - \hyperref[airterminalsingleductconstantvolumereheat]{AirTerminal:SingleDuct:ConstantVolume:Reheat} + \hyperref[airterminalsingleductconstantvolumereheat]{AirTerminal:SingleDuct:ConstantVolume:Reheat} +\item + \hyperref[airterminalsingleductconstantvolumenoreheat]{AirTerminal:SingleDuct:ConstantVolume:NoReheat} \item \hyperref[airterminalsingleductvavreheat]{AirTerminal:SingleDuct:VAV:Reheat} \item @@ -68,6 +70,8 @@ \subsection{ZoneHVAC:AirDistributionUnit}\label{zonehvacairdistributionunit} \hyperref[airterminalsingleductparallelpiureheat]{AirTerminal:SingleDuct:ParallelPIU:Reheat} \item \hyperref[airterminalsingleductconstantvolumefourpipeinduction]{AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction} +\item + \hyperref[airterminalsingleductconstantvolumefourpipebeam]{AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam} \item \hyperref[airterminalsingleductvavreheatvariablespeedfan]{AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan} \item From 8b613de6e14a7573168b91fa96ad84bf2dd63c4e Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 16:29:17 +0200 Subject: [PATCH 109/161] Add unit test for #10190 --- .../unit/OutputReportTabular.unit.cc | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index 2b222d85238..65eb328b7e1 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -12586,3 +12586,174 @@ TEST_F(SQLiteFixture, UpdateSizing_EndSysSizingCalc) Real64 return_val = execAndReturnFirstDouble(query); EXPECT_EQ(return_val, 5080.22); } + +TEST_F(SQLiteFixture, OutputReportTabular_DistrictHeating) +{ + // Test for #10190 - District Heating Steam is empty + state->dataSQLiteProcedures->sqlite->createSQLiteSimulationsRecord(1, "EnergyPlus Version", "Current Time"); + + state->dataOutRptTab->displayTabularBEPS = true; + state->dataOutRptTab->displayDemandEndUse = true; + state->dataOutRptTab->displayLEEDSummary = true; + + state->dataOutRptTab->WriteTabularFiles = true; + + SetupUnitConversions(*state); + state->dataOutRptTab->unitsStyle = OutputReportTabular::UnitsStyle::JtoKWH; + state->dataOutRptTab->unitsStyle_SQLite = OutputReportTabular::UnitsStyle::JtoKWH; + + // Needed to avoid crash (from ElectricPowerServiceManager.hh) + createFacilityElectricPowerServiceObject(*state); + + SetPredefinedTables(*state); + + Real64 DistrictHeatingWater = 4e8; + SetupOutputVariable(*state, + "Exterior Equipment DistrictHeatingWater Energy", + OutputProcessor::Unit::J, + DistrictHeatingWater, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "DHWaterExtEq", + {}, + "DistrictHeatingWater", + "ExteriorEquipment", + "General"); + + Real64 DistrictHeatingSteam = 5e8; + SetupOutputVariable(*state, + "Exterior Equipment DistrictHeatingSteam Energy", + OutputProcessor::Unit::J, + DistrictHeatingSteam, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "DHSteamExtEq", + {}, + "DistrictHeatingSteam", + "ExteriorEquipment", + "General"); + + state->dataGlobal->DoWeathSim = true; + state->dataGlobal->TimeStepZone = 1.0; + state->dataGlobal->MinutesPerTimeStep = state->dataGlobal->TimeStepZone * 60; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 3600.0; + state->dataOutRptTab->displayTabularBEPS = true; + // OutputProcessor::TimeValue.allocate(2); + + auto timeStep = 1.0; + + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); + + *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).TimeStep = 60; + *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).TimeStep = 60; + + GetInputOutputTableSummaryReports(*state); + + state->dataEnvrn->Month = 12; + + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); + GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); + + auto &ort = state->dataOutRptTab; + constexpr int dhWaterIndex = 4; + constexpr int dhSteamIndex = 5; + EXPECT_EQ("DistrictHeatingWater", ort->resourceTypeNames(dhWaterIndex)); + EXPECT_EQ("DistrictHeatingSteam", ort->resourceTypeNames(dhSteamIndex)); + + EXPECT_NEAR(DistrictHeatingWater, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); + EXPECT_NEAR( + DistrictHeatingWater, state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), 1.); + // General + EXPECT_NEAR(DistrictHeatingWater, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), + 1.); + + EXPECT_NEAR(DistrictHeatingSteam, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); + EXPECT_NEAR( + DistrictHeatingSteam, state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), 1.); + // General + EXPECT_NEAR(DistrictHeatingSteam, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), + 1.); + + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); + GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); + EXPECT_NEAR(DistrictHeatingWater * 2, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); + EXPECT_NEAR(DistrictHeatingWater * 2, + state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), + 1.); + // General + EXPECT_NEAR(DistrictHeatingWater * 2, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), + 1.); + + EXPECT_NEAR(DistrictHeatingSteam * 2, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); + EXPECT_NEAR(DistrictHeatingSteam * 2, + state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), + 1.); + // General + EXPECT_NEAR(DistrictHeatingSteam * 2, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), + 1.); + + OutputReportTabular::WriteBEPSTable(*state); + OutputReportTabular::WriteDemandEndUseSummary(*state); + + // We test for Heating and Total, since they should be the same + std::vector testReportNames = {"AnnualBuildingUtilityPerformanceSummary", "DemandEndUseComponentsSummary"}; + std::vector endUseSubCategoryNames = {"General"}; + + // Query End Use + { + std::string query(R"sql( + SELECT Value From TabularDataWithStrings + WHERE TableName = 'End Uses' + AND ReportName = 'AnnualBuildingUtilityPerformanceSummary' + AND ColumnName = 'District Heating Water' + AND RowName = 'Exterior Equipment')sql"); + auto const result = queryResult(query, "TabularDataWithStrings"); + Real64 const return_val1 = execAndReturnFirstDouble(query); + + ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; + EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val1, 0.01) << "Failed for query: " << query; + } + + { + std::string query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Steam'" + " AND RowName = 'Exterior Equipment'"); + auto const result = queryResult(query, "TabularDataWithStrings"); + Real64 const return_val = execAndReturnFirstDouble(query); + + ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; + EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; + } + + // Query End Use with Subcategory + { + std::string const query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses By Subcategory'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Water'" + " AND RowName = 'Exterior Equipment:General'"); + Real64 const return_val = execAndReturnFirstDouble(query); + EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; + } + + { + std::string query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses By Subcategory'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Steam'" + " AND RowName = 'Exterior Equipment:General'"); + Real64 return_val = execAndReturnFirstDouble(query); + EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; + } +} From a118c993d02bdac190ca4f5cbd9c60efef5a7e55 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 16:29:51 +0200 Subject: [PATCH 110/161] Fix #10190 - Zero DistrictHeatingSteam reported in ABUPS --- src/EnergyPlus/OutputReportTabular.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 0aaadc08999..c81f39b0b89 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -1751,7 +1751,7 @@ void GetInputOutputTableSummaryReports(EnergyPlusData &state) ort->resourceTypeNames(2) = "NaturalGas"; ort->resourceTypeNames(3) = "DistrictCooling"; ort->resourceTypeNames(4) = "DistrictHeatingWater"; - ort->resourceTypeNames(5) = "DistirctHeatingSteam"; + ort->resourceTypeNames(5) = "DistrictHeatingSteam"; ort->resourceTypeNames(6) = "Gasoline"; ort->resourceTypeNames(7) = "Water"; ort->resourceTypeNames(8) = "Diesel"; From 73042a7e1a839a512200d01fbfedaa5f9b429f74 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 16:34:21 +0200 Subject: [PATCH 111/161] Remove useless comment --- src/EnergyPlus/OutputReportTabular.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 397421cec84..a35e869d8cb 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -723,7 +723,6 @@ void InitializeTabularMonthly(EnergyPlusData &state) ort->MonthlyColumns(colNum).duration = 0.0; } - // std::count_if(ort->MonthlyInput.begin(), ort->MonthlyInputCount.end(), [](auto& monthlyInput) // If no weather file run requested, don't bother issuing a warning bool issueWarnings = false; if (state.dataGlobal->DoWeathSim && (state.dataOutRptTab->ErrCount1 > 0)) { From 80285e822d307124230f8d1b581314649bce3e5e Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Fri, 8 Sep 2023 09:40:58 -0400 Subject: [PATCH 112/161] Updated Air Distribution Units IO Ref document --- .../src/overview/group-zone-equipment.tex | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/input-output-reference/src/overview/group-zone-equipment.tex b/doc/input-output-reference/src/overview/group-zone-equipment.tex index cd6b21c8528..21a1271247e 100644 --- a/doc/input-output-reference/src/overview/group-zone-equipment.tex +++ b/doc/input-output-reference/src/overview/group-zone-equipment.tex @@ -89,7 +89,25 @@ \subsection{ZoneHVAC:AirDistributionUnit}\label{zonehvacairdistributionunit} Connections between the air distribution unit, the supply air duct, and the zone are specified in the input syntax for the air distribution unit and the \hyperref[airloophvaczonesplitter]{AirLoopHVAC:ZoneSplitter}. The input syntax also explicitly defines an outlet identifier. This implies a connection to a zone through a \hyperref[nodelist]{NodeList} for zone inlets (see the \hyperref[zonehvacequipmentconnections]{ZoneHVAC:EquipmentConnections} statement). Each air distribution unit is essentially a combined component-controller. Since controls are normally based on the zone thermostat, they can work in parallel or series in complex fashion. Each air distribution unit operates to meet all or part of the remaining thermostat load as specified in \hyperref[zonehvacequipmentlist]{ZoneHVAC:EquipmentList}. -The Air Distribution unit also allows the user to specify leaks in the supply air duct system. These inputs are used in the EnergyPlus Simplified Duct Leakage Model (SDLM). This model simulates a specific configuration: supply leaks to a return plenum in a commercial VAV or CV system. The system must have a constant static pressure setpoint. Within these limitations SDLM allows the user to easily evaluate the energy penalty due to duct leakage. +The Air Distribution unit also allows the user to specify leaks in the supply air duct system. These inputs are used in the EnergyPlus Simplified Duct Leakage Model (SDLM). This model simulates a specific configuration: supply leaks to a return plenum in a commercial VAV or CV system. The VAV system must have a constant static pressure setpoint, and a constant upstream air leakage flow rate is calculated using the upstream leakage fraction and design flow rate of the VAV box. For the CV system, a proportional leakage amount is calculated using the upstream leakage fraction and the maximum available air flow rate of the air terminal box. The downstream leakages are always calculated as a fraction of the current flow rate through the air terminal. Within these limitations SDLM allows the user to easily evaluate the energy penalty due to duct leakage. + +The Simplified Duct Leakage Model (SDLM) is currently supported for the following air terminals: + +\begin{itemize} +\item + \hyperref[airterminalsingleductvavreheat]{AirTerminal:SingleDuct:VAV:Reheat} +\item + \hyperref[airterminalsingleductvavnoreheat]{AirTerminal:SingleDuct:VAV:NoReheat} +\item + \hyperref[airterminalsingleductvavheatandcoolreheat]{AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat} +\item + \hyperref[airterminalsingleductvavheatandcoolnoreheat]{AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat} +\item + \hyperref[airterminalsingleductconstantvolumereheat]{AirTerminal:SingleDuct:ConstantVolume:Reheat} +\item + \hyperref[airterminalsingleductconstantvolumenoreheat]{AirTerminal:SingleDuct:ConstantVolume:NoReheat} + +\end{itemize} \subsubsection{Inputs}\label{inputs-055} @@ -111,7 +129,7 @@ \subsubsection{Inputs}\label{inputs-055} \paragraph{Field: Nominal Upstream Leakage Fraction}\label{field-nominal-upstream-leakage-fraction} -This is the leakage upstream of the terminal unit as a fraction of the design flow rate through the unit. It is the leakage fraction at the design flow rate. It is used to calculate a leakage flow rate which is then held constant while the system air flow varies. This input is optional; the default is zero. +This is the leakage upstream of the terminal unit as a fraction of the design flow rate or maximum available flow rate through the unit. It is the leakage fraction at the design flow rate for the VAV air terminal and at the current maximum available flow rate for the CV air terminals. For the VAV air terminal, it is used to calculate a leakage flow rate, which is then held constant while the system airflow varies. The calculated leakage rate for the CV air terminal proportionally varies with the current maximum available flow rate. This input is optional; the default is zero. \paragraph{Field: Constant Downstream Leakage Fraction}\label{field-constant-downstream-leakage-fraction} From ddec80fe932f7bc7d43fa615f3a70ab03df5b85b Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 8 Sep 2023 17:04:05 +0200 Subject: [PATCH 113/161] Rely on eResourceNames per @mjwitte 's suggestion --- src/EnergyPlus/OutputReportTabular.cc | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index c81f39b0b89..fa3dfefaca7 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -1747,20 +1747,20 @@ void GetInputOutputTableSummaryReports(EnergyPlusData &state) // if the BEPS report has been called for than initialize its arrays if (ort->displayTabularBEPS || ort->displayDemandEndUse || ort->displaySourceEnergyEndUseSummary || ort->displayLEEDSummary) { // initialize the resource type names - ort->resourceTypeNames(1) = "Electricity"; - ort->resourceTypeNames(2) = "NaturalGas"; - ort->resourceTypeNames(3) = "DistrictCooling"; - ort->resourceTypeNames(4) = "DistrictHeatingWater"; - ort->resourceTypeNames(5) = "DistrictHeatingSteam"; - ort->resourceTypeNames(6) = "Gasoline"; - ort->resourceTypeNames(7) = "Water"; - ort->resourceTypeNames(8) = "Diesel"; - ort->resourceTypeNames(9) = "Coal"; - ort->resourceTypeNames(10) = "FuelOilNo1"; - ort->resourceTypeNames(11) = "FuelOilNo2"; - ort->resourceTypeNames(12) = "Propane"; - ort->resourceTypeNames(13) = "OtherFuel1"; - ort->resourceTypeNames(14) = "OtherFuel2"; + ort->resourceTypeNames(1) = Constant::eResourceNames[static_cast(Constant::eResource::Electricity)]; + ort->resourceTypeNames(2) = Constant::eResourceNames[static_cast(Constant::eResource::NaturalGas)]; + ort->resourceTypeNames(3) = Constant::eResourceNames[static_cast(Constant::eResource::DistrictCooling)]; + ort->resourceTypeNames(4) = Constant::eResourceNames[static_cast(Constant::eResource::DistrictHeatingWater)]; + ort->resourceTypeNames(5) = Constant::eResourceNames[static_cast(Constant::eResource::DistrictHeatingSteam)]; + ort->resourceTypeNames(6) = Constant::eResourceNames[static_cast(Constant::eResource::Gasoline)]; + ort->resourceTypeNames(7) = Constant::eResourceNames[static_cast(Constant::eResource::Water)]; + ort->resourceTypeNames(8) = Constant::eResourceNames[static_cast(Constant::eResource::Diesel)]; + ort->resourceTypeNames(9) = Constant::eResourceNames[static_cast(Constant::eResource::Coal)]; + ort->resourceTypeNames(10) = Constant::eResourceNames[static_cast(Constant::eResource::FuelOilNo1)]; + ort->resourceTypeNames(11) = Constant::eResourceNames[static_cast(Constant::eResource::FuelOilNo2)]; + ort->resourceTypeNames(12) = Constant::eResourceNames[static_cast(Constant::eResource::Propane)]; + ort->resourceTypeNames(13) = Constant::eResourceNames[static_cast(Constant::eResource::OtherFuel1)]; + ort->resourceTypeNames(14) = Constant::eResourceNames[static_cast(Constant::eResource::OtherFuel2)]; ort->sourceTypeNames(1) = "Electricity"; ort->sourceTypeNames(2) = "NaturalGas"; From d8f3b60feb52781447b72caf7b1997d8cd7eea60 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 8 Sep 2023 10:22:29 -0600 Subject: [PATCH 114/161] Fix the Heat Pump Water Heater Information table. --- src/EnergyPlus/WaterThermalTanks.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 280096598b5..3975079617f 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -4183,7 +4183,7 @@ bool GetWaterThermalTankInput(EnergyPlusData &state) "Standard Rated Energy Factor\n"); static constexpr std::string_view Format_721( "! ,Type,Name,Volume {{m3}},Maximum Capacity {{W}},Standard Rated Recovery " - "Efficiency,Standard Rated Energy Factor,\"DX Coil Total Cooling Rate {{W, HPWH Only}}\"\n"); + "Efficiency,Standard Rated Energy Factor,DX Coil Total Cooling Rate (HPWH Only) {{W}}\n"); static constexpr std::string_view Format_722( "! ,Node Number,Height {{m}},Volume {{m3}},Maximum Capacity " "{{W}},Off-Cycle UA {{W/K}},On-Cycle UA {{W/K}},Number Of Inlets,Number Of Outlets\n"); From cd412678574babbae85ca80e6e5d160f950540d0 Mon Sep 17 00:00:00 2001 From: Neal Kruis Date: Fri, 8 Sep 2023 10:53:56 -0600 Subject: [PATCH 115/161] Do not make logger for penumbra if OpenGL is not used. --- src/EnergyPlus/SolarShading.cc | 2 ++ src/EnergyPlus/SolarShading.hh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index aa5a9a44835..1f7947f1a52 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -12919,6 +12919,7 @@ void TimestepInitComplexFenestration(EnergyPlusData &state) } // namespace EnergyPlus::SolarShading +#ifndef EP_NO_OPENGL namespace EnergyPlus { void EnergyPlusLogger::error(const std::string_view message) @@ -12944,3 +12945,4 @@ void EnergyPlusLogger::debug(const std::string_view message) info(message); } } // namespace EnergyPlus +#endif diff --git a/src/EnergyPlus/SolarShading.hh b/src/EnergyPlus/SolarShading.hh index 6d98ecfd325..e19713a72d9 100644 --- a/src/EnergyPlus/SolarShading.hh +++ b/src/EnergyPlus/SolarShading.hh @@ -643,6 +643,7 @@ struct SolarShadingData : BaseGlobalStruct } }; +#ifndef EP_NO_OPENGL class EnergyPlusLogger : public Courierr::Courierr { public: @@ -651,6 +652,7 @@ public: void info(const std::string_view message) override; void debug(const std::string_view message) override; }; +#endif } // namespace EnergyPlus From 8bcedec9eaf267cb711946227231a8c309c8e81b Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 8 Sep 2023 11:30:14 -0600 Subject: [PATCH 116/161] Suggestion by @mjwitte --- src/EnergyPlus/WaterThermalTanks.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 3975079617f..eff7ac77136 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -4183,7 +4183,7 @@ bool GetWaterThermalTankInput(EnergyPlusData &state) "Standard Rated Energy Factor\n"); static constexpr std::string_view Format_721( "! ,Type,Name,Volume {{m3}},Maximum Capacity {{W}},Standard Rated Recovery " - "Efficiency,Standard Rated Energy Factor,DX Coil Total Cooling Rate (HPWH Only) {{W}}\n"); + "Efficiency,Standard Rated Energy Factor,DX Coil Total Cooling Rate {{W}}\n"); static constexpr std::string_view Format_722( "! ,Node Number,Height {{m}},Volume {{m3}},Maximum Capacity " "{{W}},Off-Cycle UA {{W/K}},On-Cycle UA {{W/K}},Number Of Inlets,Number Of Outlets\n"); From c7c193225b4dc9c5a3ea9d34c1255059f3dfb56c Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 8 Sep 2023 13:41:10 -0600 Subject: [PATCH 117/161] Update OutputChanges23-1-0-to-23-2-0.md [decent_ci_skip] --- .../OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md index 5b5c657723f..f68085a80b4 100644 --- a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md +++ b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md @@ -8,7 +8,7 @@ This file documents the structural changes on the output of EnergyPlus that coul This will eventually become a more structured file, but currently it isn't clear what format is best. As an intermediate solution, and to allow the form to be formed organically, this plain text file is being used. Entries should be clearly delimited. It isn't expected that there will be but maybe a couple each release at most. Entries should also include some reference back to the repo. At least a PR number or whatever. ### EIO System Sizing Information User Design Capacity header -Missing unit is added to the EIO ystem Sizing Information table "User Design Capacity" header as shown below: +Missing unit is added to the EIO System Sizing Information table "User Design Capacity" header as shown below: - , System Name, Load Type, Peak Load Kind, User Design Capacity [W], Calc Des Air Flow Rate [m3/s], User Des Air Flow Rate [m3/s], Design Day Name, Date/Time of Peak - This change also impacts the html tabular output report file: report name "Initialization Summary" and table name "System Sizing Information". @@ -22,7 +22,7 @@ Since each EnergyPlus IDF file could generate an RMD file, the Ruleset Checking #### Adding reporting entries to existing tabular reports -New variables related to Std 229 are appendeded to the right of the following existing tables: +New variables related to Std 229 are appended to the right of the following existing tables: - Equipment Summary - Heating Coils - Equipment Summary - DX Heating Coils @@ -69,3 +69,9 @@ See pull request [#9982](https://github.com/NREL/EnergyPlus/pull/9982) for more (d) "Steam" to "DistrictHeatingSteam" See [9260](https://github.com/NREL/EnergyPlus/pull/9260) + +### Heat Pump Water Heater Information table + +Columns `"DX Coil Total Cooling Rate {W` and `HPWH Only}"` have been merged into a single `DX Coil Total Cooling Rate {W}`. + + See [10214](https://github.com/NREL/EnergyPlus/pull/10214) \ No newline at end of file From 993bf85e458f42535d2476c738c91300ce420aae Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 8 Sep 2023 13:44:34 -0600 Subject: [PATCH 118/161] Update OutputChanges23-1-0-to-23-2-0.md [decent_ci_skip] --- .../OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md index 5b5c657723f..16e43491296 100644 --- a/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md +++ b/src/Transition/OutputRulesFiles/OutputChanges23-1-0-to-23-2-0.md @@ -69,3 +69,9 @@ See pull request [#9982](https://github.com/NREL/EnergyPlus/pull/9982) for more (d) "Steam" to "DistrictHeatingSteam" See [9260](https://github.com/NREL/EnergyPlus/pull/9260) + +### WaterHeaterReportMonthly report + +Column "Water Heater Source Energy []" renamed to "Water Heater Source Side Heat Transfer Energy [J]". + +See [10209](https://github.com/NREL/EnergyPlus/pull/10209) From 6402d8c504b8cea3964052ecee8ea9fa78d01251 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 17 Jul 2023 15:11:07 +0200 Subject: [PATCH 119/161] Test for 9873 --- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 116 ++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index a899b87fd84..5990ff376dd 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -10265,6 +10265,122 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) EXPECT_NEAR(11.80, sf_temps(2).Perimeter, 0.02); } +TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) +{ + // Test for #9873 + std::string const idf_objects = delimited_string({ + + "BuildingSurface:Detailed,", + " Zn001:Ceiling002, !- Name", + " Ceiling, !- Surface Type", + " FLOOR, !- Construction Name", + " ZONE 1, !- Zone Name", + " , !- Space Name", + " Surface, !- Outside Boundary Condition", + " Zn002:Flr002, !- Outside Boundary Condition Object", + " NoSun, !- Sun Exposure", + " NoWind, !- Wind Exposure", + " , !- View Factor to Ground", + " , !- Number of Vertices", + " -41.27, -37.05, 0.00, !- X,Y,Z ==> Vertex 1 {m}", + " -41.27, -37.04, 0.00, !- X,Y,Z ==> Vertex 2 {m}", + " -41.25, -37.04, 0.00, !- X,Y,Z ==> Vertex 3 {m}", + " -41.25, -33.59, 0.00, !- X,Y,Z ==> Vertex 4 {m}", + " -41.28, -33.59, 0.00, !- X,Y,Z ==> Vertex 5 {m}", + " -41.28, -37.05, 0.00; !- X,Y,Z ==> Vertex 6 {m}", + + "BuildingSurface:Detailed,", + " Zn002:Flr002, !- Name", + " Floor, !- Surface Type", + " FLOOR, !- Construction Name", + " ZONE 2, !- Zone Name", + " , !- Space Name", + " Surface, !- Outside Boundary Condition", + " Zn001:Ceiling002, !- Outside Boundary Condition Object", + " NoSun, !- Sun Exposure", + " NoWind, !- Wind Exposure", + " , !- View Factor to Ground", + " , !- Number of Vertices", + " -41.28, -37.05, 0.00, !- X,Y,Z ==> Vertex 1 {m}", + " -41.28, -33.59, 0.00, !- X,Y,Z ==> Vertex 2 {m}", + " -41.25, -33.59, 0.00, !- X,Y,Z ==> Vertex 3 {m}", + " -41.25, -37.04, 0.00, !- X,Y,Z ==> Vertex 4 {m}", + " -41.27, -37.04, 0.00, !- X,Y,Z ==> Vertex 5 {m}", + " -41.27, -37.05, 0.00; !- X,Y,Z ==> Vertex 6 {m}", + + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataGlobal->NumOfZones = 2; + state->dataHeatBal->Zone.allocate(2); + state->dataHeatBal->Zone(1).Name = "ZONE 1"; + state->dataHeatBal->Zone(2).Name = "ZONE 2"; + state->dataSurfaceGeometry->SurfaceTmp.allocate(2); + int SurfNum = 0; + int TotHTSurfs = 2; + Array1D_string const BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}); + Array1D const BaseSurfIDs( + 3, {DataSurfaces::SurfaceClass::Wall, DataSurfaces::SurfaceClass::Floor, DataSurfaces::SurfaceClass::Roof}); + int NeedToAddSurfaces; + + bool ErrorsFound(false); + GetGeometryParameters(*state, ErrorsFound); + EXPECT_FALSE(ErrorsFound); + + state->dataSurfaceGeometry->CosZoneRelNorth.allocate(2); + state->dataSurfaceGeometry->SinZoneRelNorth.allocate(2); + + state->dataSurfaceGeometry->CosZoneRelNorth = 1.0; + state->dataSurfaceGeometry->SinZoneRelNorth = 0.0; + state->dataSurfaceGeometry->SinBldgRelNorth = 0.0; + state->dataSurfaceGeometry->CosBldgRelNorth = 1.0; + + state->dataHeatBal->TotConstructs = 1; + state->dataConstruction->Construct.allocate(1); + state->dataConstruction->Construct(1).Name = "FLOOR"; + + state->dataGlobal->DisplayExtraWarnings = true; + + GetHTSurfaceData(*state, ErrorsFound, SurfNum, TotHTSurfs, 0, 0, 0, BaseSurfCls, BaseSurfIDs, NeedToAddSurfaces); + EXPECT_FALSE(ErrorsFound); + + EXPECT_EQ(2, SurfNum); + auto const error_string = delimited_string({ + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", + " ** ~~~ ** Vertex [5]=(54.37,-28.88,0.00)", + " ** ~~~ ** Vertex [6]=(54.37,-28.89,0.00)", + " ** ~~~ ** Dropping Vertex [6].", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", + " ** ~~~ ** Vertex [5]=(54.37,-28.88,0.00)", + " ** ~~~ ** Vertex [1]=(54.38,-28.89,0.00)", + " ** ~~~ ** Dropping Vertex [1].", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", + " ** ~~~ ** Vertex [1]=(54.37,-28.89,0.00)", + " ** ~~~ ** Vertex [2]=(54.37,-28.88,0.00)", + " ** ~~~ ** Dropping Vertex [2].", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", + " ** ~~~ ** Vertex [5]=(54.38,-28.89,0.00)", + " ** ~~~ ** Vertex [1]=(54.37,-28.89,0.00)", + " ** ~~~ ** Dropping Vertex [1].", + }); + EXPECT_TRUE(compare_err_stream(error_string, true)); + + const auto &sf_temps = state->dataSurfaceGeometry->SurfaceTmp; + EXPECT_EQ(2, sf_temps.size()); + EXPECT_EQ("ZN001:CEILING002", sf_temps(1).Name); + EXPECT_EQ("ZN002:FLR002", sf_temps(2).Name); + + EXPECT_EQ(4, sf_temps(1).Sides); + EXPECT_EQ(4, sf_temps(1).Vertex.size()); + + EXPECT_EQ(4, sf_temps(2).Sides); + EXPECT_EQ(4, sf_temps(2).Vertex.size()); + + EXPECT_NEAR(11.80, sf_temps(1).Perimeter, 0.02); + EXPECT_NEAR(11.80, sf_temps(2).Perimeter, 0.02); +} + TEST_F(EnergyPlusFixture, Wrong_Window_Construction) { // Test for #9331 - Crash in debug when wrong construction name is used for a Window From a7735422824a13746e4a58c2e9c969272dbae12a Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 17 Jul 2023 15:11:20 +0200 Subject: [PATCH 120/161] parametrize the test --- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 113 +++++++++++--------- 1 file changed, 64 insertions(+), 49 deletions(-) diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index 5990ff376dd..88a164f1591 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -10268,48 +10268,63 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) { // Test for #9873 - std::string const idf_objects = delimited_string({ - - "BuildingSurface:Detailed,", - " Zn001:Ceiling002, !- Name", - " Ceiling, !- Surface Type", - " FLOOR, !- Construction Name", - " ZONE 1, !- Zone Name", - " , !- Space Name", - " Surface, !- Outside Boundary Condition", - " Zn002:Flr002, !- Outside Boundary Condition Object", - " NoSun, !- Sun Exposure", - " NoWind, !- Wind Exposure", - " , !- View Factor to Ground", - " , !- Number of Vertices", - " -41.27, -37.05, 0.00, !- X,Y,Z ==> Vertex 1 {m}", - " -41.27, -37.04, 0.00, !- X,Y,Z ==> Vertex 2 {m}", - " -41.25, -37.04, 0.00, !- X,Y,Z ==> Vertex 3 {m}", - " -41.25, -33.59, 0.00, !- X,Y,Z ==> Vertex 4 {m}", - " -41.28, -33.59, 0.00, !- X,Y,Z ==> Vertex 5 {m}", - " -41.28, -37.05, 0.00; !- X,Y,Z ==> Vertex 6 {m}", - - "BuildingSurface:Detailed,", - " Zn002:Flr002, !- Name", - " Floor, !- Surface Type", - " FLOOR, !- Construction Name", - " ZONE 2, !- Zone Name", - " , !- Space Name", - " Surface, !- Outside Boundary Condition", - " Zn001:Ceiling002, !- Outside Boundary Condition Object", - " NoSun, !- Sun Exposure", - " NoWind, !- Wind Exposure", - " , !- View Factor to Ground", - " , !- Number of Vertices", - " -41.28, -37.05, 0.00, !- X,Y,Z ==> Vertex 1 {m}", - " -41.28, -33.59, 0.00, !- X,Y,Z ==> Vertex 2 {m}", - " -41.25, -33.59, 0.00, !- X,Y,Z ==> Vertex 3 {m}", - " -41.25, -37.04, 0.00, !- X,Y,Z ==> Vertex 4 {m}", - " -41.27, -37.04, 0.00, !- X,Y,Z ==> Vertex 5 {m}", - " -41.27, -37.05, 0.00; !- X,Y,Z ==> Vertex 6 {m}", - - }); + constexpr double offset = 0.01; + + constexpr double min_x = -41.28; + constexpr double max_x = min_x + 0.03; + constexpr double off_x = min_x + offset; + + constexpr double min_y = -37.05; + constexpr double max_y = min_y + 0.09; + constexpr double off_y = min_y + offset; + + std::string const idf_objects = fmt::format(R"idf( + BuildingSurface:Detailed, + Zn001:Ceiling002, !- Name + Ceiling, !- Surface Type + FLOOR, !- Construction Name + ZONE 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Zn002:Flr002, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + {off_x:.2f}, {min_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 1 + {off_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 2 + {max_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 3 + {max_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 4 + {min_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 5 + {min_x:.2f}, {min_y:.2f}, 0.00; !- X,Y,Z ==> Vertex 6 + + BuildingSurface:Detailed, + Zn002:Flr002, !- Name + Floor, !- Surface Type + FLOOR, !- Construction Name + ZONE 2, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Zn001:Ceiling002, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + {min_x:.2f}, {min_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 1 + {min_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 2 + {max_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 3 + {max_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 4 + {off_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 5 + {off_x:.2f}, {min_y:.2f}, 0.00; !- X,Y,Z ==> Vertex 6 + + )idf", + fmt::arg("min_x", min_x), + fmt::arg("max_x", max_x), + fmt::arg("off_x", off_x), + fmt::arg("min_y", min_y), + fmt::arg("max_y", max_y), + fmt::arg("off_y", off_y)); ASSERT_TRUE(process_idf(idf_objects)); state->dataGlobal->NumOfZones = 2; @@ -10348,17 +10363,17 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) EXPECT_EQ(2, SurfNum); auto const error_string = delimited_string({ " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - " ** ~~~ ** Vertex [5]=(54.37,-28.88,0.00)", - " ** ~~~ ** Vertex [6]=(54.37,-28.89,0.00)", - " ** ~~~ ** Dropping Vertex [6].", + fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", off_x, min_y), + fmt::format(" ** ~~~ ** Vertex [2]=({:.2f},{:.2f},0.00)", off_x, off_y), + " ** ~~~ ** Dropping Vertex [2].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - " ** ~~~ ** Vertex [5]=(54.37,-28.88,0.00)", - " ** ~~~ ** Vertex [1]=(54.38,-28.89,0.00)", + fmt::format(" ** ~~~ ** Vertex [5]=({:.2f},{:.2f},0.00)", min_x, min_y), + fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", off_x, min_y), " ** ~~~ ** Dropping Vertex [1].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", - " ** ~~~ ** Vertex [1]=(54.37,-28.89,0.00)", - " ** ~~~ ** Vertex [2]=(54.37,-28.88,0.00)", - " ** ~~~ ** Dropping Vertex [2].", + fmt::format(" ** ~~~ ** Vertex [5]=({:.2f},{:.2f},0.00)", off_x, off_y), + fmt::format(" ** ~~~ ** Vertex [6]=({:.2f},{:.2f},0.00)", off_x, min_y), + " ** ~~~ ** Dropping Vertex [6].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", " ** ~~~ ** Vertex [5]=(54.38,-28.89,0.00)", " ** ~~~ ** Vertex [1]=(54.37,-28.89,0.00)", From ee42e0ef0ea93ffcdb2d81f24cef562a40de6bec Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 18 Jul 2023 11:50:42 +0200 Subject: [PATCH 121/161] Finish the test with the wanted behavior --- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 87 +++++++++++---------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index 88a164f1591..793e5beca9d 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -10267,7 +10267,19 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) { - // Test for #9873 + // Test for #9873 - We expect the point marked "x" to be popped + // ▲ ▲ + // │ │ + // 2 o────────o 3 5 o────────o 4 + // │ │ │ │ + // ┤ │ │ │ + // │ Floor │ │Ceiling │ + // ┤ │ │ │ + // │ 5 │ │ 2 │ + // ┤ o─────o 4 │ o─────o 3 + // │ │ │ │ + // o──x──┬──┬───► o──x─────────► + // 1 6 x 6 1 constexpr double offset = 0.01; @@ -10276,29 +10288,12 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) constexpr double off_x = min_x + offset; constexpr double min_y = -37.05; - constexpr double max_y = min_y + 0.09; + constexpr double max_y = min_y + 0.04; constexpr double off_y = min_y + offset; - std::string const idf_objects = fmt::format(R"idf( - BuildingSurface:Detailed, - Zn001:Ceiling002, !- Name - Ceiling, !- Surface Type - FLOOR, !- Construction Name - ZONE 1, !- Zone Name - , !- Space Name - Surface, !- Outside Boundary Condition - Zn002:Flr002, !- Outside Boundary Condition Object - NoSun, !- Sun Exposure - NoWind, !- Wind Exposure - , !- View Factor to Ground - , !- Number of Vertices - {off_x:.2f}, {min_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 1 - {off_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 2 - {max_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 3 - {max_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 4 - {min_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 5 - {min_x:.2f}, {min_y:.2f}, 0.00; !- X,Y,Z ==> Vertex 6 + constexpr double perimeter = 2 * ((max_x - min_x) + (max_y - min_y)); + std::string const idf_objects = fmt::format(R"idf( BuildingSurface:Detailed, Zn002:Flr002, !- Name Floor, !- Surface Type @@ -10318,6 +10313,24 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) {off_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 5 {off_x:.2f}, {min_y:.2f}, 0.00; !- X,Y,Z ==> Vertex 6 + BuildingSurface:Detailed, + Zn001:Ceiling002, !- Name + Ceiling, !- Surface Type + FLOOR, !- Construction Name + ZONE 1, !- Zone Name + , !- Space Name + Surface, !- Outside Boundary Condition + Zn002:Flr002, !- Outside Boundary Condition Object + NoSun, !- Sun Exposure + NoWind, !- Wind Exposure + , !- View Factor to Ground + , !- Number of Vertices + {off_x:.2f}, {min_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 1 + {off_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 2 + {max_x:.2f}, {off_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 3 + {max_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 4 + {min_x:.2f}, {max_y:.2f}, 0.00, !- X,Y,Z ==> Vertex 5 + {min_x:.2f}, {min_y:.2f}, 0.00; !- X,Y,Z ==> Vertex 6 )idf", fmt::arg("min_x", min_x), fmt::arg("max_x", max_x), @@ -10362,38 +10375,30 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) EXPECT_EQ(2, SurfNum); auto const error_string = delimited_string({ - " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", off_x, min_y), - fmt::format(" ** ~~~ ** Vertex [2]=({:.2f},{:.2f},0.00)", off_x, off_y), - " ** ~~~ ** Dropping Vertex [2].", - " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - fmt::format(" ** ~~~ ** Vertex [5]=({:.2f},{:.2f},0.00)", min_x, min_y), - fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", off_x, min_y), - " ** ~~~ ** Dropping Vertex [1].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", - fmt::format(" ** ~~~ ** Vertex [5]=({:.2f},{:.2f},0.00)", off_x, off_y), fmt::format(" ** ~~~ ** Vertex [6]=({:.2f},{:.2f},0.00)", off_x, min_y), + fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", min_x, min_y), " ** ~~~ ** Dropping Vertex [6].", - " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", - " ** ~~~ ** Vertex [5]=(54.38,-28.89,0.00)", - " ** ~~~ ** Vertex [1]=(54.37,-28.89,0.00)", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", + fmt::format(" ** ~~~ ** Vertex [1]=({:.2f},{:.2f},0.00)", off_x, min_y), + fmt::format(" ** ~~~ ** Vertex [2]=({:.2f},{:.2f},0.00)", off_x, off_y), " ** ~~~ ** Dropping Vertex [1].", }); EXPECT_TRUE(compare_err_stream(error_string, true)); const auto &sf_temps = state->dataSurfaceGeometry->SurfaceTmp; EXPECT_EQ(2, sf_temps.size()); - EXPECT_EQ("ZN001:CEILING002", sf_temps(1).Name); - EXPECT_EQ("ZN002:FLR002", sf_temps(2).Name); + EXPECT_EQ("ZN002:FLR002", sf_temps(1).Name); + EXPECT_EQ("ZN001:CEILING002", sf_temps(2).Name); - EXPECT_EQ(4, sf_temps(1).Sides); - EXPECT_EQ(4, sf_temps(1).Vertex.size()); + EXPECT_EQ(5, sf_temps(1).Sides); + EXPECT_EQ(5, sf_temps(1).Vertex.size()); - EXPECT_EQ(4, sf_temps(2).Sides); - EXPECT_EQ(4, sf_temps(2).Vertex.size()); + EXPECT_EQ(5, sf_temps(2).Sides); + EXPECT_EQ(5, sf_temps(2).Vertex.size()); - EXPECT_NEAR(11.80, sf_temps(1).Perimeter, 0.02); - EXPECT_NEAR(11.80, sf_temps(2).Perimeter, 0.02); + EXPECT_NEAR(perimeter, sf_temps(1).Perimeter, 0.02); + EXPECT_NEAR(perimeter, sf_temps(2).Perimeter, 0.02); } TEST_F(EnergyPlusFixture, Wrong_Window_Construction) From 3bc9b3db5afec360197b3c8b81129f97d6337b1d Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 18 Jul 2023 11:53:19 +0200 Subject: [PATCH 122/161] Fix #9873 - Always pop the worst coincident vertex, not the first one found. * We calculate the distance between the vertex and the next one (distanceThisToNext), as well as its previous one (distanceThisToPrev). * We find the vertex for which: * at least one of these two distances is less than the tolerance, and, * that minimizes the sum of distanceThisToPrev + distanceThisToNext --- src/EnergyPlus/SurfaceGeometry.cc | 147 +++++++++++++++++++++--------- 1 file changed, 103 insertions(+), 44 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index f67572ba9b2..13417c77da7 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -9308,6 +9308,65 @@ namespace SurfaceGeometry { } } + struct PopCoincidentVertexReturn + { + // bool popNeeded; + double perimeter; + int poppedVertexPos = -1; // This is a STL vector position, 0-indexed + int keptVertexPos = -1; + }; + + PopCoincidentVertexReturn checkPopCoincidentVertex(const Array1D &vertices) + { + constexpr double tolerance = 0.01; + + size_t const nSides = vertices.size(); + + // Vector of distance from this vertex to the next one + std::vector distances(nSides); + size_t index = 0; + double min_distance = std::numeric_limits::max(); + double perimeter = 0.0; + for (auto it = vertices.begin(); it != vertices.end(); ++it) { + auto itnext = std::next(it); + if (itnext == std::end(vertices)) { + itnext = std::begin(vertices); + } + const auto dist = distance(*it, *itnext); + distances[index++] = dist; + min_distance = std::min(min_distance, dist); + perimeter += dist; + } + if (min_distance >= tolerance) { + return {perimeter}; + } + + Real64 min_weight = std::numeric_limits::max(); + int poppedVertexPos = -1; + int keptVertexPos = -1; + + for (size_t index = 0; index < nSides; ++index) { + size_t const prevIndex = (index == 0) ? nSides - 1 : index - 1; + Real64 &distanceThisToNext = distances[index]; + Real64 &distanceThisToPrev = distances[prevIndex]; + if ((distanceThisToNext >= tolerance) && (distanceThisToPrev >= tolerance)) { + continue; + } + Real64 const weight = distanceThisToNext + distanceThisToPrev; + if (weight < min_weight) { + min_weight = weight; + poppedVertexPos = static_cast(index); + if (distanceThisToPrev < distanceThisToNext) { + keptVertexPos = prevIndex; + } else { + keptVertexPos = static_cast((index == nSides - 1) ? 0 : index + 1); + } + } + } + + return {perimeter, poppedVertexPos, keptVertexPos}; + } + void GetVertices(EnergyPlusData &state, int const SurfNum, // Current surface number int const NSides, // Number of sides to figure @@ -9365,7 +9424,6 @@ namespace SurfaceGeometry { std::string TiltString; Real64 ThisWidth; Real64 ThisHeight; - Real64 DistanceCheck; // unused REAL(r64) :: ccwtest // unused LOGICAL :: SurfaceCCW Real64 dotp; @@ -9483,54 +9541,55 @@ namespace SurfaceGeometry { auto &vertices = surface.Vertex; auto &nSides = surface.Sides; - bool poppedVertex = true; - while (poppedVertex) { - poppedVertex = false; - Perimeter = 0.0; + while (true) { + PopCoincidentVertexReturn const popResult = checkPopCoincidentVertex(vertices); + Perimeter = popResult.perimeter; + if (popResult.poppedVertexPos < 0) { + // No pop needed, we're done + break; + } - for (auto it = vertices.begin(); it != vertices.end(); ++it) { - auto itnext = std::next(it); - if (itnext == std::end(vertices)) { - itnext = std::begin(vertices); - } + auto it = vertices.begin(); + std::advance(it, popResult.poppedVertexPos); + int const poppedVertexIndex = popResult.poppedVertexPos + 1; - // TODO: use isAlmostEqual3Pt for consistency? (which uses 0.0127 m / 1/2inch instead of 0.01 m) - DistanceCheck = distance(*it, *itnext); - if (DistanceCheck < 0.01) { - int curVertexIndex = std::distance(vertices.begin(), it) + 1; - int nextVertexIndex = std::distance(vertices.begin(), itnext) + 1; - if (state.dataGlobal->DisplayExtraWarnings) { - ShowWarningError(state, - format("{}Distance between two vertices < .01, possibly coincident. for Surface={}, in Zone={}", - RoutineName, - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, - state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName)); - ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", curVertexIndex, it->x, it->y, it->z)); - ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", nextVertexIndex, itnext->x, itnext->y, it->z)); - } - ++state.dataErrTracking->TotalCoincidentVertices; - if (nSides > 3) { - if (state.dataGlobal->DisplayExtraWarnings) { - ShowContinueError(state, format("Dropping Vertex [{}].", nextVertexIndex)); - } - --nSides; - vertices.erase(itnext); - poppedVertex = true; - break; - } else { - if (state.dataGlobal->DisplayExtraWarnings) { - ShowContinueError(state, - format("Cannot Drop Vertex [{}]; Number of Surface Sides at minimum. This surface is now a " - "degenerate surface.", - curVertexIndex)); - } - ++state.dataErrTracking->TotalDegenerateSurfaces; - // mark degenerate surface? - } + auto itKept = vertices.begin(); + std::advance(itKept, popResult.keptVertexPos); + int const keptVertexIndex = popResult.keptVertexPos + 1; + + if (state.dataGlobal->DisplayExtraWarnings) { + ShowWarningError(state, + format("{}Distance between two vertices < .01, possibly coincident. for Surface={}, in Zone={}", + RoutineName, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, + state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName)); + if (poppedVertexIndex > keptVertexIndex && poppedVertexIndex != nSides) { + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", keptVertexIndex, itKept->x, itKept->y, itKept->z)); + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", poppedVertexIndex, it->x, it->y, it->z)); } else { - Perimeter += DistanceCheck; + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", poppedVertexIndex, it->x, it->y, it->z)); + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", keptVertexIndex, itKept->x, itKept->y, itKept->z)); } } + ++state.dataErrTracking->TotalCoincidentVertices; + if (nSides <= 3) { + if (state.dataGlobal->DisplayExtraWarnings) { + ShowContinueError(state, + format("Cannot Drop Vertex [{}]; Number of Surface Sides at minimum. This surface is now a " + "degenerate surface.", + poppedVertexIndex)); + } + ++state.dataErrTracking->TotalDegenerateSurfaces; + // mark degenerate surface? + break; + } + + if (state.dataGlobal->DisplayExtraWarnings) { + ShowContinueError(state, format("Dropping Vertex [{}].", poppedVertexIndex)); + } + --nSides; + vertices.erase(it); + // No need to recompute perimeter, because it'll be done in the next iteration, until no popping or degenerate happens } state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Perimeter = Perimeter; From 571b957a438847f38324c38cf23e30f01e5ade5e Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 18 Jul 2023 16:49:19 +0200 Subject: [PATCH 123/161] Adjust existing test and fix order of vertices being printed when a wrap around is happening --- src/EnergyPlus/SurfaceGeometry.cc | 11 ++- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 84 ++++++++++++--------- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 13417c77da7..0cfe9cbce94 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -9310,7 +9310,6 @@ namespace SurfaceGeometry { struct PopCoincidentVertexReturn { - // bool popNeeded; double perimeter; int poppedVertexPos = -1; // This is a STL vector position, 0-indexed int keptVertexPos = -1; @@ -9563,12 +9562,16 @@ namespace SurfaceGeometry { RoutineName, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).Name, state.dataSurfaceGeometry->SurfaceTmp(SurfNum).ZoneName)); - if (poppedVertexIndex > keptVertexIndex && poppedVertexIndex != nSides) { - ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", keptVertexIndex, itKept->x, itKept->y, itKept->z)); + + bool const printPoppedFirst = (poppedVertexIndex < keptVertexIndex) ? !(poppedVertexIndex == 1 && keptVertexIndex == nSides) + : (poppedVertexIndex == nSides && keptVertexIndex == 1); + + if (printPoppedFirst) { ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", poppedVertexIndex, it->x, it->y, it->z)); + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", keptVertexIndex, itKept->x, itKept->y, itKept->z)); } else { - ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", poppedVertexIndex, it->x, it->y, it->z)); ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", keptVertexIndex, itKept->x, itKept->y, itKept->z)); + ShowContinueError(state, format("Vertex [{}]=({:.2R},{:.2R},{:.2R})", poppedVertexIndex, it->x, it->y, it->z)); } } ++state.dataErrTracking->TotalCoincidentVertices; diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index 793e5beca9d..3b107476868 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -10152,27 +10152,25 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetSurfaceGroundSurfsTest) TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) { - // Test for #9123 + // Test for #9123 - We expect the point marked "x" to be popped. + // Once it is popped, point "y" is still below tolerance with the "#" point: + // * Floor: originally 6 but now 5 + // * Ceiling: 1 + // + // ▲ ▲ + // │ │ + // 4 o────────o 5 3 o────────o 2 + // │ │ │ │ + // ╵ ╵ ╵ ╵ + // ╵ Floor ╵ ╵Ceiling ╵ + // ╵ ╵ ╵ ╵ + // 3 │ 2 │ 4 │ 5 │ + // o─────y │ o─────y │ + // │ │ │ │ │ │ + // └─────x──#───► └─────x──#───► + // 1 6 6 1 + std::string const idf_objects = delimited_string({ - "BuildingSurface:Detailed,", - " Zn001:Ceiling002, !- Name", - " Ceiling, !- Surface Type", - " FLOOR, !- Construction Name", - " ZONE 1, !- Zone Name", - " , !- Space Name", - " Surface, !- Outside Boundary Condition", - " Zn002:Flr002, !- Outside Boundary Condition Object", - " NoSun, !- Sun Exposure", - " NoWind, !- Wind Exposure", - " , !- View Factor to Ground", - " , !- Number of Vertices", - " 54.379, -28.887, 3.7, !- X,Y,Z Vertex 1 {m}", - " 54.379, -23.003, 3.7, !- X,Y,Z Vertex 2 {m}", - " 54.36, -23.003, 3.7, !- X,Y,Z Vertex 3 {m}", - " 54.36, -28.881, 3.7, !- X,Y,Z Vertex 4 {m}", - " 54.373, -28.881, 3.7, !- X,Y,Z Vertex 5 {m}", - " 54.373, -28.887, 3.7; !- X,Y,Z Vertex 6 {m}", - "", "BuildingSurface:Detailed,", " Zn002:Flr002, !- Name", " Floor, !- Surface Type", @@ -10192,6 +10190,24 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) " 54.379, -23.003, 3.7, !- X,Y,Z Vertex 5 {m}", " 54.379, -28.887, 3.7; !- X,Y,Z Vertex 6 {m}", + "BuildingSurface:Detailed,", + " Zn001:Ceiling002, !- Name", + " Ceiling, !- Surface Type", + " FLOOR, !- Construction Name", + " ZONE 1, !- Zone Name", + " , !- Space Name", + " Surface, !- Outside Boundary Condition", + " Zn002:Flr002, !- Outside Boundary Condition Object", + " NoSun, !- Sun Exposure", + " NoWind, !- Wind Exposure", + " , !- View Factor to Ground", + " , !- Number of Vertices", + " 54.379, -28.887, 3.7, !- X,Y,Z Vertex 1 {m}", + " 54.379, -23.003, 3.7, !- X,Y,Z Vertex 2 {m}", + " 54.36, -23.003, 3.7, !- X,Y,Z Vertex 3 {m}", + " 54.36, -28.881, 3.7, !- X,Y,Z Vertex 4 {m}", + " 54.373, -28.881, 3.7, !- X,Y,Z Vertex 5 {m}", + " 54.373, -28.887, 3.7; !- X,Y,Z Vertex 6 {m}", }); ASSERT_TRUE(process_idf(idf_objects)); @@ -10231,29 +10247,29 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) EXPECT_EQ(2, SurfNum); auto const error_string = delimited_string({ - " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - " ** ~~~ ** Vertex [5]=(54.37,-28.88,3.70)", - " ** ~~~ ** Vertex [6]=(54.37,-28.89,3.70)", - " ** ~~~ ** Dropping Vertex [6].", - " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", - " ** ~~~ ** Vertex [5]=(54.37,-28.88,3.70)", - " ** ~~~ ** Vertex [1]=(54.38,-28.89,3.70)", - " ** ~~~ ** Dropping Vertex [1].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", " ** ~~~ ** Vertex [1]=(54.37,-28.89,3.70)", " ** ~~~ ** Vertex [2]=(54.37,-28.88,3.70)", - " ** ~~~ ** Dropping Vertex [2].", + " ** ~~~ ** Dropping Vertex [1].", " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN002:FLR002, in Zone=ZONE 2", " ** ~~~ ** Vertex [5]=(54.38,-28.89,3.70)", - " ** ~~~ ** Vertex [1]=(54.37,-28.89,3.70)", + " ** ~~~ ** Vertex [1]=(54.37,-28.88,3.70)", " ** ~~~ ** Dropping Vertex [1].", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", + " ** ~~~ ** Vertex [6]=(54.37,-28.89,3.70)", + " ** ~~~ ** Vertex [1]=(54.38,-28.89,3.70)", + " ** ~~~ ** Dropping Vertex [6].", + " ** Warning ** GetVertices: Distance between two vertices < .01, possibly coincident. for Surface=ZN001:CEILING002, in Zone=ZONE 1", + " ** ~~~ ** Vertex [5]=(54.37,-28.88,3.70)", + " ** ~~~ ** Vertex [1]=(54.38,-28.89,3.70)", + " ** ~~~ ** Dropping Vertex [5].", }); EXPECT_TRUE(compare_err_stream(error_string, true)); const auto &sf_temps = state->dataSurfaceGeometry->SurfaceTmp; EXPECT_EQ(2, sf_temps.size()); - EXPECT_EQ("ZN001:CEILING002", sf_temps(1).Name); - EXPECT_EQ("ZN002:FLR002", sf_temps(2).Name); + EXPECT_EQ("ZN002:FLR002", sf_temps(1).Name); + EXPECT_EQ("ZN001:CEILING002", sf_temps(2).Name); EXPECT_EQ(4, sf_temps(1).Sides); EXPECT_EQ(4, sf_temps(1).Vertex.size()); @@ -10265,9 +10281,9 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates) EXPECT_NEAR(11.80, sf_temps(2).Perimeter, 0.02); } -TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Tiny) +TEST_F(EnergyPlusFixture, SurfaceGeometry_GetVerticesDropDuplicates_Once) { - // Test for #9873 - We expect the point marked "x" to be popped + // Test for #9873 - We expect the point marked "x" to be popped. Once it is popped, there are no distances that are below tolerance. // ▲ ▲ // │ │ // 2 o────────o 3 5 o────────o 4 From 3e7104012839d443a429d886a1e72b447bdffe60 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Sat, 9 Sep 2023 08:43:38 +0200 Subject: [PATCH 124/161] Add some comments as requested --- src/EnergyPlus/SurfaceGeometry.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 0cfe9cbce94..bdca2e379d2 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -9321,7 +9321,7 @@ namespace SurfaceGeometry { size_t const nSides = vertices.size(); - // Vector of distance from this vertex to the next one + // Pass one: Vector of distance from this vertex to the next one std::vector distances(nSides); size_t index = 0; double min_distance = std::numeric_limits::max(); @@ -9336,10 +9336,13 @@ namespace SurfaceGeometry { min_distance = std::min(min_distance, dist); perimeter += dist; } + // Return early if nothing to be popped if (min_distance >= tolerance) { return {perimeter}; } + // Pass two: figure out the vertex that is coincident with its previous and/or next vertex and + // that minimizes the (distanceThisToNext + distanceThisToPrev). Real64 min_weight = std::numeric_limits::max(); int poppedVertexPos = -1; int keptVertexPos = -1; @@ -9363,6 +9366,7 @@ namespace SurfaceGeometry { } } + // Return the keptVertexPos (which can be the previous or the next), so we can print the displayExtraWarning correctly return {perimeter, poppedVertexPos, keptVertexPos}; } @@ -9548,6 +9552,7 @@ namespace SurfaceGeometry { break; } + // Grab the popped one, and the kept one (regardless of whether it's previous or next) auto it = vertices.begin(); std::advance(it, popResult.poppedVertexPos); int const poppedVertexIndex = popResult.poppedVertexPos + 1; @@ -9583,6 +9588,7 @@ namespace SurfaceGeometry { poppedVertexIndex)); } ++state.dataErrTracking->TotalDegenerateSurfaces; + // If degenerate, we won't be able to pop now nor later, so exit // mark degenerate surface? break; } From fb0ec56a4180ac7bb398aa534af9af1ba34d389e Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 11 Sep 2023 10:15:44 +0200 Subject: [PATCH 125/161] Add a ctest for #10037 --- src/ConvertInputFormat/CMakeLists.txt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ConvertInputFormat/CMakeLists.txt b/src/ConvertInputFormat/CMakeLists.txt index 2b675a2b190..e3d901dc916 100644 --- a/src/ConvertInputFormat/CMakeLists.txt +++ b/src/ConvertInputFormat/CMakeLists.txt @@ -36,7 +36,7 @@ if(BUILD_TESTING) configure_file(${IDF_FILE} "${TEST_DIR}/1ZoneUncontrolled.idf" COPYONLY) configure_file(${IDF_FILE} "${TEST_DIR}/1.ZoneUncontrolled.idf" COPYONLY) - add_test(NAME ConvertInputFormat2.RegularFile_AbsolutePath + add_test(NAME ConvertInputFormat.RegularFile_AbsolutePath COMMAND "${Python_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/test_convert_input_format.py" --convertinputformat-exe $ --out-dir "${TEST_DIR}/RegularFile_AbsolutePath" @@ -44,7 +44,7 @@ if(BUILD_TESTING) --input-file "${TEST_DIR}/1ZoneUncontrolled.idf" ) - add_test(NAME ConvertInputFormat2.RegularFile_RelativePath + add_test(NAME ConvertInputFormat.RegularFile_RelativePath COMMAND "${Python_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/test_convert_input_format.py" --convertinputformat-exe $ --out-dir "RegularFile_AbsolutePath" @@ -53,7 +53,7 @@ if(BUILD_TESTING) WORKING_DIRECTORY ${TEST_DIR} ) - add_test(NAME ConvertInputFormat2.ExtraDotFile_AbsolutePath + add_test(NAME ConvertInputFormat.ExtraDotFile_AbsolutePath COMMAND "${Python_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/test_convert_input_format.py" --convertinputformat-exe $ --out-dir "${TEST_DIR}/ExtraDotFile_AbsolutePath" @@ -61,7 +61,7 @@ if(BUILD_TESTING) --input-file "${TEST_DIR}/1.ZoneUncontrolled.idf" ) - add_test(NAME ConvertInputFormat2.ExtraDotFile__RelativePath + add_test(NAME ConvertInputFormat.ExtraDotFile__RelativePath COMMAND "${Python_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/test_convert_input_format.py" --convertinputformat-exe $ --out-dir "ExtraDotFile__RelativePath" @@ -69,4 +69,10 @@ if(BUILD_TESTING) --input-file "1.ZoneUncontrolled.idf" WORKING_DIRECTORY ${TEST_DIR} ) + + add_test(NAME ConvertInputFormat.DDYtoEPJSON + COMMAND ConvertInputFormat --output "${TEST_DIR}/DDY" --format epJSON "${PROJECT_SOURCE_DIR}/../../weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.ddy" + ) + set_tests_properties(ConvertInputFormat.DDYtoEPJSON PROPERTIES FAIL_REGULAR_EXPRESSION "ERROR;Input file conversion failed") + endif() From 9231b1979297ba35135f35e301e4760b95c082c7 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 11 Sep 2023 10:00:27 +0200 Subject: [PATCH 126/161] Fix #10037 - Allow Converting .ddy to epJSON --- src/ConvertInputFormat/main.cpp | 41 +++++++++++++++++++++------------ src/EnergyPlus/FileSystem.cc | 4 ++-- src/EnergyPlus/FileSystem.hh | 1 + 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/ConvertInputFormat/main.cpp b/src/ConvertInputFormat/main.cpp index 46fcf52bf98..c6a8a3677c0 100644 --- a/src/ConvertInputFormat/main.cpp +++ b/src/ConvertInputFormat/main.cpp @@ -238,12 +238,14 @@ bool checkForUnsupportedObjects(json const &epJSON, bool convertHVACTemplate) return errorsFound; } -bool processErrors(std::unique_ptr const &idf_parser, std::unique_ptr const &validation) +bool processErrors(std::unique_ptr const &idf_parser, std::unique_ptr const &validation, bool isDDY) { auto const idf_parser_errors = idf_parser->errors(); auto const idf_parser_warnings = idf_parser->warnings(); auto const validation_errors = validation->errors(); + bool hasValidationErrors = false; + auto const validation_warnings = validation->warnings(); for (auto const &error : idf_parser_errors) { @@ -253,15 +255,20 @@ bool processErrors(std::unique_ptr const &idf_parser, std::unique_ptr displayMessage(warning); } for (auto const &error : validation_errors) { + if (isDDY) { + if ((error.find("Missing required property 'Building'") != std::string::npos) || + (error.find("Missing required property 'GlobalGeometryRules'") != std::string::npos)) { + continue; + } + } + hasValidationErrors = true; displayMessage(error); } for (auto const &warning : validation_warnings) { displayMessage(warning); } - bool has_errors = validation->hasErrors() || idf_parser->hasErrors(); - - return has_errors; + return hasValidationErrors || idf_parser->hasErrors(); } void cleanEPJSON(json &epjson) @@ -295,14 +302,16 @@ bool processInput(fs::path const &inputFilePath, auto const inputFileType = EnergyPlus::FileSystem::getFileType(inputFilePath); - bool const isEpJSON = EnergyPlus::FileSystem::is_all_json_type(inputFileType); - bool const isCBOR = (inputFileType == EnergyPlus::FileSystem::FileTypes::CBOR); - bool const isMsgPack = (inputFileType == EnergyPlus::FileSystem::FileTypes::MsgPack); - bool const isUBJSON = (inputFileType == EnergyPlus::FileSystem::FileTypes::UBJSON); - bool const isBSON = (inputFileType == EnergyPlus::FileSystem::FileTypes::BSON); + const bool isEpJSON = EnergyPlus::FileSystem::is_all_json_type(inputFileType); + const bool isCBOR = (inputFileType == EnergyPlus::FileSystem::FileTypes::CBOR); + const bool isMsgPack = (inputFileType == EnergyPlus::FileSystem::FileTypes::MsgPack); + const bool isUBJSON = (inputFileType == EnergyPlus::FileSystem::FileTypes::UBJSON); + const bool isBSON = (inputFileType == EnergyPlus::FileSystem::FileTypes::BSON); + const bool isIDForIMF = EnergyPlus::FileSystem::is_idf_type(inputFileType); // IDF or IMF + const bool isDDY = (inputFileType == EnergyPlus::FileSystem::FileTypes::DDY); - if (!(isEpJSON || EnergyPlus::FileSystem::is_idf_type(inputFileType))) { - displayMessage("ERROR: Input file must have IDF, IMF, or epJSON extension."); + if (!(isEpJSON || isIDForIMF || isDDY)) { + displayMessage("ERROR: Input file must have IDF, IMF, DDY, or epJSON extension."); return false; } @@ -310,8 +319,7 @@ bool processInput(fs::path const &inputFilePath, (inputFileType == EnergyPlus::FileSystem::FileTypes::EpJSON || inputFileType == EnergyPlus::FileSystem::FileTypes::JSON)) { displayMessage("Same output format as input format requested (epJSON). Skipping conversion and moving to next file."); return false; - } else if (outputType == OutputTypes::IDF && - (inputFileType == EnergyPlus::FileSystem::FileTypes::IDF || inputFileType == EnergyPlus::FileSystem::FileTypes::IMF)) { + } else if (outputType == OutputTypes::IDF && (isIDForIMF || isDDY)) { displayMessage("Same output format as input format requested (IDF). Skipping conversion and moving to next file."); return false; } else if (outputType == OutputTypes::CBOR && isCBOR) { @@ -349,8 +357,11 @@ bool processInput(fs::path const &inputFilePath, return false; } - bool const is_valid = validation->validate(epJSON); - bool const hasErrors = processErrors(idf_parser, validation); + bool is_valid = validation->validate(epJSON); + bool const hasErrors = processErrors(idf_parser, validation, isDDY); + if (isDDY && !hasErrors) { + is_valid = true; + } bool const versionMatch = checkVersionMatch(epJSON); bool const unsupportedFound = checkForUnsupportedObjects(epJSON, convertHVACTemplate); diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index 00228fff45e..6ea9c7c4474 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -81,9 +81,9 @@ namespace FileSystem { #endif static constexpr std::array(FileTypes::Num)> FileTypesExt{ - "epJSON", "json", "glhe", "cbor", "msgpack", "ubjson", "bson", "idf", "imf", "csv", "tsv", "txt", "eso", "mtr"}; + "epJSON", "json", "glhe", "cbor", "msgpack", "ubjson", "bson", "idf", "imf", "csv", "tsv", "txt", "eso", "mtr", "ddy"}; static constexpr std::array(FileTypes::Num)> FileTypesExtUC{ - "EPJSON", "JSON", "GLHE", "CBOR", "MSGPACK", "UBJSON", "BSON", "IDF", "IMF", "CSV", "TSV", "TXT", "ESO", "MTR"}; + "EPJSON", "JSON", "GLHE", "CBOR", "MSGPACK", "UBJSON", "BSON", "IDF", "IMF", "CSV", "TSV", "TXT", "ESO", "MTR", "DDY"}; static_assert(FileTypesExt.size() == static_cast(FileTypes::Num), "Mismatched FileTypes enum and FileTypesExt array."); static_assert(FileTypesExtUC.size() == static_cast(FileTypes::Num), "Mismatched FileTypes enum and FileTypesExtUC array."); diff --git a/src/EnergyPlus/FileSystem.hh b/src/EnergyPlus/FileSystem.hh index eb7057f043a..a8c31c20300 100644 --- a/src/EnergyPlus/FileSystem.hh +++ b/src/EnergyPlus/FileSystem.hh @@ -115,6 +115,7 @@ namespace FileSystem { ESO, MTR, last_flat_file_type = MTR, + DDY, Num }; From 47bc988e9f985306241392d17ad715372621bc05 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 4 Sep 2023 10:27:08 +0200 Subject: [PATCH 127/161] Fix #10197 - Avoid race condition copying file. --- tst/EnergyPlus/unit/CMakeLists.txt | 3 +++ .../unit/CommandLineInterface.unit.cc | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tst/EnergyPlus/unit/CMakeLists.txt b/tst/EnergyPlus/unit/CMakeLists.txt index 8ea9d229679..4312000344f 100644 --- a/tst/EnergyPlus/unit/CMakeLists.txt +++ b/tst/EnergyPlus/unit/CMakeLists.txt @@ -291,4 +291,7 @@ set(test_src CommandLineInterface.unit.cc main.cc ) +# For CommandLineInterface.unit.cc, make an in.idf / in.epw in the test directory so we can test the legacy CLI (applies to CTest which sets the current directory to this one) +configure_file("${PROJECT_SOURCE_DIR}/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw" "in.epw" COPYONLY) +configure_file("Resources/UnitaryHybridUnitTest_DOSA.idf" "in.idf" COPYONLY) create_test_targets(energyplusapi "${test_src}" "${test_dependencies}" True) diff --git a/tst/EnergyPlus/unit/CommandLineInterface.unit.cc b/tst/EnergyPlus/unit/CommandLineInterface.unit.cc index 5a56368adcb..adb7b523cca 100644 --- a/tst/EnergyPlus/unit/CommandLineInterface.unit.cc +++ b/tst/EnergyPlus/unit/CommandLineInterface.unit.cc @@ -102,12 +102,24 @@ class CommandLineInterfaceFixture : public EnergyPlusFixture { EnergyPlusFixture::SetUpTestCase(); - // For the "legacy" mode, we need in.idf / in.epw in the current directory - auto inputFilePath = configured_source_directory() / "tst/EnergyPlus/unit/Resources/UnitaryHybridUnitTest_DOSA.idf"; - fs::copy_file(inputFilePath, FileSystem::getAbsolutePath("in.idf"), fs::copy_options::skip_existing); + // For the "legacy" mode, we need *any* in.idf / in.epw in the current directory + // This is done via cmake for the CTest case at least, but if you run the energyplusapi_tests exe directly, the current directory isn't + // necessarily the /tst/unit/EnergyPlus one, so we do it here anyways + { + auto destPath = FileSystem::getAbsolutePath("in.idf"); + if (!fs::is_regular_file(destPath)) { + auto inputFilePath = configured_source_directory() / "tst/EnergyPlus/unit/Resources/UnitaryHybridUnitTest_DOSA.idf"; + fs::copy_file(inputFilePath, destPath, fs::copy_options::skip_existing); + } + } - auto inputWeatherFilePath = configured_source_directory() / "weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw"; - fs::copy_file(inputWeatherFilePath, FileSystem::getAbsolutePath("in.epw"), fs::copy_options::skip_existing); + { + auto destPath = FileSystem::getAbsolutePath("in.epw"); + if (!fs::is_regular_file(destPath)) { + auto inputWeatherFilePath = configured_source_directory() / "weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw"; + fs::copy_file(inputWeatherFilePath, destPath, fs::copy_options::skip_existing); + } + } } void SetUp() override From 7aa0f22f9e073a6ae1c4157274dab8001e68e0f9 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 4 Sep 2023 10:27:57 +0200 Subject: [PATCH 128/161] Use absolute paths in configure_file to make it clearer --- tst/EnergyPlus/unit/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/CMakeLists.txt b/tst/EnergyPlus/unit/CMakeLists.txt index 4312000344f..d967da3027b 100644 --- a/tst/EnergyPlus/unit/CMakeLists.txt +++ b/tst/EnergyPlus/unit/CMakeLists.txt @@ -292,6 +292,6 @@ set(test_src main.cc ) # For CommandLineInterface.unit.cc, make an in.idf / in.epw in the test directory so we can test the legacy CLI (applies to CTest which sets the current directory to this one) -configure_file("${PROJECT_SOURCE_DIR}/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw" "in.epw" COPYONLY) -configure_file("Resources/UnitaryHybridUnitTest_DOSA.idf" "in.idf" COPYONLY) +configure_file("${PROJECT_SOURCE_DIR}/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw" "${CMAKE_CURRENT_BINARY_DIR}/in.epw" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Resources/UnitaryHybridUnitTest_DOSA.idf" "${CMAKE_CURRENT_BINARY_DIR}/in.idf" COPYONLY) create_test_targets(energyplusapi "${test_src}" "${test_dependencies}" True) From 3abfb93875eb47ced20e8161ee55932736f1ad55 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 11 Sep 2023 20:36:26 +0200 Subject: [PATCH 129/161] WeatherFileMissing tests for presence of in.epw, except we now have unit in build/tst/unit --- tst/EnergyPlus/unit/WeatherManager.unit.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/WeatherManager.unit.cc b/tst/EnergyPlus/unit/WeatherManager.unit.cc index f2b9bd06499..585dfdfbaca 100644 --- a/tst/EnergyPlus/unit/WeatherManager.unit.cc +++ b/tst/EnergyPlus/unit/WeatherManager.unit.cc @@ -1913,7 +1913,7 @@ TEST_F(EnergyPlusFixture, WeatherRunPeriod_WeatherFile_Missing) // We don't have an EPW state->dataWeatherManager->WeatherFileExists = false; - state->files.inputWeatherFilePath.filePath = "in.epw"; + state->files.inputWeatherFilePath.filePath = "doesntnotexist.epw"; state->dataGlobal->BeginSimFlag = false; state->dataGlobal->NumOfTimeStepInHour = 4; From d3a4c866d617c8d7f488486837ab62a75f163906 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Mon, 11 Sep 2023 14:35:43 -0500 Subject: [PATCH 130/161] Solution and Unit Test Implementation of the solution to the issue submitted by Trane. Some minor code clean-up/modernization included. Unit test exercises part of the solution to show that the necessary initialization is happening. --- src/EnergyPlus/HeatBalanceAirManager.cc | 43 ++++++-------- src/EnergyPlus/ZoneEquipmentManager.cc | 2 +- .../unit/HeatBalanceAirManager.unit.cc | 58 +++++++++++++++++++ 3 files changed, 78 insertions(+), 25 deletions(-) diff --git a/src/EnergyPlus/HeatBalanceAirManager.cc b/src/EnergyPlus/HeatBalanceAirManager.cc index 932fb3aa9b2..f6f29939fef 100644 --- a/src/EnergyPlus/HeatBalanceAirManager.cc +++ b/src/EnergyPlus/HeatBalanceAirManager.cc @@ -3099,6 +3099,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err if (ReceivingCount > 0) { state.dataHeatBal->MassConservation(ZoneNum).ZoneMixingReceivingPtr.allocate(ReceivingCount); state.dataHeatBal->MassConservation(ZoneNum).ZoneMixingReceivingFr.allocate(ReceivingCount); + state.dataHeatBal->MassConservation(ZoneNum).ZoneMixingReceivingFr = 0.0; for (int Loop = 1; Loop <= ReceivingCount; ++Loop) { state.dataHeatBal->MassConservation(ZoneNum).ZoneMixingReceivingPtr(Loop) = ZoneMixingNum(Loop); } @@ -4816,40 +4817,34 @@ void InitSimpleMixingConvectiveHeatGains(EnergyPlusData &state) // Select type of airflow calculation if (state.dataHeatBal->AirFlowFlag) { // Simplified airflow calculation // Process the scheduled Mixing for air heat balance - for (int Loop = 1; Loop <= state.dataHeatBal->TotMixing; ++Loop) { - state.dataHeatBal->Mixing(Loop).DesiredAirFlowRate = - state.dataHeatBal->Mixing(Loop).DesignLevel * - ScheduleManager::GetCurrentScheduleValue(state, state.dataHeatBal->Mixing(Loop).SchedPtr); - if (state.dataHeatBal->Mixing(Loop).EMSSimpleMixingOn) - state.dataHeatBal->Mixing(Loop).DesiredAirFlowRate = state.dataHeatBal->Mixing(Loop).EMSimpleMixingFlowRate; - state.dataHeatBal->Mixing(Loop).DesiredAirFlowRateSaved = state.dataHeatBal->Mixing(Loop).DesiredAirFlowRate; + for (auto &thisMixing : state.dataHeatBal->Mixing) { + thisMixing.DesiredAirFlowRate = thisMixing.DesignLevel * ScheduleManager::GetCurrentScheduleValue(state, thisMixing.SchedPtr); + if (thisMixing.EMSSimpleMixingOn) thisMixing.DesiredAirFlowRate = thisMixing.EMSimpleMixingFlowRate; + thisMixing.DesiredAirFlowRateSaved = thisMixing.DesiredAirFlowRate; } // if zone air mass flow balance enforced calculate the fraction of // contribution of each mixing object to a zone mixed flow rate, BAN Feb 2014 if (state.dataHeatBal->ZoneAirMassFlow.EnforceZoneMassBalance) { - for (int ZoneNum = 1; ZoneNum <= state.dataGlobal->NumOfZones; ++ZoneNum) { + for (auto &massConservZone : state.dataHeatBal->MassConservation) { ZoneMixingFlowSum = 0.0; - int NumOfMixingObjects = state.dataHeatBal->MassConservation(ZoneNum).NumReceivingZonesMixingObject; + int NumOfMixingObjects = massConservZone.NumReceivingZonesMixingObject; for (int Loop = 1; Loop <= NumOfMixingObjects; ++Loop) { - ZoneMixingFlowSum = ZoneMixingFlowSum + state.dataHeatBal->Mixing(Loop).DesignLevel; + ZoneMixingFlowSum += state.dataHeatBal->Mixing(Loop).DesignLevel; + massConservZone.ZoneMixingReceivingFr(Loop) = 0.0; } if (ZoneMixingFlowSum > 0.0) { for (int Loop = 1; Loop <= NumOfMixingObjects; ++Loop) { - state.dataHeatBal->MassConservation(ZoneNum).ZoneMixingReceivingFr(Loop) = - state.dataHeatBal->Mixing(Loop).DesignLevel / ZoneMixingFlowSum; + massConservZone.ZoneMixingReceivingFr(Loop) = state.dataHeatBal->Mixing(Loop).DesignLevel / ZoneMixingFlowSum; } } } } // Process the scheduled CrossMixing for air heat balance - for (int Loop = 1; Loop <= state.dataHeatBal->TotCrossMixing; ++Loop) { - state.dataHeatBal->CrossMixing(Loop).DesiredAirFlowRate = - state.dataHeatBal->CrossMixing(Loop).DesignLevel * - ScheduleManager::GetCurrentScheduleValue(state, state.dataHeatBal->CrossMixing(Loop).SchedPtr); - if (state.dataHeatBal->CrossMixing(Loop).EMSSimpleMixingOn) - state.dataHeatBal->CrossMixing(Loop).DesiredAirFlowRate = state.dataHeatBal->CrossMixing(Loop).EMSimpleMixingFlowRate; + for (auto &thisCrossMix : state.dataHeatBal->CrossMixing) { + thisCrossMix.DesiredAirFlowRate = thisCrossMix.DesignLevel * ScheduleManager::GetCurrentScheduleValue(state, thisCrossMix.SchedPtr); + if (thisCrossMix.EMSSimpleMixingOn) thisCrossMix.DesiredAirFlowRate = thisCrossMix.EMSimpleMixingFlowRate; } // Note - do each Pair a Single time, so must do increment reports for both zones @@ -4860,12 +4855,12 @@ void InitSimpleMixingConvectiveHeatGains(EnergyPlusData &state) if (state.dataHeatBal->TotRefDoorMixing > 0) { for (int NZ = 1; NZ <= (state.dataGlobal->NumOfZones - 1); ++NZ) { // Can't have %ZonePtr==NumOfZones because lesser zone # of pair placed in ZonePtr in input - if (!state.dataHeatBal->RefDoorMixing(NZ).RefDoorMixFlag) continue; - if (state.dataHeatBal->RefDoorMixing(NZ).ZonePtr == NZ) { - for (int J = 1; J <= state.dataHeatBal->RefDoorMixing(NZ).NumRefDoorConnections; ++J) { - state.dataHeatBal->RefDoorMixing(NZ).VolRefDoorFlowRate(J) = 0.0; - if (state.dataHeatBal->RefDoorMixing(NZ).EMSRefDoorMixingOn(J)) - state.dataHeatBal->RefDoorMixing(NZ).VolRefDoorFlowRate(J) = state.dataHeatBal->RefDoorMixing(NZ).EMSRefDoorFlowRate(J); + auto &thisRefDoor = state.dataHeatBal->RefDoorMixing(NZ); + if (!thisRefDoor.RefDoorMixFlag) continue; + if (thisRefDoor.ZonePtr == NZ) { + for (int J = 1; J <= thisRefDoor.NumRefDoorConnections; ++J) { + thisRefDoor.VolRefDoorFlowRate(J) = 0.0; + if (thisRefDoor.EMSRefDoorMixingOn(J)) thisRefDoor.VolRefDoorFlowRate(J) = thisRefDoor.EMSRefDoorFlowRate(J); } } } diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 9926bd155a1..b59f35fb672 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -4501,9 +4501,9 @@ void CalcZoneMassBalance(EnergyPlusData &state, bool const FirstHVACIteration) BuildingZoneReturnFlow = 0.0; for (int ZoneNum1 = 1; ZoneNum1 <= state.dataGlobal->NumOfZones; ++ZoneNum1) { - if (!state.dataZoneEquip->ZoneEquipConfig(ZoneNum1).IsControlled) continue; int ZoneNum = ZoneNum1; if (state.dataHeatBal->ZoneAirMassFlow.EnforceZoneMassBalance) ZoneNum = state.dataHeatBalFanSys->ZoneReOrder(ZoneNum1); + if (!state.dataZoneEquip->ZoneEquipConfig(ZoneNum).IsControlled) continue; auto &massConservation = state.dataHeatBal->MassConservation(ZoneNum); auto &zoneEquipConfig = state.dataZoneEquip->ZoneEquipConfig(ZoneNum); Real64 TotExhaustAirMassFlowRate = 0.0; diff --git a/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc index acf73fd1117..e502500004b 100644 --- a/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc @@ -860,4 +860,62 @@ TEST_F(EnergyPlusFixture, HeatBalanceAirManager_GetMixingAndCrossMixing) } } +TEST_F(EnergyPlusFixture, HeatBalanceAirManager_InitSimpleMixingConvectiveHeatGains_Test) +{ + Real64 expectedResult1; + Real64 expectedResult2; + Real64 constexpr allowedTolerance = 0.00001; + + // Base line data that do not change between tests + state->dataHeatBal->TotRefDoorMixing = 0; + state->dataHeatBal->TotCrossMixing = 0; + state->dataHeatBal->TotMixing = 3; + state->dataHeatBal->Mixing.allocate(state->dataHeatBal->TotMixing); + state->dataHeatBal->Mixing(1).SchedPtr = -1; // this returns a value of one + state->dataHeatBal->Mixing(2).SchedPtr = -1; // this returns a value of one + state->dataHeatBal->Mixing(3).SchedPtr = -1; // this returns a value of one + state->dataHeatBal->Mixing(1).EMSSimpleMixingOn = false; + state->dataHeatBal->Mixing(2).EMSSimpleMixingOn = false; + state->dataHeatBal->Mixing(3).EMSSimpleMixingOn = false; + state->dataHeatBal->ZoneAirMassFlow.EnforceZoneMassBalance = true; + state->dataHeatBal->MassConservation.allocate(2); + state->dataHeatBal->MassConservation(1).NumReceivingZonesMixingObject = 2; + state->dataHeatBal->MassConservation(2).NumReceivingZonesMixingObject = 0; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr.allocate(2); + + // Test 1: not air flow flag--don't do anything + state->dataHeatBal->AirFlowFlag = false; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1) = -9999.9; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2) = -9999.9; + expectedResult1 = -9999.9; + expectedResult2 = -9999.9; + HeatBalanceAirManager::InitSimpleMixingConvectiveHeatGains(*state); + EXPECT_NEAR(expectedResult1, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1), allowedTolerance); + EXPECT_NEAR(expectedResult2, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2), allowedTolerance); + + // Test 2: yes to air flow flag, but no mixing flow sum, set ZoneMixingReceivingFr to zero + state->dataHeatBal->AirFlowFlag = true; + state->dataHeatBal->Mixing(1).DesignLevel = 0.0; + state->dataHeatBal->Mixing(2).DesignLevel = 0.0; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1) = -9999.9; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2) = -9999.9; + expectedResult1 = 0.0; + expectedResult2 = 0.0; + HeatBalanceAirManager::InitSimpleMixingConvectiveHeatGains(*state); + EXPECT_NEAR(expectedResult1, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1), allowedTolerance); + EXPECT_NEAR(expectedResult2, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2), allowedTolerance); + + // Test 3: yes to air flow flag, with mixing, ZoneMixingReceivingFr set to appropriate value + state->dataHeatBal->AirFlowFlag = true; + state->dataHeatBal->Mixing(1).DesignLevel = 100.0; + state->dataHeatBal->Mixing(2).DesignLevel = 300.0; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1) = -9999.9; + state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2) = -9999.9; + expectedResult1 = 0.25; + expectedResult2 = 0.75; + HeatBalanceAirManager::InitSimpleMixingConvectiveHeatGains(*state); + EXPECT_NEAR(expectedResult1, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(1), allowedTolerance); + EXPECT_NEAR(expectedResult2, state->dataHeatBal->MassConservation(1).ZoneMixingReceivingFr(2), allowedTolerance); +} + } // namespace EnergyPlus From 9e95d13e459337cbdd4a1ee73617dacaec9f63c3 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Mon, 11 Sep 2023 15:32:43 -0400 Subject: [PATCH 131/161] Applied ShortCuts --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 510 ++++++++---------- 1 file changed, 210 insertions(+), 300 deletions(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 615ecf0e3c3..501fbd16b67 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -201,6 +201,7 @@ namespace ZoneAirLoopEquipmentManager { if (NumAirDistUnits > 0) { for (AirDistUnitNum = 1; AirDistUnitNum <= NumAirDistUnits; ++AirDistUnitNum) { + auto &airDistUnit = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum); state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, AirDistUnitNum, @@ -215,345 +216,271 @@ namespace ZoneAirLoopEquipmentManager { cNumericFields); // data for one zone UtilityRoutines::IsNameEmpty(state, AlphArray(1), CurrentModuleObject, ErrorsFound); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name = AlphArray(1); + airDistUnit.Name = AlphArray(1); // Input Outlet Node Num - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).OutletNodeNum = - GetOnlySingleNode(state, - AlphArray(2), - ErrorsFound, - DataLoopNode::ConnectionObjectType::ZoneHVACAirDistributionUnit, - AlphArray(1), - DataLoopNode::NodeFluidType::Air, - DataLoopNode::ConnectionType::Outlet, - NodeInputManager::CompFluidStream::Primary, - ObjectIsParent); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).InletNodeNum = 0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).NumComponents = 1; + airDistUnit.OutletNodeNum = GetOnlySingleNode(state, + AlphArray(2), + ErrorsFound, + DataLoopNode::ConnectionObjectType::ZoneHVACAirDistributionUnit, + AlphArray(1), + DataLoopNode::NodeFluidType::Air, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + ObjectIsParent); + airDistUnit.InletNodeNum = 0; + airDistUnit.NumComponents = 1; AirDistCompUnitNum = 1; // Load the air Distribution Unit Equip and Name - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum) = AlphArray(3); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum) = AlphArray(4); + airDistUnit.EquipType(AirDistCompUnitNum) = AlphArray(3); + airDistUnit.EquipName(AirDistCompUnitNum) = AlphArray(4); ValidateComponent(state, AlphArray(3), AlphArray(4), IsNotOK, CurrentModuleObject); if (IsNotOK) { ShowContinueError(state, format("In {} = {}", CurrentModuleObject, AlphArray(1))); ErrorsFound = true; } - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac = NumArray(1); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac = NumArray(2); - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac <= 0.0) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).LeakLoadMult = 1.0; - } else if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac < 1.0 && - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac > 0.0) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).LeakLoadMult = - 1.0 / (1.0 - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac); + airDistUnit.UpStreamLeakFrac = NumArray(1); + airDistUnit.DownStreamLeakFrac = NumArray(2); + if (airDistUnit.DownStreamLeakFrac <= 0.0) { + airDistUnit.LeakLoadMult = 1.0; + } else if (airDistUnit.DownStreamLeakFrac < 1.0 && airDistUnit.DownStreamLeakFrac > 0.0) { + airDistUnit.LeakLoadMult = 1.0 / (1.0 - airDistUnit.DownStreamLeakFrac); } else { - ShowSevereError( - state, format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("{} must be less than 1.0", cNumericFields(2))); ErrorsFound = true; } - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac > 0.0) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak = true; + if (airDistUnit.UpStreamLeakFrac > 0.0) { + airDistUnit.UpStreamLeak = true; } else { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak = false; + airDistUnit.UpStreamLeak = false; } - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac > 0.0) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak = true; + if (airDistUnit.DownStreamLeakFrac > 0.0) { + airDistUnit.DownStreamLeak = true; } else { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak = false; + airDistUnit.DownStreamLeak = false; } // DesignSpecification:AirTerminal:Sizing name - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirTerminalSizingSpecIndex = 0; + airDistUnit.AirTerminalSizingSpecIndex = 0; if (!lAlphaBlanks(5)) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirTerminalSizingSpecIndex = - UtilityRoutines::FindItemInList(AlphArray(5), state.dataSize->AirTerminalSizingSpec); - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirTerminalSizingSpecIndex == 0) { + airDistUnit.AirTerminalSizingSpecIndex = UtilityRoutines::FindItemInList(AlphArray(5), state.dataSize->AirTerminalSizingSpec); + if (airDistUnit.AirTerminalSizingSpecIndex == 0) { ShowSevereError(state, format("{} = {} not found.", cAlphaFields(5), AlphArray(5))); - ShowContinueError( - state, format("Occurs in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + ShowContinueError(state, format("Occurs in {} = {}", CurrentModuleObject, airDistUnit.Name)); ErrorsFound = true; } } // Validate EquipType for Air Distribution Unit - if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:DualDuct:ConstantVolume")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:ConstantVolume")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:DualDuct:VAV")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:VAV")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:DualDuct:VAV:OutdoorAir")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:VAV:OutdoorAir")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ConstantVolume:Reheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ConstantVolume:NoReheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:VAV:Reheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:VAV:NoReheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:Reheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:NoReheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:Reheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat; + airDistUnit.IsConstLeakageRate = true; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:NoReheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat; + airDistUnit.IsConstLeakageRate = true; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat; + airDistUnit.IsConstLeakageRate = true; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:SeriesPIU:Reheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat; + airDistUnit.IsConstLeakageRate = true; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:SeriesPIU:Reheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ParallelPIU:Reheat")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ParallelPIU:Reheat")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:CooledBeam")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolFourPipeBeam; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).airTerminalPtr = FourPipeBeam::HVACFourPipeBeam::fourPipeBeamFactory( - state, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(1)); - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolFourPipeBeam; + airDistUnit.airTerminalPtr = FourPipeBeam::HVACFourPipeBeam::fourPipeBeamFactory(state, airDistUnit.EquipName(1)); + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:UserDefined")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctUserDefined; - } else if (UtilityRoutines::SameString(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:Mixer")) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) = - DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) { - ShowSevereError( - state, - format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:UserDefined")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctUserDefined; + } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:Mixer")) { + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer; + if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Simple duct leakage model not available for {} = {}", cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } } else { - ShowSevereError( - state, format("Error found in {} = {}", CurrentModuleObject, state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); - ShowContinueError(state, - format("Invalid {} = {}", - cAlphaFields(3), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum))); + ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); + ShowContinueError(state, format("Invalid {} = {}", cAlphaFields(3), airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } // Set up component set for air terminal unit - if ((state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) == - DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume) || - (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) == - DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV)) { + if ((airDistUnit.EquipTypeEnum(AirDistCompUnitNum) == DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume) || + (airDistUnit.EquipTypeEnum(AirDistCompUnitNum) == DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV)) { // For dual duct units, set up two component sets, one for heat and one for cool SetUpCompSets(state, CurrentModuleObject, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum) + ":HEAT", - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), + airDistUnit.Name, + airDistUnit.EquipType(AirDistCompUnitNum) + ":HEAT", + airDistUnit.EquipName(AirDistCompUnitNum), "UNDEFINED", AlphArray(2)); SetUpCompSets(state, CurrentModuleObject, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum) + ":COOL", - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), + airDistUnit.Name, + airDistUnit.EquipType(AirDistCompUnitNum) + ":COOL", + airDistUnit.EquipName(AirDistCompUnitNum), "UNDEFINED", AlphArray(2)); // For dual duct units with decoupled OA and RA, set up two component sets, one for OA (Outdoor Air) // and one for RA (Recirculated Air) - } else if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompUnitNum) == - DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir) { + } else if (airDistUnit.EquipTypeEnum(AirDistCompUnitNum) == DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir) { SetUpCompSets(state, CurrentModuleObject, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum) + ":OutdoorAir", - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), + airDistUnit.Name, + airDistUnit.EquipType(AirDistCompUnitNum) + ":OutdoorAir", + airDistUnit.EquipName(AirDistCompUnitNum), "UNDEFINED", AlphArray(2)); - GetDualDuctOutdoorAirRecircUse(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), - DualDuctRecircIsUsed); + GetDualDuctOutdoorAirRecircUse( + state, airDistUnit.EquipType(AirDistCompUnitNum), airDistUnit.EquipName(AirDistCompUnitNum), DualDuctRecircIsUsed); if (DualDuctRecircIsUsed) { SetUpCompSets(state, CurrentModuleObject, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum) + ":RecirculatedAir", - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), + airDistUnit.Name, + airDistUnit.EquipType(AirDistCompUnitNum) + ":RecirculatedAir", + airDistUnit.EquipName(AirDistCompUnitNum), "UNDEFINED", AlphArray(2)); } } else { SetUpCompSets(state, CurrentModuleObject, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompUnitNum), - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompUnitNum), + airDistUnit.Name, + airDistUnit.EquipType(AirDistCompUnitNum), + airDistUnit.EquipName(AirDistCompUnitNum), "UNDEFINED", AlphArray(2)); } } // End of Air Dist Do Loop for (AirDistUnitNum = 1; AirDistUnitNum <= (int)state.dataDefineEquipment->AirDistUnit.size(); ++AirDistUnitNum) { + auto &airDistUnit = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum); SetupOutputVariable(state, "Zone Air Terminal Sensible Heating Energy", OutputProcessor::Unit::J, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).HeatGain, + airDistUnit.HeatGain, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name); + airDistUnit.Name); SetupOutputVariable(state, "Zone Air Terminal Sensible Cooling Energy", OutputProcessor::Unit::J, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).CoolGain, + airDistUnit.CoolGain, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Summed, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name); + airDistUnit.Name); SetupOutputVariable(state, "Zone Air Terminal Sensible Heating Rate", OutputProcessor::Unit::W, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).HeatRate, + airDistUnit.HeatRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name); + airDistUnit.Name); SetupOutputVariable(state, "Zone Air Terminal Sensible Cooling Rate", OutputProcessor::Unit::W, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).CoolRate, + airDistUnit.CoolRate, OutputProcessor::SOVTimeStepType::System, OutputProcessor::SOVStoreType::Average, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name); + airDistUnit.Name); } } if (ErrorsFound) { @@ -578,7 +505,7 @@ namespace ZoneAirLoopEquipmentManager { (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).TermUnitSizingNum > 0)) { { - auto &thisADU(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum)); + auto &thisADU = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum); { auto &thisZoneEqConfig(state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum)); thisADU.ZoneNum = ControlledZoneNum; @@ -631,16 +558,17 @@ namespace ZoneAirLoopEquipmentManager { void InitZoneAirLoopEquipmentTimeStep(EnergyPlusData &state, int const AirDistUnitNum) { + auto &airDistUnit = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum); // every time step - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateDnStrLk = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateZSup = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateSup = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).HeatRate = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).CoolRate = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).HeatGain = 0.0; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).CoolGain = 0.0; + airDistUnit.MassFlowRateDnStrLk = 0.0; + airDistUnit.MassFlowRateUpStrLk = 0.0; + airDistUnit.MassFlowRateTU = 0.0; + airDistUnit.MassFlowRateZSup = 0.0; + airDistUnit.MassFlowRateSup = 0.0; + airDistUnit.HeatRate = 0.0; + airDistUnit.CoolRate = 0.0; + airDistUnit.HeatGain = 0.0; + airDistUnit.CoolGain = 0.0; } void SimZoneAirLoopEquipment(EnergyPlusData &state, @@ -684,229 +612,211 @@ namespace ZoneAirLoopEquipmentManager { ProvideSysOutput = true; for (AirDistCompNum = 1; AirDistCompNum <= state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).NumComponents; ++AirDistCompNum) { NonAirSysOutput = 0.0; - InNodeNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).InletNodeNum; - OutNodeNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).OutletNodeNum; + + auto &airDistUnit = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum); + InNodeNum = airDistUnit.InletNodeNum; + OutNodeNum = airDistUnit.OutletNodeNum; MassFlowRateMaxAvail = 0.0; MassFlowRateMinAvail = 0.0; // check for no plenum // set the max and min avail flow rates taking into acount the upstream leak - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak) { + if (airDistUnit.UpStreamLeak) { if (InNodeNum > 0) { MassFlowRateMaxAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail; MassFlowRateMinAvail = state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).IsConstLeakageRate) { - AirLoopNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).AirLoopNum; + if (airDistUnit.IsConstLeakageRate) { + AirLoopNum = airDistUnit.AirLoopNum; if (AirLoopNum > 0) { DesFlowRatio = state.dataAirLoop->AirLoopFlow(AirLoopNum).SysToZoneDesFlowRatio; } else { DesFlowRatio = 1.0; } - MassFlowRateUpStreamLeakMax = max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * - state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax * DesFlowRatio, - 0.0); - } else { MassFlowRateUpStreamLeakMax = - max(state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); + max(airDistUnit.UpStreamLeakFrac * state.dataLoopNodes->Node(InNodeNum).MassFlowRateMax * DesFlowRatio, 0.0); + } else { + MassFlowRateUpStreamLeakMax = max(airDistUnit.UpStreamLeakFrac * MassFlowRateMaxAvail, 0.0); } if (MassFlowRateMaxAvail > MassFlowRateUpStreamLeakMax) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; + airDistUnit.MassFlowRateUpStrLk = MassFlowRateUpStreamLeakMax; state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail = MassFlowRateMaxAvail - MassFlowRateUpStreamLeakMax; } else { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk = MassFlowRateMaxAvail; + airDistUnit.MassFlowRateUpStrLk = MassFlowRateMaxAvail; state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail = 0.0; } - state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail = - max(0.0, MassFlowRateMinAvail - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk); + state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail = max(0.0, MassFlowRateMinAvail - airDistUnit.MassFlowRateUpStrLk); } } - switch (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompNum)) { + switch (airDistUnit.EquipTypeEnum(AirDistCompNum)) { case DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume: { SimulateDualDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV: { SimulateDualDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir: { SimulateDualDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat: { SimPIU(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat: { SimPIU(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc: { SimIndUnit(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan: { SimulateSingleDuct(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam: { SimCoolBeam(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum), + airDistUnit.EquipIndex(AirDistCompNum), NonAirSysOutput); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolFourPipeBeam: { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).airTerminalPtr->simulate(state, FirstHVACIteration, NonAirSysOutput); + airDistUnit.airTerminalPtr->simulate(state, FirstHVACIteration, NonAirSysOutput); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctUserDefined: { SimAirTerminalUserDefined(state, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipName(AirDistCompNum), + airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipIndex(AirDistCompNum)); + airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer: { GetATMixers(state); // Needed here if mixer used only with unitarysystem which gets its input late ProvideSysOutput = false; } break; default: { - ShowSevereError( - state, format("Error found in ZoneHVAC:AirDistributionUnit={}", state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).Name)); - ShowContinueError(state, - format("Invalid Component={}", state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipType(AirDistCompNum))); + ShowSevereError(state, format("Error found in ZoneHVAC:AirDistributionUnit={}", airDistUnit.Name)); + ShowContinueError(state, format("Invalid Component={}", airDistUnit.EquipType(AirDistCompNum))); ShowFatalError(state, "Preceding condition causes termination."); } break; } // do leak mass flow calcs if (InNodeNum > 0) { // InNodeNum is not always known when this is called, eg FPIU - InNodeNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).InletNodeNum; - if (state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak) { + InNodeNum = airDistUnit.InletNodeNum; + if (airDistUnit.UpStreamLeak) { state.dataLoopNodes->Node(InNodeNum).MassFlowRateMaxAvail = MassFlowRateMaxAvail; state.dataLoopNodes->Node(InNodeNum).MassFlowRateMinAvail = MassFlowRateMinAvail; } - if ((state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).UpStreamLeak || - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeak) && - MassFlowRateMaxAvail > 0.0) { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateZSup = - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU * - (1.0 - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateDnStrLk = - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU * - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).DownStreamLeakFrac; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateSup = - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU + - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk; - state.dataLoopNodes->Node(InNodeNum).MassFlowRate = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateSup; - state.dataLoopNodes->Node(OutNodeNum).MassFlowRate = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateZSup; + if ((airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) && MassFlowRateMaxAvail > 0.0) { + airDistUnit.MassFlowRateTU = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; + airDistUnit.MassFlowRateZSup = airDistUnit.MassFlowRateTU * (1.0 - airDistUnit.DownStreamLeakFrac); + airDistUnit.MassFlowRateDnStrLk = airDistUnit.MassFlowRateTU * airDistUnit.DownStreamLeakFrac; + airDistUnit.MassFlowRateSup = airDistUnit.MassFlowRateTU + airDistUnit.MassFlowRateUpStrLk; + state.dataLoopNodes->Node(InNodeNum).MassFlowRate = airDistUnit.MassFlowRateSup; + state.dataLoopNodes->Node(OutNodeNum).MassFlowRate = airDistUnit.MassFlowRateZSup; state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMaxAvail = - max(0.0, - MassFlowRateMaxAvail - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateDnStrLk - - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk); + max(0.0, MassFlowRateMaxAvail - airDistUnit.MassFlowRateDnStrLk - airDistUnit.MassFlowRateUpStrLk); state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMinAvail = - max(0.0, - MassFlowRateMinAvail - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateDnStrLk - - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateUpStrLk); - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MaxAvailDelta = - MassFlowRateMaxAvail - state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMaxAvail; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MinAvailDelta = - MassFlowRateMinAvail - state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMinAvail; + max(0.0, MassFlowRateMinAvail - airDistUnit.MassFlowRateDnStrLk - airDistUnit.MassFlowRateUpStrLk); + airDistUnit.MaxAvailDelta = MassFlowRateMaxAvail - state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMaxAvail; + airDistUnit.MinAvailDelta = MassFlowRateMinAvail - state.dataLoopNodes->Node(OutNodeNum).MassFlowRateMinAvail; } else { // if no leaks, or a terminal unit type not supported for leaks - DataDefineEquip::ZnAirLoopEquipType termUnitType = - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).EquipTypeEnum(AirDistCompNum); + DataDefineEquip::ZnAirLoopEquipType termUnitType = airDistUnit.EquipTypeEnum(AirDistCompNum); if ((termUnitType == DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume) || (termUnitType == DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV) || (termUnitType == DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir)) { // Use ADU outlet node flow for dual duct terminal units (which don't support leaks) - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateZSup = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateSup = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; + airDistUnit.MassFlowRateTU = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; + airDistUnit.MassFlowRateZSup = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; + airDistUnit.MassFlowRateSup = state.dataLoopNodes->Node(OutNodeNum).MassFlowRate; } else { - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateTU = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateZSup = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; - state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).MassFlowRateSup = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; + airDistUnit.MassFlowRateTU = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; + airDistUnit.MassFlowRateZSup = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; + airDistUnit.MassFlowRateSup = state.dataLoopNodes->Node(InNodeNum).MassFlowRate; } } } From d454086e81f3de98bd9676a76894072f14bf235c Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 12 Sep 2023 10:44:22 -0400 Subject: [PATCH 132/161] Added string_view array for enum class ZnAirLoopEquipType --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 176 +++++++----------- 1 file changed, 67 insertions(+), 109 deletions(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 501fbd16b67..b8f2b64481d 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -85,6 +85,44 @@ namespace ZoneAirLoopEquipmentManager { using namespace DataDefineEquip; + constexpr std::array ZnAirLoopEquipTypeNames = { + "AirTerminal:DualDuct:ConstantVolume", + "AirTerminal:DualDuct:VAV", + "AirTerminal:SingleDuct:VAV:Reheat", + "AirTerminal:SingleDuct:VAV:NoReheat", + "AirTerminal:SingleDuct:ConstantVolume:Reheat", + "AirTerminal:SingleDuct:ConstantVolume:NoReheat", + "AirTerminal:SingleDuct:SeriesPIU:Reheat", + "AirTerminal:SingleDuct:ParallelPIU:Reheat", + "AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction", + "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan", + "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat", + "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat", + "AirTerminal:SingleDuct:ConstantVolume:CooledBeam", + "AirTerminal:DualDuct:VAV:OutdoorAir", + "AirTerminal:SingleDuct:UserDefined", + "AirTerminal:SingleDuct:Mixer", + "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam"}; + + constexpr std::array ZnAirLoopEquipTypeNamesUC = { + "AIRTERMINAL:DUALDUCT:CONSTANTVOLUME", + "AIRTERMINAL:DUALDUCT:VAV", + "AIRTERMINAL:SINGLEDUCT:VAV:REHEAT", + "AIRTERMINAL:SINGLEDUCT:VAV:NOREHEAT", + "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:REHEAT", + "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:NOREHEAT", + "AIRTERMINAL:SINGLEDUCT:SERIESPIU:REHEAT", + "AIRTERMINAL:SINGLEDUCT:PARALLELPIU:REHEAT", + "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:FOURPIPEINDUCTION", + "AIRTERMINAL:SINGLEDUCT:VAV:REHEAT:VARIABLESPEEDFAN", + "AIRTERMINAL:SINGLEDUCT:VAV:HEATANDCOOL:REHEAT", + "AIRTERMINAL:SINGLEDUCT:VAV:HEATANDCOOL:NOREHEAT", + "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:COOLEDBEAM", + "AIRTERMINAL:DUALDUCT:VAV:OUTDOORAIR", + "AIRTERMINAL:SINGLEDUCT:USERDEFINED", + "AIRTERMINAL:SINGLEDUCT:MIXER", + "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:FOURPIPEBEAM"}; + void ManageZoneAirLoopEquipment(EnergyPlusData &state, std::string const &ZoneAirLoopEquipName, bool const FirstHVACIteration, @@ -270,19 +308,21 @@ namespace ZoneAirLoopEquipmentManager { ErrorsFound = true; } } + + const std::string typeNameUC = UtilityRoutines::makeUPPER(airDistUnit.EquipType(AirDistCompUnitNum)); + airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = static_cast(getEnumValue(ZnAirLoopEquipTypeNamesUC, typeNameUC)); // Validate EquipType for Air Distribution Unit - if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:ConstantVolume")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:VAV")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV; + switch (airDistUnit.EquipTypeEnum(AirDistCompUnitNum)) { + case DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume: + case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV: + case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctUserDefined: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer: if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, @@ -291,89 +331,8 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:DualDuct:VAV:OutdoorAir")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:Reheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ConstantVolume:NoReheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:Reheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat; - airDistUnit.IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:NoReheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat; - airDistUnit.IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat; - airDistUnit.IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat; - airDistUnit.IsConstLeakageRate = true; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:SeriesPIU:Reheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:ParallelPIU:Reheat")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ConstantVolume:CooledBeam")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), - "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolFourPipeBeam; + break; + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolFourPipeBeam: airDistUnit.airTerminalPtr = FourPipeBeam::HVACFourPipeBeam::fourPipeBeamFactory(state, airDistUnit.EquipName(1)); if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); @@ -383,23 +342,22 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; } - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:UserDefined")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctUserDefined; - } else if (UtilityRoutines::SameString(airDistUnit.EquipType(AirDistCompUnitNum), "AirTerminal:SingleDuct:Mixer")) { - airDistUnit.EquipTypeEnum(AirDistCompUnitNum) = DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer; - if (airDistUnit.UpStreamLeak || airDistUnit.DownStreamLeak) { - ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); - ShowContinueError(state, - format("Simple duct leakage model not available for {} = {}", - cAlphaFields(3), - airDistUnit.EquipType(AirDistCompUnitNum))); - ErrorsFound = true; - } - } else { + break; + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat: + break; + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat: + case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat: + airDistUnit.IsConstLeakageRate = true; + break; + case DataDefineEquip::ZnAirLoopEquipType::Invalid: ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Invalid {} = {}", cAlphaFields(3), airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; - } + break; + } // end switch // Set up component set for air terminal unit if ((airDistUnit.EquipTypeEnum(AirDistCompUnitNum) == DataDefineEquip::ZnAirLoopEquipType::DualDuctConstVolume) || From 39de905205516b9c2e7c6d22c11a6a0b6d8faea0 Mon Sep 17 00:00:00 2001 From: Bereket Nigusse Date: Tue, 12 Sep 2023 11:24:59 -0400 Subject: [PATCH 133/161] string_view array def cleanup --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index b8f2b64481d..de1be05bbea 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -85,26 +85,26 @@ namespace ZoneAirLoopEquipmentManager { using namespace DataDefineEquip; - constexpr std::array ZnAirLoopEquipTypeNames = { - "AirTerminal:DualDuct:ConstantVolume", - "AirTerminal:DualDuct:VAV", - "AirTerminal:SingleDuct:VAV:Reheat", - "AirTerminal:SingleDuct:VAV:NoReheat", - "AirTerminal:SingleDuct:ConstantVolume:Reheat", - "AirTerminal:SingleDuct:ConstantVolume:NoReheat", - "AirTerminal:SingleDuct:SeriesPIU:Reheat", - "AirTerminal:SingleDuct:ParallelPIU:Reheat", - "AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction", - "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan", - "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat", - "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat", - "AirTerminal:SingleDuct:ConstantVolume:CooledBeam", - "AirTerminal:DualDuct:VAV:OutdoorAir", - "AirTerminal:SingleDuct:UserDefined", - "AirTerminal:SingleDuct:Mixer", - "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam"}; - - constexpr std::array ZnAirLoopEquipTypeNamesUC = { + // constexpr std::array(ZnAirLoopEquipType::Num)> ZnAirLoopEquipTypeNames = { + // "AirTerminal:DualDuct:ConstantVolume", + // "AirTerminal:DualDuct:VAV", + // "AirTerminal:SingleDuct:VAV:Reheat", + // "AirTerminal:SingleDuct:VAV:NoReheat", + // "AirTerminal:SingleDuct:ConstantVolume:Reheat", + // "AirTerminal:SingleDuct:ConstantVolume:NoReheat", + // "AirTerminal:SingleDuct:SeriesPIU:Reheat", + // "AirTerminal:SingleDuct:ParallelPIU:Reheat", + // "AirTerminal:SingleDuct:ConstantVolume:FourPipeInduction", + // "AirTerminal:SingleDuct:VAV:Reheat:VariableSpeedFan", + // "AirTerminal:SingleDuct:VAV:HeatAndCool:Reheat", + // "AirTerminal:SingleDuct:VAV:HeatAndCool:NoReheat", + // "AirTerminal:SingleDuct:ConstantVolume:CooledBeam", + // "AirTerminal:DualDuct:VAV:OutdoorAir", + // "AirTerminal:SingleDuct:UserDefined", + // "AirTerminal:SingleDuct:Mixer", + // "AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam"}; + + constexpr std::array(ZnAirLoopEquipType::Num)> ZnAirLoopEquipTypeNamesUC = { "AIRTERMINAL:DUALDUCT:CONSTANTVOLUME", "AIRTERMINAL:DUALDUCT:VAV", "AIRTERMINAL:SINGLEDUCT:VAV:REHEAT", From ce5f7b2ccdedfaf8c2e7a70bb43ee44a1f8ed0ef Mon Sep 17 00:00:00 2001 From: nigusse Date: Tue, 12 Sep 2023 17:51:25 -0400 Subject: [PATCH 134/161] Added unit test --- .../unit/ZoneEquipmentManager.unit.cc | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc index 105c43aa237..af9bdf60b5f 100644 --- a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc +++ b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -4949,3 +4950,76 @@ TEST_F(EnergyPlusFixture, ZoneEquipmentManager_SizeZoneEquipment_DOASLoadTest) EXPECT_NEAR(SensibleOutput, -4091.6, 0.1); // W EXPECT_NEAR(TotalOutput, -4091.6, 0.1); // W } + +TEST_F(EnergyPlusFixture, ZoneAirLoopEquipmentGetInputTest) +{ + std::string_view constexpr idf_objects = R"IDF( + + ZoneHVAC:AirDistributionUnit, + ADU CV HW Rht, !- Name + Node 5, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:ConstantVolume:Reheat, !- Air Terminal Object Type + CV HW Rht, !- Air Terminal Name + 0.05, !- Nominal Upstream Leakage Fraction + 0.07; !- Constant Downstream Leakage Fraction + + AirTerminal:SingleDuct:ConstantVolume:Reheat, + CV HW Rht, !- Name + Always On Discrete, !- Availability Schedule Name + Node 5, !- Air Outlet Node Name + Node 9, !- Air Inlet Node Name + Autosize, !- Maximum Air Flow Rate {m3/s} + Coil:Heating:Water, !- Reheat Coil Object Type + CV HW Rht Coil, !- Reheat Coil Name + Autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + 0.001, !- Convergence Tolerance + 50; !- Maximum Reheat Air Temperature {C} + + ZoneHVAC:AirDistributionUnit, + ADU VAV Rht, !- Name + Node 5, !- Air Distribution Unit Outlet Node Name + AirTerminal:SingleDuct:VAV:Reheat, !- Air Terminal Object Type + VAV with Rht AT, !- Air Terminal Name + 0.05, !- Nominal Upstream Leakage Fraction + 0.07; !- Constant Downstream Leakage Fraction + + AirTerminal:SingleDuct:VAV:Reheat, + VAV with Rht AT, !- Name + Always On Discrete, !- Availability Schedule Name + VAV with Rht AT Damper Outlet, !- Damper Air Outlet Node Name + Node 9, !- Air Inlet Node Name + Autosize, !- Maximum Air Flow Rate {m3/s} + Constant, !- Zone Minimum Air Flow Input Method + 0.3, !- Constant Minimum Air Flow Fraction + , !- Fixed Minimum Air Flow Rate {m3/s} + , !- Minimum Air Flow Fraction Schedule Name + Coil:Heating:Water, !- Reheat Coil Object Type + VAV HW Rht Coil, !- Reheat Coil Name + Autosize, !- Maximum Hot Water or Steam Flow Rate {m3/s} + 0, !- Minimum Hot Water or Steam Flow Rate {m3/s} + Node 5, !- Air Outlet Node Name + 0.001, !- Convergence Tolerance + Normal, !- Damper Heating Action + Autocalculate, !- Maximum Flow per Zone Floor Area During Reheat {m3/s-m2} + Autocalculate, !- Maximum Flow Fraction During Reheat + 50; !- Maximum Reheat Air Temperature {C} + + )IDF"; + + bool ErrorsFound = false; + ASSERT_TRUE(process_idf(idf_objects)); + + int AirDistCompUnitNum = 1; + ZoneAirLoopEquipmentManager::GetZoneAirLoopEquipment(*state); + auto &airDistUnit_CV = state->dataDefineEquipment->AirDistUnit(AirDistCompUnitNum); + EXPECT_EQ(airDistUnit_CV.EquipType(1), "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:REHEAT"); + EXPECT_EQ(airDistUnit_CV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat); + EXPECT_FALSE(airDistUnit_CV.IsConstLeakageRate); + + AirDistCompUnitNum = 2; + auto &airDistUnit_VAV = state->dataDefineEquipment->AirDistUnit(AirDistCompUnitNum); + EXPECT_EQ(airDistUnit_VAV.EquipType(1), "AIRTERMINAL:SINGLEDUCT:VAV:REHEAT"); + EXPECT_EQ(airDistUnit_VAV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat); + EXPECT_TRUE(airDistUnit_VAV.IsConstLeakageRate); +} From 8e28ba5da784bd3a58b5b13122deedcb5adadba2 Mon Sep 17 00:00:00 2001 From: nigusse Date: Tue, 12 Sep 2023 18:08:17 -0400 Subject: [PATCH 135/161] Remove enumeration value warning error message --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index de1be05bbea..8128e6638fe 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -352,7 +352,7 @@ namespace ZoneAirLoopEquipmentManager { case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat: airDistUnit.IsConstLeakageRate = true; break; - case DataDefineEquip::ZnAirLoopEquipType::Invalid: + default: ShowSevereError(state, format("Error found in {} = {}", CurrentModuleObject, airDistUnit.Name)); ShowContinueError(state, format("Invalid {} = {}", cAlphaFields(3), airDistUnit.EquipType(AirDistCompUnitNum))); ErrorsFound = true; From bdc8590c375e266faef40b6dea9324d016691337 Mon Sep 17 00:00:00 2001 From: nigusse Date: Wed, 13 Sep 2023 08:08:18 -0400 Subject: [PATCH 136/161] Removed unused variable --- tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc index af9bdf60b5f..652f2ab7911 100644 --- a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc +++ b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc @@ -5007,7 +5007,6 @@ TEST_F(EnergyPlusFixture, ZoneAirLoopEquipmentGetInputTest) )IDF"; - bool ErrorsFound = false; ASSERT_TRUE(process_idf(idf_objects)); int AirDistCompUnitNum = 1; From 1051a8450ac29355c399b8d41e637928f8cfe50c Mon Sep 17 00:00:00 2001 From: nigusse Date: Wed, 13 Sep 2023 08:40:18 -0400 Subject: [PATCH 137/161] Fixed the new unit test failed on Ubuntu --- tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc index 652f2ab7911..35f575a4851 100644 --- a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc +++ b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc @@ -47,6 +47,9 @@ // EnergyPlus::ZoneEquipmentManager Unit Tests +// C++ Headers +#include + // Google Test Headers #include From 77f62d955c913a07af1dc26fd6c2a6e9ccb8a39e Mon Sep 17 00:00:00 2001 From: nigusse Date: Wed, 13 Sep 2023 08:53:53 -0400 Subject: [PATCH 138/161] More ShortCuts and Cleanup --- src/EnergyPlus/ZoneAirLoopEquipmentManager.cc | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc index 8128e6638fe..23e1556d8ff 100644 --- a/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc +++ b/src/EnergyPlus/ZoneAirLoopEquipmentManager.cc @@ -567,6 +567,8 @@ namespace ZoneAirLoopEquipmentManager { Real64 SpecHumOut(0.0); // Specific humidity ratio of outlet air (kg moisture / kg moist air) Real64 SpecHumIn(0.0); // Specific humidity ratio of inlet air (kg moisture / kg moist air) + auto &controlledZoneAirNode = state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode; + ProvideSysOutput = true; for (AirDistCompNum = 1; AirDistCompNum <= state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).NumComponents; ++AirDistCompNum) { NonAirSysOutput = 0.0; @@ -611,7 +613,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAV: { @@ -619,7 +621,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::DualDuctVAVOutdoorAir: { @@ -627,7 +629,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat: { @@ -635,7 +637,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVReheat: { @@ -643,7 +645,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVNoReheat: { @@ -651,7 +653,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctCBVAVNoReheat: { @@ -659,7 +661,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat: { @@ -667,7 +669,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolNoReheat: { @@ -675,7 +677,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_SeriesPIU_Reheat: { @@ -683,7 +685,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ParallelPIU_Reheat: { @@ -691,7 +693,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuct_ConstVol_4PipeInduc: { @@ -699,7 +701,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheatVSFan: { @@ -707,7 +709,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolCooledBeam: { @@ -715,7 +717,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum), NonAirSysOutput); } break; @@ -727,7 +729,7 @@ namespace ZoneAirLoopEquipmentManager { airDistUnit.EquipName(AirDistCompNum), FirstHVACIteration, ControlledZoneNum, - state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode, + controlledZoneAirNode, airDistUnit.EquipIndex(AirDistCompNum)); } break; case DataDefineEquip::ZnAirLoopEquipType::SingleDuctATMixer: { @@ -781,15 +783,14 @@ namespace ZoneAirLoopEquipmentManager { } if (ProvideSysOutput) { int OutletNodeNum = state.dataDefineEquipment->AirDistUnit(AirDistUnitNum).OutletNodeNum; - int ZoneAirNode = state.dataZoneEquip->ZoneEquipConfig(ControlledZoneNum).ZoneNode; SpecHumOut = state.dataLoopNodes->Node(OutletNodeNum).HumRat; - SpecHumIn = state.dataLoopNodes->Node(ZoneAirNode).HumRat; + SpecHumIn = state.dataLoopNodes->Node(controlledZoneAirNode).HumRat; // Sign convention: SysOutputProvided <0 Zone is cooled // SysOutputProvided >0 Zone is heated SysOutputProvided = state.dataLoopNodes->Node(OutletNodeNum).MassFlowRate * Psychrometrics::PsyDeltaHSenFnTdb2W2Tdb1W1(state.dataLoopNodes->Node(OutletNodeNum).Temp, SpecHumOut, - state.dataLoopNodes->Node(ZoneAirNode).Temp, + state.dataLoopNodes->Node(controlledZoneAirNode).Temp, SpecHumIn); // sensible {W}; // Sign convention: LatOutputProvided <0 Zone is dehumidified // LatOutputProvided >0 Zone is humidified From 4e9a538f5bd3ab316206b0543cc8a68ce844dd6a Mon Sep 17 00:00:00 2001 From: nigusse Date: Wed, 13 Sep 2023 11:40:07 -0400 Subject: [PATCH 139/161] Fixed enum comparison of a unit test --- tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc index 35f575a4851..af256f558b6 100644 --- a/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc +++ b/tst/EnergyPlus/unit/ZoneEquipmentManager.unit.cc @@ -5016,12 +5016,12 @@ TEST_F(EnergyPlusFixture, ZoneAirLoopEquipmentGetInputTest) ZoneAirLoopEquipmentManager::GetZoneAirLoopEquipment(*state); auto &airDistUnit_CV = state->dataDefineEquipment->AirDistUnit(AirDistCompUnitNum); EXPECT_EQ(airDistUnit_CV.EquipType(1), "AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:REHEAT"); - EXPECT_EQ(airDistUnit_CV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat); + EXPECT_TRUE(compare_enums(airDistUnit_CV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctConstVolReheat)); EXPECT_FALSE(airDistUnit_CV.IsConstLeakageRate); AirDistCompUnitNum = 2; auto &airDistUnit_VAV = state->dataDefineEquipment->AirDistUnit(AirDistCompUnitNum); EXPECT_EQ(airDistUnit_VAV.EquipType(1), "AIRTERMINAL:SINGLEDUCT:VAV:REHEAT"); - EXPECT_EQ(airDistUnit_VAV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat); + EXPECT_TRUE(compare_enums(airDistUnit_VAV.EquipTypeEnum(1), DataDefineEquip::ZnAirLoopEquipType::SingleDuctVAVReheat)); EXPECT_TRUE(airDistUnit_VAV.IsConstLeakageRate); } From e3317131b1df278abd3811c1c7b827e1ae7b58fc Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 13 Sep 2023 11:21:42 -0500 Subject: [PATCH 140/161] format --- src/EnergyPlus/UnitarySystem.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index e05fdead5f7..a1ce6e64b55 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -8513,18 +8513,18 @@ namespace UnitarySystems { int constexpr MaxIter = 100; // maximum number of iterations // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int SpeedNum; // multi-speed coil speed number - Real64 SensOutputOn; // sensible output at PLR = 1 [W] - Real64 LatOutputOn; // latent output at PLR = 1 [W] - Real64 TempLoad; // represents either a sensible or latent load [W] - Real64 TempSysOutput; // represents either a sensible or latent capacity [W] - Real64 TempSensOutput; // iterative sensible capacity [W] - Real64 TempLatOutput; // iterative latent capacity [W] - Real64 TempMinPLR; // iterative minimum PLR - Real64 TempMaxPLR; // iterative maximum PLR - Real64 CpAir; // specific heat of air [J/kg_C] - Real64 FullLoadAirOutletTemp; // saved full load outlet air temperature [C] - Real64 FullLoadAirOutletHumRat; // saved full load outlet air humidity ratio [kg/kg] + int SpeedNum; // multi-speed coil speed number + Real64 SensOutputOn; // sensible output at PLR = 1 [W] + Real64 LatOutputOn; // latent output at PLR = 1 [W] + Real64 TempLoad; // represents either a sensible or latent load [W] + Real64 TempSysOutput; // represents either a sensible or latent capacity [W] + Real64 TempSensOutput; // iterative sensible capacity [W] + Real64 TempLatOutput; // iterative latent capacity [W] + Real64 TempMinPLR; // iterative minimum PLR + Real64 TempMaxPLR; // iterative maximum PLR + Real64 CpAir; // specific heat of air [J/kg_C] + Real64 FullLoadAirOutletTemp; // saved full load outlet air temperature [C] + Real64 FullLoadAirOutletHumRat; // saved full load outlet air humidity ratio [kg/kg] std::string CompName = this->Name; int OutletNode = this->AirOutNode; From 627d866f3642aea1fa1c98cbd63f8db28eed766c Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Wed, 13 Sep 2023 11:54:56 -0500 Subject: [PATCH 141/161] Fix conflict resolution issue, reapply formatting [decent_ci_skip] --- .../unit/OutputReportTabular.unit.cc | 309 +++++++++--------- 1 file changed, 154 insertions(+), 155 deletions(-) diff --git a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc index 08584512e70..48f0f58ccf9 100644 --- a/tst/EnergyPlus/unit/OutputReportTabular.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabular.unit.cc @@ -12871,176 +12871,175 @@ TEST_F(EnergyPlusFixture, OutputReportTabularMonthly_DontWarnMonthlyIfOnlyNamedR InitializeTabularMonthly(*state); compare_err_stream(""); +} - TEST_F(SQLiteFixture, OutputReportTabular_DistrictHeating) - { - // Test for #10190 - District Heating Steam is empty - state->dataSQLiteProcedures->sqlite->createSQLiteSimulationsRecord(1, "EnergyPlus Version", "Current Time"); +TEST_F(SQLiteFixture, OutputReportTabular_DistrictHeating) +{ + // Test for #10190 - District Heating Steam is empty + state->dataSQLiteProcedures->sqlite->createSQLiteSimulationsRecord(1, "EnergyPlus Version", "Current Time"); - state->dataOutRptTab->displayTabularBEPS = true; - state->dataOutRptTab->displayDemandEndUse = true; - state->dataOutRptTab->displayLEEDSummary = true; + state->dataOutRptTab->displayTabularBEPS = true; + state->dataOutRptTab->displayDemandEndUse = true; + state->dataOutRptTab->displayLEEDSummary = true; - state->dataOutRptTab->WriteTabularFiles = true; + state->dataOutRptTab->WriteTabularFiles = true; - SetupUnitConversions(*state); - state->dataOutRptTab->unitsStyle = OutputReportTabular::UnitsStyle::JtoKWH; - state->dataOutRptTab->unitsStyle_SQLite = OutputReportTabular::UnitsStyle::JtoKWH; + SetupUnitConversions(*state); + state->dataOutRptTab->unitsStyle = OutputReportTabular::UnitsStyle::JtoKWH; + state->dataOutRptTab->unitsStyle_SQLite = OutputReportTabular::UnitsStyle::JtoKWH; - // Needed to avoid crash (from ElectricPowerServiceManager.hh) - createFacilityElectricPowerServiceObject(*state); + // Needed to avoid crash (from ElectricPowerServiceManager.hh) + createFacilityElectricPowerServiceObject(*state); - SetPredefinedTables(*state); + SetPredefinedTables(*state); - Real64 DistrictHeatingWater = 4e8; - SetupOutputVariable(*state, - "Exterior Equipment DistrictHeatingWater Energy", - OutputProcessor::Unit::J, - DistrictHeatingWater, - OutputProcessor::SOVTimeStepType::Zone, - OutputProcessor::SOVStoreType::Summed, - "DHWaterExtEq", - {}, - "DistrictHeatingWater", - "ExteriorEquipment", - "General"); + Real64 DistrictHeatingWater = 4e8; + SetupOutputVariable(*state, + "Exterior Equipment DistrictHeatingWater Energy", + OutputProcessor::Unit::J, + DistrictHeatingWater, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "DHWaterExtEq", + {}, + "DistrictHeatingWater", + "ExteriorEquipment", + "General"); - Real64 DistrictHeatingSteam = 5e8; - SetupOutputVariable(*state, - "Exterior Equipment DistrictHeatingSteam Energy", - OutputProcessor::Unit::J, - DistrictHeatingSteam, - OutputProcessor::SOVTimeStepType::Zone, - OutputProcessor::SOVStoreType::Summed, - "DHSteamExtEq", - {}, - "DistrictHeatingSteam", - "ExteriorEquipment", - "General"); - - state->dataGlobal->DoWeathSim = true; - state->dataGlobal->TimeStepZone = 1.0; - state->dataGlobal->MinutesPerTimeStep = state->dataGlobal->TimeStepZone * 60; - state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 3600.0; - state->dataOutRptTab->displayTabularBEPS = true; - // OutputProcessor::TimeValue.allocate(2); - - auto timeStep = 1.0; - - SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); - SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); - - *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).TimeStep = 60; - *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).TimeStep = 60; - - GetInputOutputTableSummaryReports(*state); - - state->dataEnvrn->Month = 12; - - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); - GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); - - auto &ort = state->dataOutRptTab; - constexpr int dhWaterIndex = 4; - constexpr int dhSteamIndex = 5; - EXPECT_EQ("DistrictHeatingWater", ort->resourceTypeNames(dhWaterIndex)); - EXPECT_EQ("DistrictHeatingSteam", ort->resourceTypeNames(dhSteamIndex)); - - EXPECT_NEAR(DistrictHeatingWater, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); - EXPECT_NEAR(DistrictHeatingWater, - state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), - 1.); - // General - EXPECT_NEAR(DistrictHeatingWater, - state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), - 1.); - - EXPECT_NEAR(DistrictHeatingSteam, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); - EXPECT_NEAR(DistrictHeatingSteam, - state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), - 1.); - // General - EXPECT_NEAR(DistrictHeatingSteam, - state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), - 1.); - - UpdateMeterReporting(*state); - UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); - GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); - GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); - EXPECT_NEAR(DistrictHeatingWater * 2, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); - EXPECT_NEAR(DistrictHeatingWater * 2, - state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), - 1.); - // General - EXPECT_NEAR(DistrictHeatingWater * 2, - state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), - 1.); - - EXPECT_NEAR(DistrictHeatingSteam * 2, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); - EXPECT_NEAR(DistrictHeatingSteam * 2, - state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), - 1.); - // General - EXPECT_NEAR(DistrictHeatingSteam * 2, - state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), - 1.); - - OutputReportTabular::WriteBEPSTable(*state); - OutputReportTabular::WriteDemandEndUseSummary(*state); - - // We test for Heating and Total, since they should be the same - std::vector testReportNames = {"AnnualBuildingUtilityPerformanceSummary", "DemandEndUseComponentsSummary"}; - std::vector endUseSubCategoryNames = {"General"}; - - // Query End Use - { - std::string query(R"sql( + Real64 DistrictHeatingSteam = 5e8; + SetupOutputVariable(*state, + "Exterior Equipment DistrictHeatingSteam Energy", + OutputProcessor::Unit::J, + DistrictHeatingSteam, + OutputProcessor::SOVTimeStepType::Zone, + OutputProcessor::SOVStoreType::Summed, + "DHSteamExtEq", + {}, + "DistrictHeatingSteam", + "ExteriorEquipment", + "General"); + + state->dataGlobal->DoWeathSim = true; + state->dataGlobal->TimeStepZone = 1.0; + state->dataGlobal->MinutesPerTimeStep = state->dataGlobal->TimeStepZone * 60; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * 3600.0; + state->dataOutRptTab->displayTabularBEPS = true; + // OutputProcessor::TimeValue.allocate(2); + + auto timeStep = 1.0; + + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::Zone, timeStep); + SetupTimePointers(*state, OutputProcessor::SOVTimeStepType::HVAC, timeStep); + + *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::Zone).TimeStep = 60; + *state->dataOutputProcessor->TimeValue.at(OutputProcessor::TimeStepType::System).TimeStep = 60; + + GetInputOutputTableSummaryReports(*state); + + state->dataEnvrn->Month = 12; + + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); + GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); + + auto &ort = state->dataOutRptTab; + constexpr int dhWaterIndex = 4; + constexpr int dhSteamIndex = 5; + EXPECT_EQ("DistrictHeatingWater", ort->resourceTypeNames(dhWaterIndex)); + EXPECT_EQ("DistrictHeatingSteam", ort->resourceTypeNames(dhSteamIndex)); + + EXPECT_NEAR(DistrictHeatingWater, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); + EXPECT_NEAR( + DistrictHeatingWater, state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), 1.); + // General + EXPECT_NEAR(DistrictHeatingWater, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), + 1.); + + EXPECT_NEAR(DistrictHeatingSteam, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); + EXPECT_NEAR( + DistrictHeatingSteam, state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), 1.); + // General + EXPECT_NEAR(DistrictHeatingSteam, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), + 1.); + + UpdateMeterReporting(*state); + UpdateDataandReport(*state, OutputProcessor::TimeStepType::Zone); + GatherBEPSResultsForTimestep(*state, OutputProcessor::TimeStepType::Zone); + GatherPeakDemandForTimestep(*state, OutputProcessor::TimeStepType::Zone); + EXPECT_NEAR(DistrictHeatingWater * 2, state->dataOutRptTab->gatherTotalsBEPS(dhWaterIndex), 1.); + EXPECT_NEAR(DistrictHeatingWater * 2, + state->dataOutRptTab->gatherEndUseBEPS(dhWaterIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), + 1.); + // General + EXPECT_NEAR(DistrictHeatingWater * 2, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhWaterIndex), + 1.); + + EXPECT_NEAR(DistrictHeatingSteam * 2, state->dataOutRptTab->gatherTotalsBEPS(dhSteamIndex), 1.); + EXPECT_NEAR(DistrictHeatingSteam * 2, + state->dataOutRptTab->gatherEndUseBEPS(dhSteamIndex, static_cast(Constant::EndUse::ExteriorEquipment) + 1), + 1.); + // General + EXPECT_NEAR(DistrictHeatingSteam * 2, + state->dataOutRptTab->gatherEndUseSubBEPS(1, static_cast(Constant::EndUse::ExteriorEquipment) + 1, dhSteamIndex), + 1.); + + OutputReportTabular::WriteBEPSTable(*state); + OutputReportTabular::WriteDemandEndUseSummary(*state); + + // We test for Heating and Total, since they should be the same + std::vector testReportNames = {"AnnualBuildingUtilityPerformanceSummary", "DemandEndUseComponentsSummary"}; + std::vector endUseSubCategoryNames = {"General"}; + + // Query End Use + { + std::string query(R"sql( SELECT Value From TabularDataWithStrings WHERE TableName = 'End Uses' AND ReportName = 'AnnualBuildingUtilityPerformanceSummary' AND ColumnName = 'District Heating Water' AND RowName = 'Exterior Equipment')sql"); - auto const result = queryResult(query, "TabularDataWithStrings"); - Real64 const return_val1 = execAndReturnFirstDouble(query); + auto const result = queryResult(query, "TabularDataWithStrings"); + Real64 const return_val1 = execAndReturnFirstDouble(query); - ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; - EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val1, 0.01) << "Failed for query: " << query; - } + ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; + EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val1, 0.01) << "Failed for query: " << query; + } - { - std::string query("SELECT Value From TabularDataWithStrings" - " WHERE TableName = 'End Uses'" - " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" - " AND ColumnName = 'District Heating Steam'" - " AND RowName = 'Exterior Equipment'"); - auto const result = queryResult(query, "TabularDataWithStrings"); - Real64 const return_val = execAndReturnFirstDouble(query); - - ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; - EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; - } + { + std::string query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Steam'" + " AND RowName = 'Exterior Equipment'"); + auto const result = queryResult(query, "TabularDataWithStrings"); + Real64 const return_val = execAndReturnFirstDouble(query); - // Query End Use with Subcategory - { - std::string const query("SELECT Value From TabularDataWithStrings" - " WHERE TableName = 'End Uses By Subcategory'" - " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" - " AND ColumnName = 'District Heating Water'" - " AND RowName = 'Exterior Equipment:General'"); - Real64 const return_val = execAndReturnFirstDouble(query); - EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; - } + ASSERT_EQ(1u, result.size()) << "Failed for query: " << query; + EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; + } - { - std::string query("SELECT Value From TabularDataWithStrings" - " WHERE TableName = 'End Uses By Subcategory'" - " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" - " AND ColumnName = 'District Heating Steam'" - " AND RowName = 'Exterior Equipment:General'"); - Real64 return_val = execAndReturnFirstDouble(query); - EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; - } + // Query End Use with Subcategory + { + std::string const query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses By Subcategory'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Water'" + " AND RowName = 'Exterior Equipment:General'"); + Real64 const return_val = execAndReturnFirstDouble(query); + EXPECT_NEAR(DistrictHeatingWater * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; } + + { + std::string query("SELECT Value From TabularDataWithStrings" + " WHERE TableName = 'End Uses By Subcategory'" + " AND ReportName = 'AnnualBuildingUtilityPerformanceSummary'" + " AND ColumnName = 'District Heating Steam'" + " AND RowName = 'Exterior Equipment:General'"); + Real64 return_val = execAndReturnFirstDouble(query); + EXPECT_NEAR(DistrictHeatingSteam * 2 / 3.6e6, return_val, 0.01) << "Failed for query: " << query; + } +} From 00abc23fca829a7dc7e1cfa25c2e3c014e7ef81a Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 12 Sep 2023 22:24:49 +0200 Subject: [PATCH 142/161] Fix #10210 - add Calendar Year to ERL, C and Python API * ERL: CalendarYear * C: calendarYear * python: calendar_year --- .../energyplus-runtime-language/variables.tex | 3 ++- src/EnergyPlus/RuntimeLanguageProcessor.cc | 3 +++ src/EnergyPlus/RuntimeLanguageProcessor.hh | 2 ++ src/EnergyPlus/api/datatransfer.cc | 6 ++++++ src/EnergyPlus/api/datatransfer.h | 12 ++++++++++-- src/EnergyPlus/api/datatransfer.py | 18 +++++++++++++++++- src/EnergyPlus/api/plugin_tester.py | 1 + 7 files changed, 41 insertions(+), 4 deletions(-) diff --git a/doc/ems-application-guide/src/energyplus-runtime-language/variables.tex b/doc/ems-application-guide/src/energyplus-runtime-language/variables.tex index 19fe10f8d28..10c4fd9fedc 100644 --- a/doc/ems-application-guide/src/energyplus-runtime-language/variables.tex +++ b/doc/ems-application-guide/src/energyplus-runtime-language/variables.tex @@ -79,7 +79,8 @@ \subsection{Built-In Variables}\label{built-in-variables} \midrule \endhead -Year & 1900--2100 \tabularnewline +Year & 1900--2100 (Read from EPW) \tabularnewline +CalendarYear & 1900--2100 (Assigned from RunPeriod - only valid for Weather File Run Periods) \tabularnewline Month & 1--12 \tabularnewline DayOfMonth & 1--31 \tabularnewline DayOfWeek & 1--7 (1 = Sun, 2 = Mon, \ldots) \tabularnewline diff --git a/src/EnergyPlus/RuntimeLanguageProcessor.cc b/src/EnergyPlus/RuntimeLanguageProcessor.cc index 9b7f581d62c..a1786069fd3 100644 --- a/src/EnergyPlus/RuntimeLanguageProcessor.cc +++ b/src/EnergyPlus/RuntimeLanguageProcessor.cc @@ -138,6 +138,7 @@ void InitializeRuntimeLanguage(EnergyPlusData &state) // Create dynamic built-in variables state.dataRuntimeLangProcessor->YearVariableNum = NewEMSVariable(state, "YEAR", 0); + state.dataRuntimeLangProcessor->CalendarYearVariableNum = NewEMSVariable(state, "CALENDARYEAR", 0); state.dataRuntimeLangProcessor->MonthVariableNum = NewEMSVariable(state, "MONTH", 0); state.dataRuntimeLangProcessor->DayOfMonthVariableNum = NewEMSVariable(state, "DAYOFMONTH", 0); // 'DAYOFMONTH'? state.dataRuntimeLangProcessor->DayOfWeekVariableNum = NewEMSVariable(state, "DAYOFWEEK", 0); @@ -180,6 +181,8 @@ void InitializeRuntimeLanguage(EnergyPlusData &state) // Update built-in variables state.dataRuntimeLang->ErlVariable(state.dataRuntimeLangProcessor->YearVariableNum).Value = SetErlValueNumber(double(state.dataEnvrn->Year)); + state.dataRuntimeLang->ErlVariable(state.dataRuntimeLangProcessor->CalendarYearVariableNum).Value = + SetErlValueNumber(double(state.dataGlobal->CalendarYear)); state.dataRuntimeLang->ErlVariable(state.dataRuntimeLangProcessor->MonthVariableNum).Value = SetErlValueNumber(double(state.dataEnvrn->Month)); state.dataRuntimeLang->ErlVariable(state.dataRuntimeLangProcessor->DayOfMonthVariableNum).Value = SetErlValueNumber(double(state.dataEnvrn->DayOfMonth)); diff --git a/src/EnergyPlus/RuntimeLanguageProcessor.hh b/src/EnergyPlus/RuntimeLanguageProcessor.hh index 53cb57beb52..45c740a960a 100644 --- a/src/EnergyPlus/RuntimeLanguageProcessor.hh +++ b/src/EnergyPlus/RuntimeLanguageProcessor.hh @@ -218,6 +218,7 @@ struct RuntimeLanguageProcessorData : BaseGlobalStruct Array1D_int CurveIndexVariableNums; Array1D_int ConstructionIndexVariableNums; int YearVariableNum = 0; + int CalendarYearVariableNum = 0; int MonthVariableNum = 0; int DayOfMonthVariableNum = 0; int DayOfWeekVariableNum = 0; @@ -259,6 +260,7 @@ struct RuntimeLanguageProcessorData : BaseGlobalStruct this->CurveIndexVariableNums.clear(); this->ConstructionIndexVariableNums.clear(); this->YearVariableNum = 0; + this->CalendarYearVariableNum = 0; this->MonthVariableNum = 0; this->DayOfMonthVariableNum = 0; this->DayOfWeekVariableNum = 0; diff --git a/src/EnergyPlus/api/datatransfer.cc b/src/EnergyPlus/api/datatransfer.cc index ca11e2f7a2c..a9ab50b3b85 100644 --- a/src/EnergyPlus/api/datatransfer.cc +++ b/src/EnergyPlus/api/datatransfer.cc @@ -784,6 +784,12 @@ int year(EnergyPlusState state) return thisState->dataEnvrn->Year; } +int calendarYear(EnergyPlusState state) +{ + auto *thisState = reinterpret_cast(state); + return thisState->dataGlobal->CalendarYear; +} + int month(EnergyPlusState state) { auto *thisState = reinterpret_cast(state); diff --git a/src/EnergyPlus/api/datatransfer.h b/src/EnergyPlus/api/datatransfer.h index 4f3566779c5..3a3a532ef7a 100644 --- a/src/EnergyPlus/api/datatransfer.h +++ b/src/EnergyPlus/api/datatransfer.h @@ -423,13 +423,21 @@ ENERGYPLUSLIB_API Real64 getPluginTrendVariableDirection(EnergyPlusState state, // ----- FUNCTIONS RELATED TO MISC CURRENT SIMULATION STATE -/// \brief Returns the current year of the simulation. +/// \brief Returns the current year of the simulation, taken from the EPW. +/// \details This is directly read from the EPW, and as such, if the EPW is for example a TMY3 file +/// the year could be set to an abritrary number and change from one timestep to the next. See calendarYear for an alternative +/// \param[in] state An active EnergyPlusState instance created with `stateNew`. +/// \remark The behavior of this function is not well-defined until the `apiDataFullyReady` function returns true. +/// \see apiDataFullyReady +ENERGYPLUSLIB_API int year(EnergyPlusState state); + +/// \brief Returns the Calendar Year of the simulation (based on the RunPeriod object). Only valid for weather file run periods. /// \details A simulation can span multiple years and will always have a "meaningful" year that is either user-defined explicitly, /// determined based on other inputs in the input file, or chosen as the current year. /// \param[in] state An active EnergyPlusState instance created with `stateNew`. /// \remark The behavior of this function is not well-defined until the `apiDataFullyReady` function returns true. /// \see apiDataFullyReady -ENERGYPLUSLIB_API int year(EnergyPlusState state); +ENERGYPLUSLIB_API int calendarYear(EnergyPlusState state); /// \brief Returns the current month of the simulation, from 1 for January to 12 for December. /// \param[in] state An active EnergyPlusState instance created with `stateNew`. diff --git a/src/EnergyPlus/api/datatransfer.py b/src/EnergyPlus/api/datatransfer.py index c6cde478ba1..b8098520e6d 100644 --- a/src/EnergyPlus/api/datatransfer.py +++ b/src/EnergyPlus/api/datatransfer.py @@ -162,6 +162,8 @@ def __init__(self, api: cdll, running_as_python_plugin: bool = False): # some simulation data values are available for plugins or regular runtime calls self.api.year.argtypes = [c_void_p] self.api.year.restype = c_int + self.api.calendarYear.argtypes = [c_void_p] + self.api.calendarYear.restype = c_int self.api.month.argtypes = [c_void_p] self.api.month.restype = c_int self.api.dayOfMonth.argtypes = [c_void_p] @@ -992,7 +994,7 @@ def get_trend_direction(self, state: c_void_p, trend_handle: int, count: int) -> def year(self, state: c_void_p) -> int: """ - Get the "current" calendar year of the simulation. All simulations operate at a real year, either user + Get the "current" year of the simulation, read from the EPW. All simulations operate at a real year, either user specified or automatically selected by EnergyPlus based on other data (start day of week + leap year option). :param state: An active EnergyPlus "state" that is returned from a call to `api.state_manager.new_state()`. @@ -1000,6 +1002,20 @@ def year(self, state: c_void_p) -> int: """ return self.api.year(state) + def calendar_year(self, state: c_void_p) -> int: + """ + Get the "current" calendar year of the simulation. + + Only valid for weather file run periods. + + All simulations operate at a real year, either user + specified or automatically selected by EnergyPlus based on other data (start day of week + leap year option). + + :param state: An active EnergyPlus "state" that is returned from a call to `api.state_manager.new_state()`. + :return: An integer year (2020, for example) + """ + return self.api.calendarYear(state) + def month(self, state: c_void_p) -> int: """ Get the current month of the simulation (1-12) diff --git a/src/EnergyPlus/api/plugin_tester.py b/src/EnergyPlus/api/plugin_tester.py index 1312a86432a..cbe963cc029 100644 --- a/src/EnergyPlus/api/plugin_tester.py +++ b/src/EnergyPlus/api/plugin_tester.py @@ -143,6 +143,7 @@ def generate_mock_api(bare_mock_api_instance: Mock) -> Mock: bare_mock_api_instance.exchange.get_global_value.return_value = 3.14 bare_mock_api_instance.exchange.set_global_value.return_value = None bare_mock_api_instance.exchange.year.return_value = 1 + bare_mock_api_instance.exchange.calendarYear.return_value = 1 bare_mock_api_instance.exchange.month.return_value = 1 bare_mock_api_instance.exchange.day_of_month.return_value = 1 bare_mock_api_instance.exchange.hour.return_value = 1 From b76d869e1748467443f42bce5fba89a469c2432f Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 15 Sep 2023 00:10:23 +0200 Subject: [PATCH 143/161] Add test --- tst/EnergyPlus/api/TestDataTransfer.c | 3 +++ tst/EnergyPlus/api/TestDataTransfer.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/tst/EnergyPlus/api/TestDataTransfer.c b/tst/EnergyPlus/api/TestDataTransfer.c index ce89b62bc61..674615c1a61 100644 --- a/tst/EnergyPlus/api/TestDataTransfer.c +++ b/tst/EnergyPlus/api/TestDataTransfer.c @@ -109,6 +109,9 @@ void afterZoneTimeStepHandler(EnergyPlusState state) printf("Actuated Dew Point temp value is: %8.4f \n", dp_temp); Real64 simTime = currentSimTime(state); printf("Current Sim Time: %0.2f \n", simTime); + const int epwYear = year(state); + const int runPeriodYear = calendarYear(state); + printf("year: %i, calendarYear: %i\n", epwYear, runPeriodYear); if (oa_temp > 10) { printf("Setting Zn001:Wall001 construction (%d) to R13WALL (%d)", zone1_wall1Actuator, wallConstruction); diff --git a/tst/EnergyPlus/api/TestDataTransfer.py b/tst/EnergyPlus/api/TestDataTransfer.py index 64e3c75aac6..4e011195e93 100644 --- a/tst/EnergyPlus/api/TestDataTransfer.py +++ b/tst/EnergyPlus/api/TestDataTransfer.py @@ -126,6 +126,10 @@ def time_step_handler(state): print("Actuated Dew Point temp value is: %s" % dp_temp) sim_time = api.exchange.current_sim_time(state) print("Current sim time is: %f" % sim_time) + epwYear = api.exchange.year(state) + runPeriodYear = api.exchange.calendar_year(state) + print("year: %i, calendarYear: %i\n", epwYear, runPeriodYear) + if api.exchange.zone_time_step_number(state) == 1: n = api.exchange.num_time_steps_in_hour(state) tomorrow_db = api.exchange.tomorrow_weather_outdoor_dry_bulb_at_time(state, 3, 2) From 25b762bfd8a12626ba1c746a10e120f6a67eebbe Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 15 Sep 2023 00:11:46 +0200 Subject: [PATCH 144/161] Unbrick read the docs (IDD moved + Jinja3.1 is not compatible) --- doc/readthedocs/requirements.txt | 3 ++- doc/readthedocs/sphinx/conf.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/readthedocs/requirements.txt b/doc/readthedocs/requirements.txt index 3b1f6efa3ad..00bd730e07b 100644 --- a/doc/readthedocs/requirements.txt +++ b/doc/readthedocs/requirements.txt @@ -1,3 +1,4 @@ sphinx-rtd-theme sphinx>3 -urllib3==1.26.15 \ No newline at end of file +Jinja2<3.1 # cannot import name 'environmentfilter' from 'jinja2' +urllib3==1.26.15 diff --git a/doc/readthedocs/sphinx/conf.py b/doc/readthedocs/sphinx/conf.py index 8e6709a3613..005f886f1c3 100644 --- a/doc/readthedocs/sphinx/conf.py +++ b/doc/readthedocs/sphinx/conf.py @@ -134,7 +134,7 @@ # # OK, now we need to make sure the epJSON schema is generated so we can process it # Since this will primarily just be run by readthedocs, I'm just going to re-run the schema generator try: - check_call(['python3', 'scripts/dev/generate_epJSON_schema/generate_epJSON_schema.py', 'idd'], cwd=repo_root) + check_call(['python3', 'idd/schema/generate_epJSON_schema.py', 'idd'], cwd=repo_root) except CalledProcessError as e: raise Exception(f"Schema Generation failed! Exception string: {str(e)}") from None except FileNotFoundError as e: From c75dd92789c23380b6d821e0afe7c91f5b5bc191 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 15 Sep 2023 09:33:30 +0200 Subject: [PATCH 145/161] Adjust EMS test now that there is one more built-in variable --- tst/EnergyPlus/unit/EMSManager.unit.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tst/EnergyPlus/unit/EMSManager.unit.cc b/tst/EnergyPlus/unit/EMSManager.unit.cc index 39346bef648..b2d415bb963 100644 --- a/tst/EnergyPlus/unit/EMSManager.unit.cc +++ b/tst/EnergyPlus/unit/EMSManager.unit.cc @@ -1114,12 +1114,11 @@ TEST_F(EnergyPlusFixture, EMSManager_TestFuntionCall) ObjexxFCL::Optional_int_const()); // process trend functions again using above data EXPECT_TRUE(anyRan); - int index(0); - int offset(27); // first 26 values in ErlExpression() are key words + 1 EMS global variable + int offset = 28; // first 27 values in ErlExpression() are constant and built-in variables EXPECT_TRUE(compare_enums(state->dataRuntimeLang->ErlExpression(1).Operator, ErlFunc::Round)); EXPECT_EQ(state->dataRuntimeLang->ErlExpression(1).NumOperands, 1); EXPECT_EQ(state->dataRuntimeLang->ErlExpression(1).Operand.size(), 1u); - index = 1 + offset; + int index = 1 + offset; EXPECT_EQ(state->dataRuntimeLang->ErlVariable(index).Name, "VAR1"); EXPECT_EQ(state->dataRuntimeLang->ErlVariable(index).Value.Number, 2.0); // round(2.1) From 1c847c7119fa762456e0ea03c2a86e1d1c4104c2 Mon Sep 17 00:00:00 2001 From: Matt Mitchell Date: Fri, 15 Sep 2023 10:34:38 -0600 Subject: [PATCH 146/161] clarify CMake messages around use of CMAKE_OSX_DEPLOYMENT_TARGET --- CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c2bd82fd62..240c821fbbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,12 @@ cmake_policy(SET CMP0048 NEW) # handling project_version_* variables project(EnergyPlus) # Raise an error if attempting to compile on macOS older than 10.15 - it does not work -if (APPLE AND CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS "10.15") - message(FATAL_ERROR "The minimum required version for macOS is 10.15, however CMAKE_OSX_DEPLOYMENT_TARGET is set to ${CMAKE_OSX_DEPLOYMENT_TARGET}. Please set CMAKE_OSX_DEPLOYMENT_TARGET to 10.15 or greater and try again.") +if (APPLE) + if ("${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "") + message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET not set. Please set CMAKE_OSX_DEPLOYMENT_TARGET to 10.15 or greater and try again.") + elseif (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS "10.15") + message(FATAL_ERROR "The minimum required version for macOS is 10.15, however CMAKE_OSX_DEPLOYMENT_TARGET is set to ${CMAKE_OSX_DEPLOYMENT_TARGET}.") + endif() endif() if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_GREATER "3.0") From 135fd376a564fc0093560d05bb151ff3c42dcfdc Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 15 Sep 2023 19:26:30 -0500 Subject: [PATCH 147/161] Solution to CondFD Flux Imbalance It was determined that the outside surface flux was wrong for a multi-year simulation. Testing and comparing two output variables that should be almost identical showed than when the IsRain flag was true that things were way off. This is because the one variable was not being calculated properly. As a result, there were flux inconsistencies. The fix corrects this problem and eliminates the inconsistency. A unit test is also included in this commit. --- src/EnergyPlus/HeatBalFiniteDiffManager.cc | 2 + .../unit/HeatBalFiniteDiffManager.unit.cc | 163 +++++++++++------- 2 files changed, 103 insertions(+), 62 deletions(-) diff --git a/src/EnergyPlus/HeatBalFiniteDiffManager.cc b/src/EnergyPlus/HeatBalFiniteDiffManager.cc index febe9c5657d..c6987231e3b 100644 --- a/src/EnergyPlus/HeatBalFiniteDiffManager.cc +++ b/src/EnergyPlus/HeatBalFiniteDiffManager.cc @@ -2609,6 +2609,8 @@ namespace HeatBalFiniteDiffManager { interNodeFlux - sourceFlux + surfaceFD.CpDelXRhoS2(node) * (surfaceFD.TDT(node) - surfaceFD.TDpriortimestep(node)) / state.dataGlobal->TimeStepZoneSec; } + if (state.dataEnvrn->IsRain) + state.dataHeatBalSurf->SurfOpaqOutFaceCondFlux(Surf) = -surfaceFD.QDreport(1); // Update the outside flux if it is raining } void adjustPropertiesForPhaseChange(EnergyPlusData &state, diff --git a/tst/EnergyPlus/unit/HeatBalFiniteDiffManager.unit.cc b/tst/EnergyPlus/unit/HeatBalFiniteDiffManager.unit.cc index 8d2f9d02ee2..53e4fd2bc4c 100644 --- a/tst/EnergyPlus/unit/HeatBalFiniteDiffManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalFiniteDiffManager.unit.cc @@ -53,6 +53,7 @@ // EnergyPlus Headers #include #include +#include #include #include #include @@ -70,15 +71,18 @@ TEST_F(EnergyPlusFixture, HeatBalFiniteDiffManager_CalcNodeHeatFluxTest) { auto &SurfaceFD = state->dataHeatBalFiniteDiffMgr->SurfaceFD; int constexpr numNodes(4); + Real64 constexpr allowedTolerance = 0.0001; int nodeNum(0); SurfaceFD.allocate(1); int constexpr SurfNum(1); - SurfaceFD(SurfNum).QDreport.allocate(numNodes + 1); - SurfaceFD(SurfNum).TDpriortimestep.allocate(numNodes + 1); - SurfaceFD(SurfNum).TDT.allocate(numNodes + 1); - SurfaceFD(SurfNum).CpDelXRhoS1.allocate(numNodes + 1); - SurfaceFD(SurfNum).CpDelXRhoS2.allocate(numNodes + 1); + auto &surfFD = SurfaceFD(SurfNum); + surfFD.QDreport.allocate(numNodes + 1); + surfFD.TDpriortimestep.allocate(numNodes + 1); + surfFD.TDT.allocate(numNodes + 1); + surfFD.CpDelXRhoS1.allocate(numNodes + 1); + surfFD.CpDelXRhoS2.allocate(numNodes + 1); state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux.allocate(1); + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux.allocate(1); state->dataGlobal->TimeStepZoneSec = 600.0; Real64 expectedResult1(0.0); @@ -86,53 +90,71 @@ TEST_F(EnergyPlusFixture, HeatBalFiniteDiffManager_CalcNodeHeatFluxTest) Real64 expectedResult3(0.0); Real64 expectedResult4(0.0); Real64 expectedResult5(0.0); + Real64 expectedResultO(1.0); // Steady-state case state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum) = 100.0; nodeNum = 1; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 20.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 20.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 20.0; + surfFD.TDT(nodeNum) = 20.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult1 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); nodeNum = 2; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 22.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 22.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 22.0; + surfFD.TDT(nodeNum) = 22.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult2 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); nodeNum = 3; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 23.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 23.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 23.0; + surfFD.TDT(nodeNum) = 23.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult3 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); nodeNum = 4; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 26.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 26.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 26.0; + surfFD.TDT(nodeNum) = 26.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult4 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); nodeNum = 5; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 27.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 27.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 27.0; + surfFD.TDT(nodeNum) = 27.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult5 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); + state->dataEnvrn->IsRain = false; + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum) = 77.0; + expectedResultO = 77.0; + + CalcNodeHeatFlux(*state, SurfNum, numNodes); + EXPECT_NEAR(surfFD.QDreport(1), expectedResult1, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(2), expectedResult2, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(3), expectedResult3, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(4), expectedResult4, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(5), expectedResult5, allowedTolerance); + EXPECT_NEAR(state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum), expectedResultO, allowedTolerance); + + state->dataEnvrn->IsRain = true; + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum) = 77.0; + expectedResultO = -state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); + CalcNodeHeatFlux(*state, SurfNum, numNodes); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(1), expectedResult1, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(2), expectedResult2, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(3), expectedResult3, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(4), expectedResult4, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(5), expectedResult5, 0.0001); + EXPECT_NEAR(surfFD.QDreport(1), expectedResult1, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(2), expectedResult2, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(3), expectedResult3, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(4), expectedResult4, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(5), expectedResult5, allowedTolerance); + EXPECT_NEAR(state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum), expectedResultO, allowedTolerance); // Reset - SurfaceFD(SurfNum).QDreport = 0.0; + surfFD.QDreport = 0.0; expectedResult1 = 0.0; expectedResult2 = 0.0; expectedResult3 = 0.0; @@ -144,50 +166,67 @@ TEST_F(EnergyPlusFixture, HeatBalFiniteDiffManager_CalcNodeHeatFluxTest) state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum) = -200.0; nodeNum = 5; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 27.5; - SurfaceFD(SurfNum).TDT(nodeNum) = 27.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 0.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 0.0; + surfFD.TDpriortimestep(nodeNum) = 27.5; + surfFD.TDT(nodeNum) = 27.0; + surfFD.CpDelXRhoS1(nodeNum) = 0.0; + surfFD.CpDelXRhoS2(nodeNum) = 0.0; expectedResult5 = state->dataHeatBalSurf->SurfOpaqInsFaceCondFlux(SurfNum); nodeNum = 4; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 26.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 26.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 0.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 26.0; + surfFD.TDT(nodeNum) = 26.0; + surfFD.CpDelXRhoS1(nodeNum) = 0.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult4 = expectedResult5; // r-layer with zero heat capacity, so flux passes through nodeNum = 3; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 23.0; - SurfaceFD(SurfNum).TDT(nodeNum) = 23.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; + surfFD.TDpriortimestep(nodeNum) = 23.0; + surfFD.TDT(nodeNum) = 23.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; expectedResult3 = expectedResult4; // no change in temperature at nodes 4 and 3, so flux passes through nodeNum = 2; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 22.2; - SurfaceFD(SurfNum).TDT(nodeNum) = 22.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; - expectedResult2 = expectedResult3 + (SurfaceFD(SurfNum).TDT(nodeNum) - SurfaceFD(SurfNum).TDpriortimestep(nodeNum)) * - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) / state->dataGlobal->TimeStepZoneSec; + surfFD.TDpriortimestep(nodeNum) = 22.2; + surfFD.TDT(nodeNum) = 22.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; + expectedResult2 = + expectedResult3 + (surfFD.TDT(nodeNum) - surfFD.TDpriortimestep(nodeNum)) * surfFD.CpDelXRhoS2(nodeNum) / state->dataGlobal->TimeStepZoneSec; nodeNum = 1; - SurfaceFD(SurfNum).TDpriortimestep(nodeNum) = 20.1; - SurfaceFD(SurfNum).TDT(nodeNum) = 20.0; - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum) = 1000.0; - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) = 2000.0; - expectedResult1 = expectedResult2 + (SurfaceFD(SurfNum).TDT(nodeNum + 1) - SurfaceFD(SurfNum).TDpriortimestep(nodeNum + 1)) * - SurfaceFD(SurfNum).CpDelXRhoS1(nodeNum + 1) / state->dataGlobal->TimeStepZoneSec; - expectedResult1 = expectedResult1 + (SurfaceFD(SurfNum).TDT(nodeNum) - SurfaceFD(SurfNum).TDpriortimestep(nodeNum)) * - SurfaceFD(SurfNum).CpDelXRhoS2(nodeNum) / state->dataGlobal->TimeStepZoneSec; + surfFD.TDpriortimestep(nodeNum) = 20.1; + surfFD.TDT(nodeNum) = 20.0; + surfFD.CpDelXRhoS1(nodeNum) = 1000.0; + surfFD.CpDelXRhoS2(nodeNum) = 2000.0; + expectedResult1 = expectedResult2 + (surfFD.TDT(nodeNum + 1) - surfFD.TDpriortimestep(nodeNum + 1)) * surfFD.CpDelXRhoS1(nodeNum + 1) / + state->dataGlobal->TimeStepZoneSec; + expectedResult1 = + expectedResult1 + (surfFD.TDT(nodeNum) - surfFD.TDpriortimestep(nodeNum)) * surfFD.CpDelXRhoS2(nodeNum) / state->dataGlobal->TimeStepZoneSec; + + state->dataEnvrn->IsRain = false; + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum) = 123.0; + expectedResultO = 123.0; + + CalcNodeHeatFlux(*state, SurfNum, numNodes); + EXPECT_NEAR(surfFD.QDreport(1), expectedResult1, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(2), expectedResult2, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(3), expectedResult3, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(4), expectedResult4, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(5), expectedResult5, allowedTolerance); + EXPECT_NEAR(state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum), expectedResultO, allowedTolerance); + + state->dataEnvrn->IsRain = true; + state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum) = 123.0; + expectedResultO = -expectedResult1; CalcNodeHeatFlux(*state, SurfNum, numNodes); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(1), expectedResult1, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(2), expectedResult2, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(3), expectedResult3, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(4), expectedResult4, 0.0001); - EXPECT_NEAR(SurfaceFD(SurfNum).QDreport(5), expectedResult5, 0.0001); + EXPECT_NEAR(surfFD.QDreport(1), expectedResult1, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(2), expectedResult2, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(3), expectedResult3, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(4), expectedResult4, allowedTolerance); + EXPECT_NEAR(surfFD.QDreport(5), expectedResult5, allowedTolerance); + EXPECT_NEAR(state->dataHeatBalSurf->SurfOpaqOutFaceCondFlux(SurfNum), expectedResultO, allowedTolerance); } TEST_F(EnergyPlusFixture, HeatBalFiniteDiffManager_adjustPropertiesForPhaseChange) From 5f3de84d75428caf6d82d406c8060e52909e5354 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 15 Sep 2023 16:28:21 +0200 Subject: [PATCH 148/161] (meta) unit test for #10220 --- .../unit/EconomicLifeCycleCost.unit.cc | 68 +++++++++++++++++++ .../unit/Fixtures/EnergyPlusFixture.cc | 7 ++ .../unit/Fixtures/EnergyPlusFixture.hh | 4 ++ 3 files changed, 79 insertions(+) diff --git a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc index 36d7b794c43..1b0aaeaccaa 100644 --- a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc +++ b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc @@ -58,6 +58,7 @@ #include #include #include +#include #include "Fixtures/EnergyPlusFixture.hh" @@ -585,3 +586,70 @@ TEST_F(EnergyPlusFixture, EconomicLifeCycleCost_ExpressAsCashFlows) EXPECT_NEAR(state->dataEconLifeCycleCost->CashFlow[CostCategory::TotGrand].yrAmount(4), 1278. + 123456., 0.001); EXPECT_NEAR(state->dataEconLifeCycleCost->CashFlow[CostCategory::TotGrand].yrAmount(5), 1278., 0.001); } + +TEST_F(EnergyPlusFixture, EconomicLifeCycleCost_GetInput_EnsureFuelTypesAllRecognized) +{ + + const auto &schema = EnergyPlusFixture::schema(); + const auto &lcc_useprice = schema["properties"]["LifeCycleCost:UsePriceEscalation"]; + const auto &resource_field = lcc_useprice["patternProperties"][".*"]["properties"]["resource"]; + const auto &enum_values = resource_field["enum"]; + + // Should support all fuels + Water + ElectricityXXX (Purchased, Produced, SurplusSold, Net) + constexpr size_t numResources = static_cast(Constant::eFuel::Num) + 5; + EXPECT_EQ(numResources, enum_values.size()); + std::string idf_objects = delimited_string({ + "LifeCycleCost:Parameters,", + " TypicalLCC, !- Name", + " EndOfYear, !- Discounting Convention", + " ConstantDollar, !- Inflation Approach", + " 0.03, !- Real Discount Rate", + " , !- Nominal Discount Rate", + " , !- Inflation", + " January, !- Base Date Month", + " 2012, !- Base Date Year", + " January, !- Service Date Month", + " 2014, !- Service Date Year", + " 100, !- Length of Study Period in Years", + " 0, !- Tax rate", + " ; !- Depreciation Method", + }); + // All should be valid resources + for (const auto &enum_value : enum_values) { + const std::string enum_string = enum_value.get(); + + const auto resource = static_cast(getEnumValue(Constant::eResourceNamesUC, enum_string)); + EXPECT_TRUE(compare_enums(Constant::eResource::Invalid, resource)) << "Failed for " << enum_string; + + idf_objects += fmt::format(R"idf( +LifeCycleCost:UsePriceEscalation, + LCCUsePriceEscalation {0}, !- Name + {0}, !- Resource + 2009, !- Escalation Start Year + January, !- Escalation Start Month + 1, !- Year Escalation 1 + 1.01, !- Year Escalation 2 + 1.02; !- Year Escalation 3 + +LifeCycleCost:UseAdjustment, + LCCUseAdjustment {0}, !- Name + {0}, !- Resource + 1, !- Year Multiplier 1 + 1.005, !- Year Multiplier 2 + 1.01; !- Year Multiplier 3 + )idf", + enum_string); + } + ASSERT_TRUE(process_idf(idf_objects)); + + GetInputForLifeCycleCost(*state); + + EXPECT_EQ(numResources, state->dataEconLifeCycleCost->numUsePriceEscalation); + EXPECT_TRUE(std::all_of(state->dataEconLifeCycleCost->UsePriceEscalation.begin(), + state->dataEconLifeCycleCost->UsePriceEscalation.end(), + [](auto &lcc) { return lcc.resource != Constant::eResource::Invalid; })); + EXPECT_EQ(numResources, state->dataEconLifeCycleCost->numUseAdjustment); + EXPECT_TRUE(std::all_of(state->dataEconLifeCycleCost->UseAdjustment.begin(), state->dataEconLifeCycleCost->UseAdjustment.end(), [](auto &lcc) { + return lcc.resource != Constant::eResource::Invalid; + })); +} diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc index e3bb5751746..e8902423fb0 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc @@ -64,6 +64,8 @@ #include #include #include +#include + #include #include #include @@ -359,4 +361,9 @@ bool EnergyPlusFixture::process_idf(std::string_view const idf_snippet, bool use return successful_processing; } +const nlohmann::json &EnergyPlusFixture::schema() +{ + return InputProcessor::schema(); +} + } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh index 1a5fef76138..0ae2db54a6c 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh @@ -59,6 +59,7 @@ #include #include +#include #include namespace EnergyPlus { @@ -281,6 +282,9 @@ protected: std::replace(stringLiteral.begin(), stringLiteral.end(), '|', ' '); // replace the trailing || with spaces } + // InputProcessor::schema is private, so re-expose it to the tests deriving EnergyPlusFixture + static const nlohmann::json &schema(); + public: EnergyPlusData *state; From 8c6cbf08f384e8ecbf9d72efd020cc5911d2bfd6 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 09:44:09 +0200 Subject: [PATCH 149/161] Don't expose the schema() to EnergyPlusFixture, just use the public `getObjectSchemaProps` --- tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc | 11 ++++++----- tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc | 6 ------ tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh | 4 ---- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc index 1b0aaeaccaa..4db041513e8 100644 --- a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc +++ b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc @@ -62,6 +62,8 @@ #include "Fixtures/EnergyPlusFixture.hh" +#include + using namespace EnergyPlus; using namespace EnergyPlus::EconomicLifeCycleCost; using namespace EnergyPlus::EconomicTariff; @@ -589,11 +591,10 @@ TEST_F(EnergyPlusFixture, EconomicLifeCycleCost_ExpressAsCashFlows) TEST_F(EnergyPlusFixture, EconomicLifeCycleCost_GetInput_EnsureFuelTypesAllRecognized) { - - const auto &schema = EnergyPlusFixture::schema(); - const auto &lcc_useprice = schema["properties"]["LifeCycleCost:UsePriceEscalation"]; - const auto &resource_field = lcc_useprice["patternProperties"][".*"]["properties"]["resource"]; - const auto &enum_values = resource_field["enum"]; + using json = nlohmann::json; + const json &lcc_useprice_props = state->dataInputProcessing->inputProcessor->getObjectSchemaProps(*state, "LifeCycleCost:UsePriceEscalation"); + const json &resource_field = lcc_useprice_props.at("resource"); + const json &enum_values = resource_field.at("enum"); // Should support all fuels + Water + ElectricityXXX (Purchased, Produced, SurplusSold, Net) constexpr size_t numResources = static_cast(Constant::eFuel::Num) + 5; diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc index e8902423fb0..41540ba49c0 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc @@ -64,7 +64,6 @@ #include #include #include -#include #include #include @@ -361,9 +360,4 @@ bool EnergyPlusFixture::process_idf(std::string_view const idf_snippet, bool use return successful_processing; } -const nlohmann::json &EnergyPlusFixture::schema() -{ - return InputProcessor::schema(); -} - } // namespace EnergyPlus diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh index 0ae2db54a6c..1a5fef76138 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh @@ -59,7 +59,6 @@ #include #include -#include #include namespace EnergyPlus { @@ -282,9 +281,6 @@ protected: std::replace(stringLiteral.begin(), stringLiteral.end(), '|', ' '); // replace the trailing || with spaces } - // InputProcessor::schema is private, so re-expose it to the tests deriving EnergyPlusFixture - static const nlohmann::json &schema(); - public: EnergyPlusData *state; From 37b2b4bc39af83055847b3185545903580b66bf5 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 10:50:51 +0200 Subject: [PATCH 150/161] Use a range-based for loop so I can print which are failing (instead of std::all_of) ``` [ RUN ] EnergyPlusFixture.EconomicLifeCycleCost_GetInput_EnsureFuelTypesAllRecognized /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc:601: Failure Expected equality of these values: numResources Which is: 18 enum_values.size() Which is: 16 /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc:648: Failure Expected equality of these values: numResources Which is: 18 state->dataEconLifeCycleCost->numUsePriceEscalation Which is: 16 /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh:137: Failure Expected: (static_cast>(expected)) != (static_cast>(actual)), actual: -1 vs -1 /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc:650: Failure Value of: compare_enums(lcc.resource, Constant::eResource::Invalid, false) Actual: true Expected: false Failed for LCCUSEPRICEESCALATION STEAM /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc:652: Failure Expected equality of these values: numResources Which is: 18 state->dataEconLifeCycleCost->numUseAdjustment Which is: 16 /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.hh:137: Failure Expected: (static_cast>(expected)) != (static_cast>(actual)), actual: -1 vs -1 /home/julien/Software/Others/EnergyPlus/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc:654: Failure Value of: compare_enums(lcc.resource, Constant::eResource::Invalid, false) Actual: true Expected: false Failed for LCCUSEADJUSTMENT STEAM ``` --- tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc index 4db041513e8..844b434c6f7 100644 --- a/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc +++ b/tst/EnergyPlus/unit/EconomicLifeCycleCost.unit.cc @@ -646,11 +646,11 @@ LifeCycleCost:UseAdjustment, GetInputForLifeCycleCost(*state); EXPECT_EQ(numResources, state->dataEconLifeCycleCost->numUsePriceEscalation); - EXPECT_TRUE(std::all_of(state->dataEconLifeCycleCost->UsePriceEscalation.begin(), - state->dataEconLifeCycleCost->UsePriceEscalation.end(), - [](auto &lcc) { return lcc.resource != Constant::eResource::Invalid; })); + for (const auto &lcc : state->dataEconLifeCycleCost->UsePriceEscalation) { + EXPECT_FALSE(compare_enums(lcc.resource, Constant::eResource::Invalid, false)) << "Failed for " << lcc.name; + } EXPECT_EQ(numResources, state->dataEconLifeCycleCost->numUseAdjustment); - EXPECT_TRUE(std::all_of(state->dataEconLifeCycleCost->UseAdjustment.begin(), state->dataEconLifeCycleCost->UseAdjustment.end(), [](auto &lcc) { - return lcc.resource != Constant::eResource::Invalid; - })); + for (const auto &lcc : state->dataEconLifeCycleCost->UseAdjustment) { + EXPECT_FALSE(compare_enums(lcc.resource, Constant::eResource::Invalid, false)) << "Failed for " << lcc.name; + } } From 7ae61a9a15437d59fb77deda011bb54d6591e14d Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 10:34:53 +0200 Subject: [PATCH 151/161] For #10220 - Replace Steam with DistrictHeatingSteam in LCC objects --- idd/Energy+.idd.in | 4 ++-- src/Transition/CreateNewIDFUsingRulesV23_2_0.f90 | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index da646e0d22a..95a566e1cd9 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -100940,7 +100940,7 @@ LifeCycleCost:UsePriceEscalation, \key ElectricitySurplusSold \key ElectricityNet \key NaturalGas - \key Steam + \key DistrictHeatingSteam \key Gasoline \key Diesel \key Coal @@ -101028,7 +101028,7 @@ LifeCycleCost:UseAdjustment, \key ElectricitySurplusSold \key ElectricityNet \key NaturalGas - \key Steam + \key DistrictHeatingSteam \key Gasoline \key Diesel \key Coal diff --git a/src/Transition/CreateNewIDFUsingRulesV23_2_0.f90 b/src/Transition/CreateNewIDFUsingRulesV23_2_0.f90 index 679059adc99..150f268ac1f 100644 --- a/src/Transition/CreateNewIDFUsingRulesV23_2_0.f90 +++ b/src/Transition/CreateNewIDFUsingRulesV23_2_0.f90 @@ -916,6 +916,22 @@ SUBROUTINE CreateNewIDFUsingRules(EndOfFile,DiffOnly,InLfn,AskForInput,InputFile ! If your original object starts with L, insert the rules here + CASE('LIFECYCLECOST:USEPRICEESCALATION') + CALL GetNewObjectDefInIDD(ObjectName,NwNumArgs,NwAorN,NwReqFld,NwObjMinFlds,NwFldNames,NwFldDefaults,NwFldUnits) + nodiff=.false. + OutArgs(1:CurArgs)=InArgs(1:CurArgs) + IF (SameString(OutArgs(2), "STEAM")) THEN + OutArgs(2) = "DistrictHeatingSteam" + END IF + + CASE('LIFECYCLECOST:USEADJUSTMENT') + CALL GetNewObjectDefInIDD(ObjectName,NwNumArgs,NwAorN,NwReqFld,NwObjMinFlds,NwFldNames,NwFldDefaults,NwFldUnits) + nodiff=.false. + OutArgs(1:CurArgs)=InArgs(1:CurArgs) + IF (SameString(OutArgs(2), "STEAM")) THEN + OutArgs(2) = "DistrictHeatingSteam" + END IF + ! If your original object starts with M, insert the rules here ! If your original object starts with N, insert the rules here From 1f4897919c67995a84c3cd604eabbb45bec82fe0 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 15 Sep 2023 14:23:56 +0200 Subject: [PATCH 152/161] Add DistrictCooling and DistrictHeatingWater to LCC --- idd/Energy+.idd.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index 95a566e1cd9..f57537c70d2 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -100940,6 +100940,8 @@ LifeCycleCost:UsePriceEscalation, \key ElectricitySurplusSold \key ElectricityNet \key NaturalGas + \key DistrictCooling + \key DistrictHeatingWater \key DistrictHeatingSteam \key Gasoline \key Diesel @@ -101028,6 +101030,8 @@ LifeCycleCost:UseAdjustment, \key ElectricitySurplusSold \key ElectricityNet \key NaturalGas + \key DistrictCooling + \key DistrictHeatingWater \key DistrictHeatingSteam \key Gasoline \key Diesel From afe8486cb27cabfc51176baba38b35d11a4f69f4 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 11:02:46 +0200 Subject: [PATCH 153/161] Update InputRules --- .../InputRulesFiles/Rules23-1-0-to-23-2-0.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Transition/InputRulesFiles/Rules23-1-0-to-23-2-0.md b/src/Transition/InputRulesFiles/Rules23-1-0-to-23-2-0.md index 48fb959a7e5..7756f248e0d 100644 --- a/src/Transition/InputRulesFiles/Rules23-1-0-to-23-2-0.md +++ b/src/Transition/InputRulesFiles/Rules23-1-0-to-23-2-0.md @@ -606,4 +606,18 @@ Fields 2, 4, 5, and 6 remain the same. Field 1 has a name change from "District Heating Efficiency" to "District Heating Water Efficiency". Field 3 has a name change from "Steam Conversion Efficiency" to "District Heating Steam Conversion Efficiency". -See [PR#9260](https://github.com/NREL/EnergyPlus/pull/9260 \ No newline at end of file +See [PR#9260](https://github.com/NREL/EnergyPlus/pull/9260) + +# Object Change: LifeCycleCost:UsePriceEscalation + +Field 2 remains the same. + - Choice key *Steam* has been replaced with *DistrictHeatingSteam*. + +See [PR#9260](https://github.com/NREL/EnergyPlus/pull/9260) + +# Object Change: LifeCycleCost:UseAdjustment + +Field 2 remains the same. + - Choice key *Steam* has been replaced with *DistrictHeatingSteam*. + +See [PR#10229](https://github.com/NREL/EnergyPlus/pull/10229) From c916b09a4c7f0220d6224aef92494db61205e92e Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 13:07:55 +0200 Subject: [PATCH 154/161] #9878 - Adjust existing unit test to highlight the issues and make it clearer --- .../unit/ChillerExhaustAbsorption.unit.cc | 69 ++++++++++++++----- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc index 62f18e16c40..c35b55ab15c 100644 --- a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc @@ -55,7 +55,8 @@ #include #include #include -// #include +#include +#include #include #include "Fixtures/EnergyPlusFixture.hh" @@ -637,29 +638,61 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) auto &thisChillerHeater = state->dataChillerExhaustAbsorption->ExhaustAbsorber(1); - Real64 loadinput = 5000.0; - bool runflaginput = true; - - thisChillerHeater.CoolingLoad = 100000.0; + thisChillerHeater.CoolingLoad = 100'000.0; thisChillerHeater.CoolPartLoadRatio = 1.0; state->dataPlnt->TotNumLoops = 1; state->dataPlnt->PlantLoop.allocate(state->dataPlnt->TotNumLoops); thisChillerHeater.HWPlantLoc.loopNum = 1; thisChillerHeater.HWPlantLoc.loopSideNum = DataPlant::LoopSideLocation::Demand; - state->dataPlnt->PlantLoop(1).FluidName = "WATER"; - state->dataPlnt->PlantLoop(1).FluidIndex = 1; - state->dataPlnt->PlantLoop(1).LoopDemandCalcScheme = DataPlant::LoopDemandCalcScheme::SingleSetPoint; - state->dataPlnt->PlantLoop(1).LoopSide(DataPlant::LoopSideLocation::Demand).FlowLock = DataPlant::FlowLock::Locked; - state->dataLoopNodes->Node(3).Temp = 60.0; - state->dataLoopNodes->Node(3).MassFlowRate = 0.5; - state->dataLoopNodes->Node(4).TempSetPoint = 70.0; - state->dataLoopNodes->Node(7).Temp = 350.0; - state->dataLoopNodes->Node(7).MassFlowRate = 0.5; + auto &hwPlantLoop = state->dataPlnt->PlantLoop(1); + hwPlantLoop.FluidName = "WATER"; + hwPlantLoop.FluidIndex = 1; + hwPlantLoop.LoopDemandCalcScheme = DataPlant::LoopDemandCalcScheme::SingleSetPoint; + hwPlantLoop.LoopSide(DataPlant::LoopSideLocation::Demand).FlowLock = DataPlant::FlowLock::Locked; + + EXPECT_EQ(1, thisChillerHeater.ChillReturnNodeNum); + EXPECT_EQ("EXH CHILLER INLET NODE", state->dataLoopNodes->NodeID(1)); + EXPECT_EQ(2, thisChillerHeater.ChillSupplyNodeNum); + EXPECT_EQ("EXH CHILLER OUTLET NODE", state->dataLoopNodes->NodeID(2)); + EXPECT_EQ(3, thisChillerHeater.HeatReturnNodeNum); + EXPECT_EQ("EXH CHILLER HEATING INLET NODE", state->dataLoopNodes->NodeID(3)); + EXPECT_EQ(4, thisChillerHeater.HeatSupplyNodeNum); + EXPECT_EQ("EXH CHILLER HEATING OUTLET NODE", state->dataLoopNodes->NodeID(4)); + EXPECT_EQ(5, thisChillerHeater.CondReturnNodeNum); + EXPECT_EQ("EXH CHILLER CONDENSER INLET NODE", state->dataLoopNodes->NodeID(5)); + EXPECT_EQ("CAPSTONE C65 COMBUSTION AIR INLET NODE", state->dataLoopNodes->NodeID(6)); + EXPECT_EQ(7, thisChillerHeater.ExhaustAirInletNodeNum); + EXPECT_EQ("CAPSTONE C65 COMBUSTION AIR OUTLET NODE", state->dataLoopNodes->NodeID(7)); + + constexpr Real64 hwSupplySetpoint = 70.0; + constexpr Real64 hwReturnTemp = 60.0; + constexpr Real64 hwMassFlow = 0.5; + state->dataLoopNodes->Node(thisChillerHeater.HeatReturnNodeNum).Temp = hwReturnTemp; + state->dataLoopNodes->Node(thisChillerHeater.HeatReturnNodeNum).MassFlowRate = hwMassFlow; + state->dataLoopNodes->Node(thisChillerHeater.HeatSupplyNodeNum).TempSetPoint = hwSupplySetpoint; + + // Minimum temperature leaving the Chiller absorber is 176.6 C (350 F) + constexpr Real64 exhaustInTemp = 350.0; + constexpr Real64 absLeavingTemp = 176.667; + constexpr Real64 exhaustInMassFlowRate = 0.5; + constexpr Real64 exhaustInHumRate = 0.000; // FIXME: use a non zero one + state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).Temp = exhaustInTemp; + state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).MassFlowRate = exhaustInMassFlowRate; + state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).HumRat = exhaustInHumRate; + Real64 loadinput = 5000.0; + bool const runflaginput = true; thisChillerHeater.calcHeater(*state, loadinput, runflaginput); - EXPECT_NEAR(thisChillerHeater.HeatingLoad, 21085.0, 1e-6); + // FIXME: this shouldn't be zero + const Real64 CpHW = FluidProperties::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, 0.0, hwPlantLoop.FluidIndex, "UnitTest"); + EXPECT_EQ(4217.0, CpHW); + const Real64 expectedHeatingLoad = (hwSupplySetpoint - hwReturnTemp) * hwMassFlow * CpHW; + + EXPECT_NEAR(21085.0, expectedHeatingLoad, 1e-6); + + EXPECT_NEAR(thisChillerHeater.HeatingLoad, expectedHeatingLoad, 1e-6); EXPECT_NEAR(thisChillerHeater.HeatElectricPower, 400.0, 1e-6); EXPECT_NEAR(thisChillerHeater.HotWaterReturnTemp, 60.0, 1e-6); EXPECT_NEAR(thisChillerHeater.HotWaterSupplyTemp, 70.0, 1e-6); @@ -669,7 +702,11 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) EXPECT_NEAR(thisChillerHeater.ElectricPower, 400.0, 1e-6); EXPECT_NEAR(thisChillerHeater.ExhaustInTemp, 350.0, 1e-6); EXPECT_NEAR(thisChillerHeater.ExhaustInFlow, 0.5, 1e-6); - EXPECT_NEAR(thisChillerHeater.ExhHeatRecPotentialHeat, 87087.5769469, 1e-6); + + Real64 const CpAir = Psychrometrics::PsyCpAirFnW(exhaustInHumRate); + Real64 const epectedExhHeatRecPotentialHeat = exhaustInMassFlowRate * CpAir * (exhaustInTemp - absLeavingTemp); + EXPECT_NEAR(87087.5769469, epectedExhHeatRecPotentialHeat, 1e-6); + EXPECT_NEAR(epectedExhHeatRecPotentialHeat, thisChillerHeater.ExhHeatRecPotentialHeat, 1e-6); } TEST_F(EnergyPlusFixture, ExhAbsorption_GetInput_Multiple_Objects_Test) From 0fbe564be31363e7ee827704c1a7b140486a34c9 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 13:12:12 +0200 Subject: [PATCH 155/161] For #9878 - Update Unit test with proper behavior --- .../unit/ChillerExhaustAbsorption.unit.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc index c35b55ab15c..b5f52e7a6d9 100644 --- a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc @@ -676,7 +676,7 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) constexpr Real64 exhaustInTemp = 350.0; constexpr Real64 absLeavingTemp = 176.667; constexpr Real64 exhaustInMassFlowRate = 0.5; - constexpr Real64 exhaustInHumRate = 0.000; // FIXME: use a non zero one + constexpr Real64 exhaustInHumRate = 0.005; state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).Temp = exhaustInTemp; state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).MassFlowRate = exhaustInMassFlowRate; state->dataLoopNodes->Node(thisChillerHeater.ExhaustAirInletNodeNum).HumRat = exhaustInHumRate; @@ -685,12 +685,11 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) bool const runflaginput = true; thisChillerHeater.calcHeater(*state, loadinput, runflaginput); - // FIXME: this shouldn't be zero - const Real64 CpHW = FluidProperties::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, 0.0, hwPlantLoop.FluidIndex, "UnitTest"); - EXPECT_EQ(4217.0, CpHW); + const Real64 CpHW = FluidProperties::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, hwReturnTemp, hwPlantLoop.FluidIndex, "UnitTest"); + EXPECT_EQ(4185.0, CpHW); const Real64 expectedHeatingLoad = (hwSupplySetpoint - hwReturnTemp) * hwMassFlow * CpHW; - EXPECT_NEAR(21085.0, expectedHeatingLoad, 1e-6); + EXPECT_NEAR(20925.0, expectedHeatingLoad, 1e-6); EXPECT_NEAR(thisChillerHeater.HeatingLoad, expectedHeatingLoad, 1e-6); EXPECT_NEAR(thisChillerHeater.HeatElectricPower, 400.0, 1e-6); @@ -705,8 +704,8 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) Real64 const CpAir = Psychrometrics::PsyCpAirFnW(exhaustInHumRate); Real64 const epectedExhHeatRecPotentialHeat = exhaustInMassFlowRate * CpAir * (exhaustInTemp - absLeavingTemp); - EXPECT_NEAR(87087.5769469, epectedExhHeatRecPotentialHeat, 1e-6); - EXPECT_NEAR(epectedExhHeatRecPotentialHeat, thisChillerHeater.ExhHeatRecPotentialHeat, 1e-6); + EXPECT_NEAR(87891.51, epectedExhHeatRecPotentialHeat, 0.01); + EXPECT_NEAR(epectedExhHeatRecPotentialHeat, thisChillerHeater.ExhHeatRecPotentialHeat, 0.01); } TEST_F(EnergyPlusFixture, ExhAbsorption_GetInput_Multiple_Objects_Test) From 5fa8a0b10f950c2f4de76cb3929850108d6a07ce Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 13:17:21 +0200 Subject: [PATCH 156/161] Minimal Fix for #9878 --- src/EnergyPlus/ChillerExhaustAbsorption.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/ChillerExhaustAbsorption.cc b/src/EnergyPlus/ChillerExhaustAbsorption.cc index c018498e238..59a8ee0657d 100644 --- a/src/EnergyPlus/ChillerExhaustAbsorption.cc +++ b/src/EnergyPlus/ChillerExhaustAbsorption.cc @@ -1909,6 +1909,7 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo int LoopNum = this->HWPlantLoc.loopNum; DataPlant::LoopSideLocation LoopSideNum = this->HWPlantLoc.loopSideNum; + lHotWaterReturnTemp = state.dataLoopNodes->Node(lHeatReturnNodeNum).Temp; Real64 Cp_HW = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, lHotWaterReturnTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); @@ -1917,7 +1918,6 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo Real64 lCoolPartLoadRatio = this->CoolPartLoadRatio; // initialize entering conditions - lHotWaterReturnTemp = state.dataLoopNodes->Node(lHeatReturnNodeNum).Temp; lHotWaterMassFlowRate = state.dataLoopNodes->Node(lHeatReturnNodeNum).MassFlowRate; switch (state.dataPlnt->PlantLoop(LoopNum).LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -2007,6 +2007,7 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo lExhaustInTemp = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).Temp; lExhaustInFlow = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).MassFlowRate; + lExhaustAirHumRat = state.dataLoopNodes->Node(this->ExhaustAirInletNodeNum).HumRat; Real64 CpAir = Psychrometrics::PsyCpAirFnW(lExhaustAirHumRat); lExhHeatRecPotentialHeat = lExhaustInFlow * CpAir * (lExhaustInTemp - AbsLeavingTemp); if (lExhHeatRecPotentialHeat < lHeatThermalEnergyUseRate) { From aace45c46cc547ce8414689b4414d6d4ca6ec2e8 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 13:18:42 +0200 Subject: [PATCH 157/161] Improve fix for #9878 - Refactor ExhaustAbsorberSpecs::calcHeater --- src/EnergyPlus/ChillerExhaustAbsorption.cc | 113 ++++++++------------- 1 file changed, 45 insertions(+), 68 deletions(-) diff --git a/src/EnergyPlus/ChillerExhaustAbsorption.cc b/src/EnergyPlus/ChillerExhaustAbsorption.cc index 59a8ee0657d..f3c0d0b235e 100644 --- a/src/EnergyPlus/ChillerExhaustAbsorption.cc +++ b/src/EnergyPlus/ChillerExhaustAbsorption.cc @@ -1874,86 +1874,64 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo // all variables that are local copies of data structure // variables are prefaced with an "l" for local. // Local copies of ExhaustAbsorberReportVars Type - Real64 lHotWaterReturnTemp(0.0); Real64 lHeatingLoad(0.0); // heating load on the chiller Real64 lHeatThermalEnergyUseRate(0.0); // instantaneous use of thermal energy for period for heating Real64 lHeatElectricPower(0.0); // parasitic electric power used for heating Real64 lHotWaterSupplyTemp(0.0); // reporting: hot water supply (outlet) temperature - Real64 lHotWaterMassFlowRate(0.0); // reporting: hot water mass flow rate Real64 lHeatPartLoadRatio(0.0); // operating part load ratio (load/capacity for heating) Real64 lAvailableHeatingCapacity(0.0); // current heating capacity Real64 lFractionOfPeriodRunning(0.0); Real64 lExhaustInTemp(0.0); // Exhaust inlet temperature Real64 lExhaustInFlow(0.0); // Exhaust inlet flow rate Real64 lExhHeatRecPotentialHeat(0.0); // Exhaust heat recovery potential - Real64 lExhaustAirHumRat(0.0); - // other local variables - Real64 HeatSupplySetPointTemp(0.0); - - // set node values to data structure values for nodes - - int lHeatReturnNodeNum = this->HeatReturnNodeNum; - int lHeatSupplyNodeNum = this->HeatSupplyNodeNum; - int lExhaustAirInletNodeNum = this->ExhaustAirInletNodeNum; - - // set local copies of data from rest of input structure - - Real64 lNomCoolingCap = this->NomCoolingCap; // W - design nominal capacity of Absorber - Real64 lNomHeatCoolRatio = this->NomHeatCoolRatio; // ratio of heating to cooling capacity - Real64 lThermalEnergyHeatRatio = this->ThermalEnergyHeatRatio; // ratio of ThermalEnergy input to heating output - Real64 lElecHeatRatio = this->ElecHeatRatio; // ratio of electricity input to heating output - Real64 lMinPartLoadRat = this->MinPartLoadRat; // min allowed operating frac full load - Real64 lMaxPartLoadRat = this->MaxPartLoadRat; // max allowed operating frac full load - int lHeatCapFCoolCurve = this->HeatCapFCoolCurve; // Heating Capacity Function of Cooling Capacity Curve - int lThermalEnergyHeatFHPLRCurve = this->ThermalEnergyHeatFHPLRCurve; // ThermalEnergy Input to heat output ratio during heating only function - int LoopNum = this->HWPlantLoc.loopNum; - DataPlant::LoopSideLocation LoopSideNum = this->HWPlantLoc.loopSideNum; - - lHotWaterReturnTemp = state.dataLoopNodes->Node(lHeatReturnNodeNum).Temp; - Real64 Cp_HW = FluidProperties::GetSpecificHeatGlycol( - state, state.dataPlnt->PlantLoop(LoopNum).FluidName, lHotWaterReturnTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); - - Real64 lCoolElectricPower = this->CoolElectricPower; // parasitic electric power used for cooling - Real64 lCoolThermalEnergyUseRate = this->CoolThermalEnergyUseRate; // instantaneous use of thermal energy for period for cooling - Real64 lCoolPartLoadRatio = this->CoolPartLoadRatio; // initialize entering conditions - lHotWaterMassFlowRate = state.dataLoopNodes->Node(lHeatReturnNodeNum).MassFlowRate; - switch (state.dataPlnt->PlantLoop(LoopNum).LoopDemandCalcScheme) { - case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { - HeatSupplySetPointTemp = state.dataLoopNodes->Node(lHeatSupplyNodeNum).TempSetPoint; - } break; - case DataPlant::LoopDemandCalcScheme::DualSetPointDeadBand: { - HeatSupplySetPointTemp = state.dataLoopNodes->Node(lHeatSupplyNodeNum).TempSetPointLo; - } break; - default: { - assert(false); - } break; - } - Real64 HeatDeltaTemp = std::abs(lHotWaterReturnTemp - HeatSupplySetPointTemp); + auto &hwPlantLoop = state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum); + const Real64 HeatSupplySetPointTemp = [this, &hwPlantLoop, &state]() { + switch (hwPlantLoop.LoopDemandCalcScheme) { + case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { + return state.dataLoopNodes->Node(this->HeatSupplyNodeNum).TempSetPoint; + } + case DataPlant::LoopDemandCalcScheme::DualSetPointDeadBand: { + return state.dataLoopNodes->Node(this->HeatSupplyNodeNum).TempSetPointLo; + } + default: { + assert(false); + return 0.0; + } + } + }(); + + auto const &heatReturnNode = state.dataLoopNodes->Node(this->HeatReturnNodeNum); + Real64 const HeatDeltaTemp = std::abs(heatReturnNode.Temp - HeatSupplySetPointTemp); + // reporting: hot water mass flow rate + Real64 lHotWaterMassFlowRate = heatReturnNode.MassFlowRate; // If no loop demand or Absorber OFF, return // will need to modify when absorber can act as a boiler if (MyLoad <= 0 || !RunFlag) { // set node temperatures - lHotWaterSupplyTemp = lHotWaterReturnTemp; - lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, lCoolPartLoadRatio) / lMinPartLoadRat); + lHotWaterSupplyTemp = heatReturnNode.Temp; + lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, this->CoolPartLoadRatio) / this->MinPartLoadRat); } else { + Real64 const Cp_HW = + FluidProperties::GetSpecificHeatGlycol(state, hwPlantLoop.FluidName, heatReturnNode.Temp, hwPlantLoop.FluidIndex, RoutineName); + // Determine available heating capacity using the current cooling load - lAvailableHeatingCapacity = - this->NomHeatCoolRatio * this->NomCoolingCap * Curve::CurveValue(state, lHeatCapFCoolCurve, (this->CoolingLoad / this->NomCoolingCap)); + lAvailableHeatingCapacity = this->NomHeatCoolRatio * this->NomCoolingCap * + Curve::CurveValue(state, this->HeatCapFCoolCurve, (this->CoolingLoad / this->NomCoolingCap)); // Calculate current load for heating - MyLoad = sign(max(std::abs(MyLoad), this->HeatingCapacity * lMinPartLoadRat), MyLoad); - MyLoad = sign(min(std::abs(MyLoad), this->HeatingCapacity * lMaxPartLoadRat), MyLoad); + MyLoad = sign(max(std::abs(MyLoad), this->HeatingCapacity * this->MinPartLoadRat), MyLoad); + MyLoad = sign(min(std::abs(MyLoad), this->HeatingCapacity * this->MaxPartLoadRat), MyLoad); // Determine the following variables depending on if the flow has been set in // the nodes (flowlock=1 to 2) or if the amount of load is still be determined (flowlock=0) // chilled water flow, // cooling load taken by the chiller, and // supply temperature - switch (state.dataPlnt->PlantLoop(LoopNum).LoopSide(LoopSideNum).FlowLock) { + switch (hwPlantLoop.LoopSide(this->HWPlantLoc.loopSideNum).FlowLock) { case DataPlant::FlowLock::Unlocked: { // mass flow rates may be changed by loop components lHeatingLoad = std::abs(MyLoad); if (HeatDeltaTemp != 0) { @@ -1989,26 +1967,25 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo // Calculate ThermalEnergy consumption for heating // ThermalEnergy used for heating availCap * HIR * HIR-FT * HIR-FPLR - - lHeatThermalEnergyUseRate = - lAvailableHeatingCapacity * lThermalEnergyHeatRatio * Curve::CurveValue(state, lThermalEnergyHeatFHPLRCurve, lHeatPartLoadRatio); + lHeatThermalEnergyUseRate = lAvailableHeatingCapacity * this->ThermalEnergyHeatRatio * + Curve::CurveValue(state, this->ThermalEnergyHeatFHPLRCurve, lHeatPartLoadRatio); // calculate the fraction of the time period that the chiller would be running // use maximum from heating and cooling sides - lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, lCoolPartLoadRatio) / lMinPartLoadRat); + lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, this->CoolPartLoadRatio) / this->MinPartLoadRat); // Calculate electric parasitics used // for heating based on nominal capacity not available capacity - lHeatElectricPower = lNomCoolingCap * lNomHeatCoolRatio * lElecHeatRatio * lFractionOfPeriodRunning; + lHeatElectricPower = this->NomCoolingCap * this->NomHeatCoolRatio * this->ElecHeatRatio * lFractionOfPeriodRunning; // Coodinate electric parasitics for heating and cooling to avoid double counting // Total electric is the max of heating electric or cooling electric // If heating electric is greater, leave cooling electric and subtract if off of heating elec // If cooling electric is greater, set heating electric to zero - lExhaustInTemp = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).Temp; - lExhaustInFlow = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).MassFlowRate; - lExhaustAirHumRat = state.dataLoopNodes->Node(this->ExhaustAirInletNodeNum).HumRat; - Real64 CpAir = Psychrometrics::PsyCpAirFnW(lExhaustAirHumRat); + lExhaustInTemp = state.dataLoopNodes->Node(this->ExhaustAirInletNodeNum).Temp; + lExhaustInFlow = state.dataLoopNodes->Node(this->ExhaustAirInletNodeNum).MassFlowRate; + Real64 const lExhaustAirHumRat = state.dataLoopNodes->Node(this->ExhaustAirInletNodeNum).HumRat; + Real64 const CpAir = Psychrometrics::PsyCpAirFnW(lExhaustAirHumRat); lExhHeatRecPotentialHeat = lExhaustInFlow * CpAir * (lExhaustInTemp - AbsLeavingTemp); if (lExhHeatRecPotentialHeat < lHeatThermalEnergyUseRate) { if (this->ExhTempLTAbsLeavingHeatingTempIndex == 0) { @@ -2033,14 +2010,14 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo // If exhaust is not available, it means the avilable thermal energy is 0.0 and Chiller is not available lHeatThermalEnergyUseRate = 0.0; lHeatElectricPower = 0.0; - lHotWaterSupplyTemp = lHotWaterReturnTemp; - lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, lCoolPartLoadRatio) / lMinPartLoadRat); + lHotWaterSupplyTemp = heatReturnNode.Temp; + lFractionOfPeriodRunning = min(1.0, max(lHeatPartLoadRatio, this->CoolPartLoadRatio) / this->MinPartLoadRat); } - if (lHeatElectricPower <= lCoolElectricPower) { + if (lHeatElectricPower <= this->CoolElectricPower) { lHeatElectricPower = 0.0; } else { - lHeatElectricPower -= lCoolElectricPower; + lHeatElectricPower -= this->CoolElectricPower; } } // IF(MyLoad==0 .OR. .NOT. RunFlag) @@ -2048,7 +2025,7 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo this->HeatingLoad = lHeatingLoad; this->HeatThermalEnergyUseRate = lHeatThermalEnergyUseRate; this->HeatElectricPower = lHeatElectricPower; - this->HotWaterReturnTemp = lHotWaterReturnTemp; + this->HotWaterReturnTemp = heatReturnNode.Temp; this->HotWaterSupplyTemp = lHotWaterSupplyTemp; this->HotWaterFlowRate = lHotWaterMassFlowRate; this->HeatPartLoadRatio = lHeatPartLoadRatio; @@ -2056,8 +2033,8 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo this->FractionOfPeriodRunning = lFractionOfPeriodRunning; // write the combined heating and cooling ThermalEnergy used and electric used - this->ThermalEnergyUseRate = lCoolThermalEnergyUseRate + lHeatThermalEnergyUseRate; - this->ElectricPower = lCoolElectricPower + lHeatElectricPower; + this->ThermalEnergyUseRate = this->CoolThermalEnergyUseRate + lHeatThermalEnergyUseRate; + this->ElectricPower = this->CoolElectricPower + lHeatElectricPower; this->ExhaustInTemp = lExhaustInTemp; this->ExhaustInFlow = lExhaustInFlow; this->ExhHeatRecPotentialHeat = lExhHeatRecPotentialHeat; From 6ee584b839e55cf96a5611c057e3d4fb975bdb5d Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 18 Sep 2023 13:32:27 +0200 Subject: [PATCH 158/161] Fix typo in unit test --- tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc index b5f52e7a6d9..8a230483e1e 100644 --- a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc @@ -703,9 +703,9 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) EXPECT_NEAR(thisChillerHeater.ExhaustInFlow, 0.5, 1e-6); Real64 const CpAir = Psychrometrics::PsyCpAirFnW(exhaustInHumRate); - Real64 const epectedExhHeatRecPotentialHeat = exhaustInMassFlowRate * CpAir * (exhaustInTemp - absLeavingTemp); - EXPECT_NEAR(87891.51, epectedExhHeatRecPotentialHeat, 0.01); - EXPECT_NEAR(epectedExhHeatRecPotentialHeat, thisChillerHeater.ExhHeatRecPotentialHeat, 0.01); + Real64 const expectedExhHeatRecPotentialHeat = exhaustInMassFlowRate * CpAir * (exhaustInTemp - absLeavingTemp); + EXPECT_NEAR(87891.51, expectedExhHeatRecPotentialHeat, 0.01); + EXPECT_NEAR(expectedExhHeatRecPotentialHeat, thisChillerHeater.ExhHeatRecPotentialHeat, 0.01); } TEST_F(EnergyPlusFixture, ExhAbsorption_GetInput_Multiple_Objects_Test) From f75044027c63c52d666697a358cb1f3f2b77a8cb Mon Sep 17 00:00:00 2001 From: Matt Mitchell Date: Mon, 18 Sep 2023 09:45:26 -0600 Subject: [PATCH 159/161] Update CMakeLists.txt Co-authored-by: Julien Marrec --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 240c821fbbb..0ca2f9e753c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ project(EnergyPlus) # Raise an error if attempting to compile on macOS older than 10.15 - it does not work if (APPLE) - if ("${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "") + if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET not set. Please set CMAKE_OSX_DEPLOYMENT_TARGET to 10.15 or greater and try again.") elseif (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS "10.15") message(FATAL_ERROR "The minimum required version for macOS is 10.15, however CMAKE_OSX_DEPLOYMENT_TARGET is set to ${CMAKE_OSX_DEPLOYMENT_TARGET}.") From 1f309a404e2aa21995d2d87a4f7c0e5605e830eb Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 18 Sep 2023 13:48:48 -0500 Subject: [PATCH 160/161] Apply clang format --- src/EnergyPlus/OutputProcessor.cc | 6 +++--- src/EnergyPlus/OutputReportPredefined.cc | 24 ++++++++++++++------- tst/EnergyPlus/unit/OutputProcessor.unit.cc | 3 +-- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 1508ea2b020..9a65ba0dbfb 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -2139,7 +2139,7 @@ namespace OutputProcessor { op->EnergyMeters(Meter).MNValue += op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).YRValue += op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMValue += op->EnergyMeters(Meter).TSValue; - //if (op->isFinalYear) op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; + // if (op->isFinalYear) op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).FinYrSMValue += op->EnergyMeters(Meter).TSValue; } // Set Max @@ -2165,7 +2165,7 @@ namespace OutputProcessor { op->EnergyMeters(Meter).SMMaxVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMMaxValDate = TimeStamp; } - //if (op->isFinalYear) { + // if (op->isFinalYear) { if (op->EnergyMeters(Meter).TSValue > op->EnergyMeters(Meter).FinYrSMMaxVal) { op->EnergyMeters(Meter).FinYrSMMaxVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).FinYrSMMaxValDate = TimeStamp; @@ -2194,7 +2194,7 @@ namespace OutputProcessor { op->EnergyMeters(Meter).SMMinVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).SMMinValDate = TimeStamp; } - //if (op->isFinalYear) { + // if (op->isFinalYear) { if (op->EnergyMeters(Meter).TSValue < op->EnergyMeters(Meter).FinYrSMMinVal) { op->EnergyMeters(Meter).FinYrSMMinVal = op->EnergyMeters(Meter).TSValue; op->EnergyMeters(Meter).FinYrSMMinValDate = TimeStamp; diff --git a/src/EnergyPlus/OutputReportPredefined.cc b/src/EnergyPlus/OutputReportPredefined.cc index 7ef0e14d4dd..921721ac4b1 100644 --- a/src/EnergyPlus/OutputReportPredefined.cc +++ b/src/EnergyPlus/OutputReportPredefined.cc @@ -1021,7 +1021,8 @@ namespace OutputReportPredefined { // s->pdchEMmaxvaluetime = newPreDefColumn(state, s->pdstEMvalues,'Timestamp of Maximum') // Electricity Sub Table s->pdstEMelecvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Electricity"); - addFootNoteSubTable(state, s->pdstEMelecvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMelecvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMelecannual = newPreDefColumn(state, s->pdstEMelecvalues, "Electricity Annual Value [GJ]"); s->pdchEMelecminvalue = newPreDefColumn(state, s->pdstEMelecvalues, "Electricity Minimum Value [W]"); s->pdchEMelecminvaluetime = newPreDefColumn(state, s->pdstEMelecvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1030,7 +1031,8 @@ namespace OutputReportPredefined { // Gas Sub Table s->pdstEMgasvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Natural Gas"); - addFootNoteSubTable(state, s->pdstEMgasvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMgasvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMgasannual = newPreDefColumn(state, s->pdstEMgasvalues, "Natural Gas Annual Value [GJ]"); s->pdchEMgasminvalue = newPreDefColumn(state, s->pdstEMgasvalues, "Natural Gas Minimum Value [W]"); s->pdchEMgasminvaluetime = newPreDefColumn(state, s->pdstEMgasvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1039,7 +1041,8 @@ namespace OutputReportPredefined { // Cool SubTable s->pdstEMcoolvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Cooling"); - addFootNoteSubTable(state, s->pdstEMcoolvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMcoolvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMcoolannual = newPreDefColumn(state, s->pdstEMcoolvalues, "Cooling Annual Value [GJ]"); s->pdchEMcoolminvalue = newPreDefColumn(state, s->pdstEMcoolvalues, "Cooling Minimum Value [W]"); s->pdchEMcoolminvaluetime = newPreDefColumn(state, s->pdstEMcoolvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1048,7 +1051,8 @@ namespace OutputReportPredefined { // Water SubTable s->pdstEMwatervalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Water"); - addFootNoteSubTable(state, s->pdstEMwatervalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMwatervalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMwaterannual = newPreDefColumn(state, s->pdstEMwatervalues, "Annual Value [m3]"); s->pdchEMwaterminvalue = newPreDefColumn(state, s->pdstEMwatervalues, "Minimum Value [m3/s]"); s->pdchEMwaterminvaluetime = newPreDefColumn(state, s->pdstEMwatervalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1057,7 +1061,8 @@ namespace OutputReportPredefined { // Other KG SubTable s->pdstEMotherKGvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other by Weight/Mass"); - addFootNoteSubTable(state, s->pdstEMotherKGvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMotherKGvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherKGannual = newPreDefColumn(state, s->pdstEMotherKGvalues, "Annual Value [kg]"); s->pdchEMotherKGminvalue = newPreDefColumn(state, s->pdstEMotherKGvalues, "Minimum Value [kg/s]"); s->pdchEMotherKGminvaluetime = newPreDefColumn(state, s->pdstEMotherKGvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1066,7 +1071,8 @@ namespace OutputReportPredefined { // Other M3 SubTable s->pdstEMotherM3values = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other Volumetric"); - addFootNoteSubTable(state, s->pdstEMotherM3values, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMotherM3values, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherM3annual = newPreDefColumn(state, s->pdstEMotherM3values, "Annual Value [m3]"); s->pdchEMotherM3minvalue = newPreDefColumn(state, s->pdstEMotherM3values, "Minimum Value [m3/s]"); s->pdchEMotherM3minvaluetime = newPreDefColumn(state, s->pdstEMotherM3values, "Timestamp of Minimum {TIMESTAMP}"); @@ -1075,7 +1081,8 @@ namespace OutputReportPredefined { // Other M3 SubTable s->pdstEMotherLvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other Liquid/Gas"); - addFootNoteSubTable(state, s->pdstEMotherLvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMotherLvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherLannual = newPreDefColumn(state, s->pdstEMotherLvalues, "Annual Value [L]"); s->pdchEMotherLminvalue = newPreDefColumn(state, s->pdstEMotherLvalues, "Minimum Value [L]"); s->pdchEMotherLminvaluetime = newPreDefColumn(state, s->pdstEMotherLvalues, "Timestamp of Minimum {TIMESTAMP}"); @@ -1084,7 +1091,8 @@ namespace OutputReportPredefined { // Other J SubTable s->pdstEMotherJvalues = newPreDefSubTable(state, s->pdrEnergyMeters, "Annual and Peak Values - Other"); - addFootNoteSubTable(state, s->pdstEMotherJvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); + addFootNoteSubTable( + state, s->pdstEMotherJvalues, "Values shown are for all completed run periods - including any simulations run during sizing periods"); s->pdchEMotherJannual = newPreDefColumn(state, s->pdstEMotherJvalues, "Annual Value [GJ]"); s->pdchEMotherJminvalue = newPreDefColumn(state, s->pdstEMotherJvalues, "Minimum Value [W]"); s->pdchEMotherJminvaluetime = newPreDefColumn(state, s->pdstEMotherJvalues, "Timestamp of Minimum {TIMESTAMP}"); diff --git a/tst/EnergyPlus/unit/OutputProcessor.unit.cc b/tst/EnergyPlus/unit/OutputProcessor.unit.cc index bf6751679c0..c007e7429b2 100644 --- a/tst/EnergyPlus/unit/OutputProcessor.unit.cc +++ b/tst/EnergyPlus/unit/OutputProcessor.unit.cc @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -67,7 +68,6 @@ #include #include #include -#include using namespace EnergyPlus::PurchasedAirManager; using namespace EnergyPlus::WeatherManager; @@ -5360,7 +5360,6 @@ namespace OutputProcessor { "2,999.0", }, "\n")); - } TEST_F(EnergyPlusFixture, OutputProcessor_GenOutputVariablesAuditReport) From ba405f2e2561968977bc083531258aa6fc09d426 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Tue, 19 Sep 2023 09:04:01 -0500 Subject: [PATCH 161/161] Clang format --- src/EnergyPlus/OutputReportTabular.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index 34363e4136b..e7565922a9b 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -3138,7 +3138,8 @@ void OpenOutputTabularFile(EnergyPlusData &state) open_tbl_stream(state, iStyle, state.dataStrGlobals->outputTblXmlFilePath, state.files.outputControl.tabular); tbl_stream << "\n"; tbl_stream << "\n"; - tbl_stream << " BuildingName>" << ConvertToEscaped(state.dataHeatBal->BuildingName) << "BuildingName>\n"; + tbl_stream << " BuildingName>" << ConvertToEscaped(state.dataHeatBal->BuildingName) + << "BuildingName>\n"; tbl_stream << " " << state.dataEnvrn->EnvironmentName << "\n"; tbl_stream << " " << state.dataEnvrn->WeatherFileLocationTitle << "\n"; tbl_stream << " " << state.dataStrGlobals->VerStringVar << "\n";

7wENMPWpzV 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 literal 0 HcmV?d00001 diff --git a/doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.PNG b/doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.PNG new file mode 100644 index 0000000000000000000000000000000000000000..717c210ac1941da255307ac5069f274f90e74062 GIT binary patch literal 126338 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 literal 0 HcmV?d00001 diff --git a/doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.docx b/doc/engineering-reference/media/ChillerHeaterPlantLoopEIRSchematic.docx new file mode 100644 index 0000000000000000000000000000000000000000..df25f91d6eb3321fbf9683ff498349b9e22749d2 GIT binary patch literal 138191 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Ð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 z zqlHNQfA-#N%S~j9)_#>U&Mp5a`tFim2qAg|+<_2{=n){`>5rOpm7BE7<#O%)yS8*; zXUdt&k_aM*k2U9XJg@Ap+r~ncRURa1V$P9rDCfD0Q|EpshU(ZEdESYUaCkqDdmQeh z{?NqSsQ^%#QqSI!P-E-oiE=xXSKZ!P@hG35k&H$x04}b$xoo0P7b+v7nCpdK2Bm(! zWg;UvmC@`85`)0J5<5YYF`>GW?ZN2$qp}?+P&gvzD*~yb%VE`%-C*|b#{kb(bBet z=+(~#Fx6yy+&Dn8Wt#(UDr9$tICFXWxbZ8d_7`fTEI>b$Zq#}XG3xNx%n-@+-ge(X zD^SrR(kmmbPC>8@jomT8(k9|MfgSp-(*g(i=w6qn>``v|87-qN-|>*o?%U`HcBUXm zp`(BVtY%bQsOMofT=>rPQerc7&MXsqmd3U9Ty_YqlN%;j3wr}R@5Hovu}ox@i9N8O z!GRvh9m_RxdpfZfl|N>yV;7MwX+){??Y`LM>plrDS^?B$;kWejRt&;T$yN9h%P>t< zR5$rP%P>gPQ;2zHaAg{G-`?$2P^?5qGz%fIkxjGiU4KHe0K151WOtCzU4o*0ex&Wn zUnmHfYZXe*XA4KqJC3wu&T!YKjH8;PV3MX;N1`?}} z1X*8eBdth}6C09>k5(D?>ZKV-Aw5p}Kr^S}spoBPmu1D;iN~`pYjSIauC4oy)E5B; z!^sq1E#AQ?m|uu-+7E|l06N%1sTu*HkV@LlJ0mQ`+vK$J)T1Dl#*o77?Z5z!8ZV?< zQNplnlW!T-1i1xZVIe~$r(Jf60fO~z^O3UiUtt;c{$%@U!M|)7#-F*f=)Ek%UVG&K zHdy}XZT%|lV90F*q0mnigTfdL!8r4|7!;#m7K32wu?_!;Vo(wQSwN=0CD4CJ@j~B5 z|F;T%0gvw*ScH7zei({E9|-O@EyC`H>OqeY3MW6t$M0H%;lJx!-m?e7|6OV8e`*o- z_{#kNdB4SE-#<2g$1&_nGW#`StWSRGUW5-X+4G0W^#1kR&;1?uu( zFoeV&P5S>Ig1@}OUfl4-4S$du@>?1fMIyazEIH`g+z=XdVHMOV*XIqfI}*-9?pC{t z8DJ1o?9ElGj*hS*V9l?y*gxb zy-+T9InqT(yVjn+7#BNP_Hu+}OLbIPBC<>7$!iM3Be~J{6zN!G?CscH>a^>g-eCqG ztw4T6&LkptHOn4dW~ zm6|PjFS(ADgJq!%2omqpT?nv|m$J#EqJ?AN{l(!8&~CflKzwTl(9b4KVwl9u;bO_`~;S)>Zz2UsEas6RmiZu3YD?L0UTwQE~nu5jz~yI>z45SDxt zOb?^MV~#RRX_i9_B2VtQ7!Wg=J5l9sBe9hS?~I50BqBTBP;$|fE|m-KXoT1S@d#IH zRUU5Z$+v=PFY*?_4Ft5ZE4D#4_QAU%X+iQkt0m~UzM{lnQxif_uw7jyJVE1WbCJZVdeY%X z!gwCT-B!0DA3m^gusd+5xa|as%H>Vj@Eh3j`M6kkMdm#*0h30*_X>a6bp2#rpBakX zzxmOo>*pf%UOV#-HeG+U;F83qd1~&%WcVvh*B?>2FN*?RO5yuE?fjaT82h+R`FKn| z=flqo#h6dL#Heq2iACk@I{fY=2BTj%iQUt>{_jUVV)1P^_jX-fHuZCJ_fMOP{kr%G zrfCwUeky(