Only include one variable per declaration statement

This removes VarDeclarationsStatement entirely. VarDeclaration instances
appear directly as statements in Programs. SkSL that declares multiple
variables in a single declaration is transformed to represent that as a
series of VarDeclaration statements.

Similarly, global variable declarations are represented by
GlobalVarDeclaration program elements, one per variable.

Bug: skia:10806
Change-Id: Idd8a2d971a8217733ed57f0dd2249d62f2f0e9c5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/323102
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp
index ca37e16..5277aa2 100644
--- a/src/core/SkRuntimeEffect.cpp
+++ b/src/core/SkRuntimeEffect.cpp
@@ -153,68 +153,66 @@
     // Go through program elements, pulling out information that we need
     for (const auto& elem : *program) {
         // Variables (uniform, varying, etc.)
-        if (elem.kind() == SkSL::ProgramElement::Kind::kVar) {
-            const auto& varDecls = static_cast<const SkSL::VarDeclarations&>(elem);
-            for (const auto& varDecl : varDecls.fVars) {
-                const SkSL::Variable& var =
-                        *(static_cast<const SkSL::VarDeclaration&>(*varDecl).fVar);
-                const SkSL::Type& varType = var.type();
+        if (elem.is<SkSL::GlobalVarDeclaration>()) {
+            const auto& varDecl = elem.as<SkSL::GlobalVarDeclaration>().fDecl;
 
-                // Varyings (only used in conjunction with drawVertices)
-                if (var.fModifiers.fFlags & SkSL::Modifiers::kVarying_Flag) {
-                    varyings.push_back({var.name(),
-                                        varType.typeKind() == SkSL::Type::TypeKind::kVector
-                                               ? varType.columns()
-                                               : 1});
+            const SkSL::Variable& var = *varDecl->fVar;
+            const SkSL::Type& varType = var.type();
+
+            // Varyings (only used in conjunction with drawVertices)
+            if (var.fModifiers.fFlags & SkSL::Modifiers::kVarying_Flag) {
+                varyings.push_back({var.name(),
+                                    varType.typeKind() == SkSL::Type::TypeKind::kVector
+                                            ? varType.columns()
+                                            : 1});
+            }
+            // Fragment Processors (aka 'shader'): These are child effects
+            else if (&varType == ctx.fFragmentProcessor_Type.get()) {
+                children.push_back(var.name());
+                sampleUsages.push_back(SkSL::Analysis::GetSampleUsage(*program, var));
+            }
+            // 'uniform' variables
+            else if (var.fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag) {
+                Uniform uni;
+                uni.fName = var.name();
+                uni.fFlags = 0;
+                uni.fCount = 1;
+
+                const SkSL::Type* type = &var.type();
+                if (type->typeKind() == SkSL::Type::TypeKind::kArray) {
+                    uni.fFlags |= Uniform::kArray_Flag;
+                    uni.fCount = type->columns();
+                    type = &type->componentType();
                 }
-                // Fragment Processors (aka 'shader'): These are child effects
-                else if (&varType == ctx.fFragmentProcessor_Type.get()) {
-                    children.push_back(var.name());
-                    sampleUsages.push_back(SkSL::Analysis::GetSampleUsage(*program, var));
+
+                if (!init_uniform_type(ctx, type, &uni)) {
+                    RETURN_FAILURE("Invalid uniform type: '%s'", type->displayName().c_str());
                 }
-                // 'uniform' variables
-                else if (var.fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag) {
-                    Uniform uni;
-                    uni.fName = var.name();
-                    uni.fFlags = 0;
-                    uni.fCount = 1;
 
-                    const SkSL::Type* type = &var.type();
-                    if (type->typeKind() == SkSL::Type::TypeKind::kArray) {
-                        uni.fFlags |= Uniform::kArray_Flag;
-                        uni.fCount = type->columns();
-                        type = &type->componentType();
+                const SkSL::StringFragment& marker(var.fModifiers.fLayout.fMarker);
+                if (marker.fLength) {
+                    uni.fFlags |= Uniform::kMarker_Flag;
+                    allowColorFilter = false;
+                    if (!parse_marker(marker, &uni.fMarker, &uni.fFlags)) {
+                        RETURN_FAILURE("Invalid 'marker' string: '%.*s'", (int)marker.fLength,
+                                        marker.fChars);
                     }
-
-                    if (!init_uniform_type(ctx, type, &uni)) {
-                        RETURN_FAILURE("Invalid uniform type: '%s'", type->displayName().c_str());
-                    }
-
-                    const SkSL::StringFragment& marker(var.fModifiers.fLayout.fMarker);
-                    if (marker.fLength) {
-                        uni.fFlags |= Uniform::kMarker_Flag;
-                        allowColorFilter = false;
-                        if (!parse_marker(marker, &uni.fMarker, &uni.fFlags)) {
-                            RETURN_FAILURE("Invalid 'marker' string: '%.*s'", (int)marker.fLength,
-                                            marker.fChars);
-                        }
-                    }
-
-                    if (var.fModifiers.fLayout.fFlags & SkSL::Layout::Flag::kSRGBUnpremul_Flag) {
-                        uni.fFlags |= Uniform::kSRGBUnpremul_Flag;
-                    }
-
-                    uni.fOffset = offset;
-                    offset += uni.sizeInBytes();
-                    SkASSERT(SkIsAlign4(offset));
-
-                    uniforms.push_back(uni);
                 }
+
+                if (var.fModifiers.fLayout.fFlags & SkSL::Layout::Flag::kSRGBUnpremul_Flag) {
+                    uni.fFlags |= Uniform::kSRGBUnpremul_Flag;
+                }
+
+                uni.fOffset = offset;
+                offset += uni.sizeInBytes();
+                SkASSERT(SkIsAlign4(offset));
+
+                uniforms.push_back(uni);
             }
         }
         // Functions
-        else if (elem.kind() == SkSL::ProgramElement::Kind::kFunction) {
-            const auto& func = static_cast<const SkSL::FunctionDefinition&>(elem);
+        else if (elem.is<SkSL::FunctionDefinition>()) {
+            const auto& func = elem.as<SkSL::FunctionDefinition>();
             const SkSL::FunctionDeclaration& decl = func.fDeclaration;
             if (decl.name() == "main") {
                 hasMain = true;
diff --git a/src/gpu/effects/generated/GrAARectEffect.cpp b/src/gpu/effects/generated/GrAARectEffect.cpp
index 999ed35..7c0ad9c 100644
--- a/src/gpu/effects/generated/GrAARectEffect.cpp
+++ b/src/gpu/effects/generated/GrAARectEffect.cpp
@@ -40,7 +40,9 @@
         alpha = half(all(greaterThan(float4(sk_FragCoord.xy, %s.zw), float4(%s.xy, sk_FragCoord.xy))) ? 1 : 0);
         break;
     default:
-        half xSub, ySub;
+        half xSub;
+        half ySub;
+
         xSub = min(half(sk_FragCoord.x - %s.x), 0.0);
         xSub += min(half(%s.z - sk_FragCoord.x), 0.0);
         ySub = min(half(sk_FragCoord.y - %s.y), 0.0);
diff --git a/src/gpu/effects/generated/GrHighContrastFilterEffect.cpp b/src/gpu/effects/generated/GrHighContrastFilterEffect.cpp
index f00f0ba..58f9aca 100644
--- a/src/gpu/effects/generated/GrHighContrastFilterEffect.cpp
+++ b/src/gpu/effects/generated/GrHighContrastFilterEffect.cpp
@@ -48,6 +48,8 @@
 return t < 0.1666666716337204 ? p + ((q - p) * 6.0) * t : (t < 0.5 ? q : (t < 0.66666668653488159 ? p + ((q - p) * (0.66666668653488159 - t)) * 6.0 : p));
 )SkSL",
                                   &HSLToRGB_name);
+        fragBuilder->codeAppendf(
+                R"SkSL(;)SkSL");
         SkString _sample896 = this->invokeChild(0, args);
         fragBuilder->codeAppendf(
                 R"SkSL(
diff --git a/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp b/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp
index 455b723..6033f99 100644
--- a/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp
+++ b/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp
@@ -27,7 +27,7 @@
         SkString _sample870 = this->invokeChild(0, args);
         fragBuilder->codeAppendf(
                 R"SkSL(half4 inputColor = %s;
-
+;
 half luma = clamp(dot(half3(0.2125999927520752, 0.71520000696182251, 0.072200000286102295), inputColor.xyz), 0.0, 1.0);
 %s = half4(0.0, 0.0, 0.0, luma);
 )SkSL",
diff --git a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp
index 5dbe823..4dd9534 100644
--- a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp
+++ b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp
@@ -29,7 +29,7 @@
                 R"SkSL(half4 c = %s;
 half4 p = c.y < c.z ? half4(c.zy, -1.0, 0.66666668653488159) : half4(c.yz, 0.0, -0.3333333432674408);
 half4 q = c.x < p.x ? half4(p.x, c.x, p.yw) : half4(c.x, p.x, p.yz);
-
+;
 half pmV = q.x;
 half pmC = pmV - min(q.y, q.z);
 half pmL = pmV - pmC * 0.5;
diff --git a/src/gpu/effects/generated/GrRectBlurEffect.cpp b/src/gpu/effects/generated/GrRectBlurEffect.cpp
index 89cdc5d..9763f3f 100644
--- a/src/gpu/effects/generated/GrRectBlurEffect.cpp
+++ b/src/gpu/effects/generated/GrRectBlurEffect.cpp
@@ -49,7 +49,9 @@
         }
         fragBuilder->codeAppendf(
                 R"SkSL(/* key */ bool highp = %s;
-half xCoverage, yCoverage;
+half xCoverage;
+half yCoverage;
+
 float2 pos = sk_FragCoord.xy;
 @if (%s) {
     pos = (%s * float3(pos, 1.0)).xy;
diff --git a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp
index 36fad7f..7002ccc 100644
--- a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp
+++ b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp
@@ -47,7 +47,9 @@
                                                         kHalf_GrSLType, "threshold");
         fragBuilder->codeAppendf(
                 R"SkSL(half t = half(%s.x);
-float4 scale, bias;
+float4 scale;
+float4 bias;
+
 if (t < %s) {
     scale = %s;
     bias = %s;
diff --git a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp
index c826afc..bdb857e 100644
--- a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp
+++ b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp
@@ -129,7 +129,9 @@
                                                              kHalf4_GrSLType, "thresholds9_13");
         fragBuilder->codeAppendf(
                 R"SkSL(half t = half(%s.x);
-float4 scale, bias;
+float4 scale;
+float4 bias;
+
 if (%d <= 4 || t < %s.w) {
     if (%d <= 2 || t < %s.y) {
         if (%d <= 1 || t < %s.x) {
diff --git a/src/sksl/SkSLAnalysis.cpp b/src/sksl/SkSLAnalysis.cpp
index 726c0fc..9804945 100644
--- a/src/sksl/SkSLAnalysis.cpp
+++ b/src/sksl/SkSLAnalysis.cpp
@@ -35,7 +35,6 @@
 #include "src/sksl/ir/SkSLNop.h"
 #include "src/sksl/ir/SkSLReturnStatement.h"
 #include "src/sksl/ir/SkSLSwitchStatement.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
 // Expressions
@@ -486,10 +485,6 @@
             }
             return v.fValue && this->visitExpression(*v.fValue);
         }
-        case Statement::Kind::kVarDeclarations:
-            return this->visitProgramElement(
-                    *s.template as<VarDeclarationsStatement>().fDeclaration);
-
         case Statement::Kind::kWhile: {
             auto& w = s.template as<WhileStatement>();
             return this->visitExpression(*w.fTest) || this->visitStatement(*w.fStatement);
@@ -520,11 +515,9 @@
             }
             return false;
 
-        case ProgramElement::Kind::kVar:
-            for (auto& v : pe.template as<VarDeclarations>().fVars) {
-                if (this->visitStatement(*v)) {
-                    return true;
-                }
+        case ProgramElement::Kind::kGlobalVar:
+            if (this->visitStatement(*pe.template as<GlobalVarDeclaration>().fDecl)) {
+                return true;
             }
             return false;
 
diff --git a/src/sksl/SkSLByteCodeGenerator.cpp b/src/sksl/SkSLByteCodeGenerator.cpp
index 512fbd26..f71328d 100644
--- a/src/sksl/SkSLByteCodeGenerator.cpp
+++ b/src/sksl/SkSLByteCodeGenerator.cpp
@@ -159,21 +159,19 @@
                 fFunctions.push_back(&e.as<FunctionDefinition>());
                 break;
             }
-            case ProgramElement::Kind::kVar: {
-                const VarDeclarations& decl = e.as<VarDeclarations>();
-                for (const auto& v : decl.fVars) {
-                    const Variable* declVar = v->as<VarDeclaration>().fVar;
-                    if (declVar->type() == *fContext.fFragmentProcessor_Type) {
-                        fOutput->fChildFPCount++;
-                    }
-                    if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) {
-                        continue;
-                    }
-                    if (is_uniform(*declVar)) {
-                        this->gatherUniforms(declVar->type(), declVar->name());
-                    } else {
-                        fOutput->fGlobalSlotCount += SlotCount(declVar->type());
-                    }
+            case ProgramElement::Kind::kGlobalVar: {
+                const GlobalVarDeclaration& decl = e.as<GlobalVarDeclaration>();
+                const Variable* declVar = decl.fDecl->fVar;
+                if (declVar->type() == *fContext.fFragmentProcessor_Type) {
+                    fOutput->fChildFPCount++;
+                }
+                if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) {
+                    continue;
+                }
+                if (is_uniform(*declVar)) {
+                    this->gatherUniforms(declVar->type(), declVar->name());
+                } else {
+                    fOutput->fGlobalSlotCount += SlotCount(declVar->type());
                 }
                 break;
             }
@@ -457,19 +455,17 @@
             if (var.type() == *fContext.fFragmentProcessor_Type) {
                 int offset = 0;
                 for (const auto& e : fProgram) {
-                    if (e.kind() == ProgramElement::Kind::kVar) {
-                        const VarDeclarations& decl = e.as<VarDeclarations>();
-                        for (const auto& v : decl.fVars) {
-                            const Variable* declVar = v->as<VarDeclaration>().fVar;
-                            if (declVar->type() != *fContext.fFragmentProcessor_Type) {
-                                continue;
-                            }
-                            if (declVar == &var) {
-                                SkASSERT(offset <= 255);
-                                return { offset, Storage::kChildFP };
-                            }
-                            offset++;
+                    if (e.is<GlobalVarDeclaration>()) {
+                        const GlobalVarDeclaration& decl = e.as<GlobalVarDeclaration>();
+                        const Variable* declVar = decl.fDecl->fVar;
+                        if (declVar->type() != *fContext.fFragmentProcessor_Type) {
+                            continue;
                         }
+                        if (declVar == &var) {
+                            SkASSERT(offset <= 255);
+                            return { offset, Storage::kChildFP };
+                        }
+                        offset++;
                     }
                 }
                 SkASSERT(false);
@@ -487,22 +483,20 @@
             int offset = 0;
             bool isUniform = is_uniform(var);
             for (const auto& e : fProgram) {
-                if (e.kind() == ProgramElement::Kind::kVar) {
-                    const VarDeclarations& decl = e.as<VarDeclarations>();
-                    for (const auto& v : decl.fVars) {
-                        const Variable* declVar = v->as<VarDeclaration>().fVar;
-                        if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) {
-                            continue;
-                        }
-                        if (isUniform != is_uniform(*declVar)) {
-                            continue;
-                        }
-                        if (declVar == &var) {
-                            SkASSERT(offset <= 255);
-                            return  { offset, isUniform ? Storage::kUniform : Storage::kGlobal };
-                        }
-                        offset += SlotCount(declVar->type());
+                if (e.is<GlobalVarDeclaration>()) {
+                    const GlobalVarDeclaration& decl = e.as<GlobalVarDeclaration>();
+                    const Variable* declVar = decl.fDecl->fVar;
+                    if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) {
+                        continue;
                     }
+                    if (isUniform != is_uniform(*declVar)) {
+                        continue;
+                    }
+                    if (declVar == &var) {
+                        SkASSERT(offset <= 255);
+                        return  { offset, isUniform ? Storage::kUniform : Storage::kGlobal };
+                    }
+                    offset += SlotCount(declVar->type());
                 }
             }
             SkASSERT(false);
@@ -1763,17 +1757,14 @@
     abort();
 }
 
-void ByteCodeGenerator::writeVarDeclarations(const VarDeclarations& v) {
-    for (const auto& declStatement : v.fVars) {
-        const VarDeclaration& decl = declStatement->as<VarDeclaration>();
-        // we need to grab the location even if we don't use it, to ensure it has been allocated
-        Location location = this->getLocation(*decl.fVar);
-        if (decl.fValue) {
-            this->writeExpression(*decl.fValue);
-            int count = SlotCount(decl.fValue->type());
-            this->write(ByteCodeInstruction::kStore, count);
-            this->write8(location.fSlot);
-        }
+void ByteCodeGenerator::writeVarDeclaration(const VarDeclaration& decl) {
+    // we need to grab the location even if we don't use it, to ensure it has been allocated
+    Location location = this->getLocation(*decl.fVar);
+    if (decl.fValue) {
+        this->writeExpression(*decl.fValue);
+        int count = SlotCount(decl.fValue->type());
+        this->write(ByteCodeInstruction::kStore, count);
+        this->write8(location.fSlot);
     }
 }
 
@@ -1824,8 +1815,8 @@
         case Statement::Kind::kSwitch:
             this->writeSwitchStatement(s.as<SwitchStatement>());
             break;
-        case Statement::Kind::kVarDeclarations:
-            this->writeVarDeclarations(*s.as<VarDeclarationsStatement>().fDeclaration);
+        case Statement::Kind::kVarDeclaration:
+            this->writeVarDeclaration(s.as<VarDeclaration>());
             break;
         case Statement::Kind::kWhile:
             this->writeWhileStatement(s.as<WhileStatement>());
diff --git a/src/sksl/SkSLByteCodeGenerator.h b/src/sksl/SkSLByteCodeGenerator.h
index f69bbb9..8618995 100644
--- a/src/sksl/SkSLByteCodeGenerator.h
+++ b/src/sksl/SkSLByteCodeGenerator.h
@@ -45,7 +45,6 @@
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 #include "src/sksl/spirv.h"
@@ -245,7 +244,7 @@
 
     std::unique_ptr<ByteCodeFunction> writeFunction(const FunctionDefinition& f);
 
-    void writeVarDeclarations(const VarDeclarations& decl);
+    void writeVarDeclaration(const VarDeclaration& decl);
 
     void writeVariableExpression(const Expression& expr);
 
diff --git a/src/sksl/SkSLCFGGenerator.cpp b/src/sksl/SkSLCFGGenerator.cpp
index fb13049..d562aaf 100644
--- a/src/sksl/SkSLCFGGenerator.cpp
+++ b/src/sksl/SkSLCFGGenerator.cpp
@@ -23,7 +23,6 @@
 #include "src/sksl/ir/SkSLSwitchStatement.h"
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
 namespace SkSL {
@@ -508,17 +507,10 @@
             cfg.currentBlock().fNodes.push_back(BasicBlock::MakeStatement(s));
             break;
         }
-        case Statement::Kind::kVarDeclarations: {
-            VarDeclarationsStatement& decls = (*s)->as<VarDeclarationsStatement>();
-            for (auto& stmt : decls.fDeclaration->fVars) {
-                if (stmt->kind() == Statement::Kind::kNop) {
-                    continue;
-                }
-                VarDeclaration& vd = stmt->as<VarDeclaration>();
-                if (vd.fValue) {
-                    this->addExpression(cfg, &vd.fValue, /*constantPropagate=*/true);
-                }
-                cfg.currentBlock().fNodes.push_back(BasicBlock::MakeStatement(&stmt));
+        case Statement::Kind::kVarDeclaration: {
+            VarDeclaration& vd = (*s)->as<VarDeclaration>();
+            if (vd.fValue) {
+                this->addExpression(cfg, &vd.fValue, /*constantPropagate=*/true);
             }
             cfg.currentBlock().fNodes.push_back(BasicBlock::MakeStatement(s));
             break;
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp
index 77898b2..77a3933 100644
--- a/src/sksl/SkSLCPPCodeGenerator.cpp
+++ b/src/sksl/SkSLCPPCodeGenerator.cpp
@@ -409,25 +409,18 @@
 
 int CPPCodeGenerator::getChildFPIndex(const Variable& var) const {
     int index = 0;
-    bool found = false;
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                const VarDeclaration& decl = raw->as<VarDeclaration>();
-                if (decl.fVar == &var) {
-                    found = true;
-                } else if (decl.fVar->type().nonnullable() == *fContext.fFragmentProcessor_Type) {
-                    ++index;
-                }
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            if (decl.fVar == &var) {
+                return index;
+            } else if (decl.fVar->type().nonnullable() == *fContext.fFragmentProcessor_Type) {
+                ++index;
             }
         }
-        if (found) {
-            break;
-        }
     }
-    SkASSERT(found);
-    return index;
+    SkDEBUGFAIL("child fragment processor not found");
+    return 0;
 }
 
 void CPPCodeGenerator::writeFunctionCall(const FunctionCall& c) {
@@ -661,12 +654,9 @@
     switch (p.kind()) {
         case ProgramElement::Kind::kSection:
             return;
-        case ProgramElement::Kind::kVar: {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            if (!decls.fVars.size()) {
-                return;
-            }
-            const Variable& var = *decls.fVars[0]->as<VarDeclaration>().fVar;
+        case ProgramElement::Kind::kGlobalVar: {
+            const GlobalVarDeclaration& decl = p.as<GlobalVarDeclaration>();
+            const Variable& var = *decl.fDecl->fVar;
             if (var.fModifiers.fFlags & (Modifiers::kIn_Flag | Modifiers::kUniform_Flag) ||
                 -1 != var.fModifiers.fLayout.fBuiltin) {
                 return;
@@ -711,38 +701,36 @@
 
 void CPPCodeGenerator::writePrivateVars() {
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                VarDeclaration& decl = raw->as<VarDeclaration>();
-                if (is_private(*decl.fVar)) {
-                    if (decl.fVar->type() == *fContext.fFragmentProcessor_Type) {
-                        fErrors.error(decl.fOffset,
-                                      "fragmentProcessor variables must be declared 'in'");
-                        return;
-                    }
-                    this->writef("%s %s = %s;\n",
-                                 HCodeGenerator::FieldType(fContext, decl.fVar->type(),
-                                                           decl.fVar->fModifiers.fLayout).c_str(),
-                                 String(decl.fVar->name()).c_str(),
-                                 default_value(*decl.fVar).c_str());
-                } else if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
-                    // An auto-tracked uniform in variable, so add a field to hold onto the prior
-                    // state. Note that tracked variables must be uniform in's and that is validated
-                    // before writePrivateVars() is called.
-                    const UniformCTypeMapper* mapper = UniformCTypeMapper::Get(fContext, *decl.fVar);
-                    SkASSERT(mapper && mapper->supportsTracking());
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            if (is_private(*decl.fVar)) {
+                if (decl.fVar->type() == *fContext.fFragmentProcessor_Type) {
+                    fErrors.error(decl.fOffset,
+                                  "fragmentProcessor variables must be declared 'in'");
+                    return;
+                }
+                this->writef("%s %s = %s;\n",
+                             HCodeGenerator::FieldType(fContext, decl.fVar->type(),
+                                                       decl.fVar->fModifiers.fLayout)
+                                     .c_str(),
+                             String(decl.fVar->name()).c_str(),
+                             default_value(*decl.fVar).c_str());
+            } else if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
+                // An auto-tracked uniform in variable, so add a field to hold onto the prior
+                // state. Note that tracked variables must be uniform in's and that is validated
+                // before writePrivateVars() is called.
+                const UniformCTypeMapper* mapper = UniformCTypeMapper::Get(fContext, *decl.fVar);
+                SkASSERT(mapper && mapper->supportsTracking());
 
-                    String name = HCodeGenerator::FieldName(String(decl.fVar->name()).c_str());
-                    // The member statement is different if the mapper reports a default value
-                    if (mapper->defaultValue().size() > 0) {
-                        this->writef("%s %sPrev = %s;\n",
-                                     Layout::CTypeToStr(mapper->ctype()), name.c_str(),
-                                     mapper->defaultValue().c_str());
-                    } else {
-                        this->writef("%s %sPrev;\n",
-                                     Layout::CTypeToStr(mapper->ctype()), name.c_str());
-                    }
+                String name = HCodeGenerator::FieldName(String(decl.fVar->name()).c_str());
+                // The member statement is different if the mapper reports a default value
+                if (mapper->defaultValue().size() > 0) {
+                    this->writef("%s %sPrev = %s;\n",
+                                    Layout::CTypeToStr(mapper->ctype()), name.c_str(),
+                                    mapper->defaultValue().c_str());
+                } else {
+                    this->writef("%s %sPrev;\n",
+                                    Layout::CTypeToStr(mapper->ctype()), name.c_str());
                 }
             }
         }
@@ -751,17 +739,14 @@
 
 void CPPCodeGenerator::writePrivateVarValues() {
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                VarDeclaration& decl = raw->as<VarDeclaration>();
-                if (is_private(*decl.fVar) && decl.fValue) {
-                    this->writef("%s = ", String(decl.fVar->name()).c_str());
-                    fCPPMode = true;
-                    this->writeExpression(*decl.fValue, kAssignment_Precedence);
-                    fCPPMode = false;
-                    this->write(";\n");
-                }
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            if (is_private(*decl.fVar) && decl.fValue) {
+                this->writef("%s = ", String(decl.fVar->name()).c_str());
+                fCPPMode = true;
+                this->writeExpression(*decl.fValue, kAssignment_Precedence);
+                fCPPMode = false;
+                this->write(";\n");
             }
         }
     }
@@ -968,18 +953,15 @@
                  "        (void) _outer;\n",
                  fFullName.c_str(), fFullName.c_str());
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                VarDeclaration& decl = raw->as<VarDeclaration>();
-                String nameString(decl.fVar->name());
-                const char* name = nameString.c_str();
-                if (SectionAndParameterHelper::IsParameter(*decl.fVar) &&
-                    is_accessible(*decl.fVar)) {
-                    this->writef("        auto %s = _outer.%s;\n"
-                                 "        (void) %s;\n",
-                                 name, name, name);
-                }
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            String nameString(decl.fVar->name());
+            const char* name = nameString.c_str();
+            if (SectionAndParameterHelper::IsParameter(*decl.fVar) &&
+                is_accessible(*decl.fVar)) {
+                this->writef("        auto %s = _outer.%s;\n"
+                             "        (void) %s;\n",
+                             name, name, name);
             }
         }
     }
@@ -1084,38 +1066,35 @@
     if (section) {
         int samplerIndex = 0;
         for (const auto& p : fProgram) {
-            if (p.kind() == ProgramElement::Kind::kVar) {
-                const VarDeclarations& decls = p.as<VarDeclarations>();
-                for (const std::unique_ptr<Statement>& raw : decls.fVars) {
-                    const VarDeclaration& decl = raw->as<VarDeclaration>();
-                    const Variable& variable = *decl.fVar;
-                    String nameString(variable.name());
-                    const char* name = nameString.c_str();
-                    if (variable.type().typeKind() == Type::TypeKind::kSampler) {
-                        this->writef("        const GrSurfaceProxyView& %sView = "
-                                     "_outer.textureSampler(%d).view();\n",
-                                     name, samplerIndex);
-                        this->writef("        GrTexture& %s = *%sView.proxy()->peekTexture();\n",
-                                     name, name);
-                        this->writef("        (void) %s;\n", name);
-                        ++samplerIndex;
-                    } else if (needs_uniform_var(variable)) {
-                        this->writef("        UniformHandle& %s = %sVar;\n"
-                                     "        (void) %s;\n",
-                                     name, HCodeGenerator::FieldName(name).c_str(), name);
-                    } else if (SectionAndParameterHelper::IsParameter(variable) &&
-                               variable.type() != *fContext.fFragmentProcessor_Type) {
-                        if (!wroteProcessor) {
-                            this->writef("        const %s& _outer = _proc.cast<%s>();\n", fullName,
-                                         fullName);
-                            wroteProcessor = true;
-                        }
+            if (p.is<GlobalVarDeclaration>()) {
+                const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+                const Variable& variable = *decl.fVar;
+                String nameString(variable.name());
+                const char* name = nameString.c_str();
+                if (variable.type().typeKind() == Type::TypeKind::kSampler) {
+                    this->writef("        const GrSurfaceProxyView& %sView = "
+                                 "_outer.textureSampler(%d).view();\n",
+                                 name, samplerIndex);
+                    this->writef("        GrTexture& %s = *%sView.proxy()->peekTexture();\n",
+                                 name, name);
+                    this->writef("        (void) %s;\n", name);
+                    ++samplerIndex;
+                } else if (needs_uniform_var(variable)) {
+                    this->writef("        UniformHandle& %s = %sVar;\n"
+                                    "        (void) %s;\n",
+                                    name, HCodeGenerator::FieldName(name).c_str(), name);
+                } else if (SectionAndParameterHelper::IsParameter(variable) &&
+                            variable.type() != *fContext.fFragmentProcessor_Type) {
+                    if (!wroteProcessor) {
+                        this->writef("        const %s& _outer = _proc.cast<%s>();\n", fullName,
+                                     fullName);
+                        wroteProcessor = true;
+                    }
 
-                        if (variable.type().nonnullable() != *fContext.fFragmentProcessor_Type) {
-                            this->writef("        auto %s = _outer.%s;\n"
-                                         "        (void) %s;\n",
-                                         name, name, name);
-                        }
+                    if (variable.type().nonnullable() != *fContext.fFragmentProcessor_Type) {
+                        this->writef("        auto %s = _outer.%s;\n"
+                                        "        (void) %s;\n",
+                                        name, name, name);
                     }
                 }
             }
@@ -1260,76 +1239,71 @@
                                                 "GrProcessorKeyBuilder* b) const {\n",
                  fFullName.c_str());
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                const VarDeclaration& decl = raw->as<VarDeclaration>();
-                const Variable& var = *decl.fVar;
-                const Type& varType = var.type();
-                String nameString(var.name());
-                const char* name = nameString.c_str();
-                if (var.fModifiers.fLayout.fKey != Layout::kNo_Key &&
-                    (var.fModifiers.fFlags & Modifiers::kUniform_Flag)) {
-                    fErrors.error(var.fOffset,
-                                  "layout(key) may not be specified on uniforms");
-                }
-                switch (var.fModifiers.fLayout.fKey) {
-                    case Layout::kKey_Key:
-                        if (is_private(var)) {
-                            this->writef("%s %s =",
-                                         HCodeGenerator::FieldType(fContext, varType,
-                                                                   var.fModifiers.fLayout).c_str(),
-                                         String(var.name()).c_str());
-                            if (decl.fValue) {
-                                fCPPMode = true;
-                                this->writeExpression(*decl.fValue, kAssignment_Precedence);
-                                fCPPMode = false;
-                            } else {
-                                this->writef("%s", default_value(var).c_str());
-                            }
-                            this->write(";\n");
-                        }
-                        if (var.fModifiers.fLayout.fWhen.fLength) {
-                            this->writef("if (%s) {", String(var.fModifiers.fLayout.fWhen).c_str());
-                        }
-                        if (varType == *fContext.fHalf4_Type) {
-                            this->writef("    uint16_t red = SkFloatToHalf(%s.fR);\n",
-                                         HCodeGenerator::FieldName(name).c_str());
-                            this->writef("    uint16_t green = SkFloatToHalf(%s.fG);\n",
-                                         HCodeGenerator::FieldName(name).c_str());
-                            this->writef("    uint16_t blue = SkFloatToHalf(%s.fB);\n",
-                                         HCodeGenerator::FieldName(name).c_str());
-                            this->writef("    uint16_t alpha = SkFloatToHalf(%s.fA);\n",
-                                         HCodeGenerator::FieldName(name).c_str());
-                            this->write("    b->add32(((uint32_t)red << 16) | green);\n");
-                            this->write("    b->add32(((uint32_t)blue << 16) | alpha);\n");
-                        } else if (varType == *fContext.fHalf_Type ||
-                                   varType == *fContext.fFloat_Type) {
-                            this->writef("    b->add32(sk_bit_cast<uint32_t>(%s));\n",
-                                         HCodeGenerator::FieldName(name).c_str());
-                        } else if (varType.isInteger() || varType == *fContext.fBool_Type ||
-                                   varType.typeKind() == Type::TypeKind::kEnum) {
-                            this->writef("    b->add32((uint32_t) %s);\n",
-                                         HCodeGenerator::FieldName(name).c_str());
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            const Variable& var = *decl.fVar;
+            const Type& varType = var.type();
+            String nameString(var.name());
+            const char* name = nameString.c_str();
+            if (var.fModifiers.fLayout.fKey != Layout::kNo_Key &&
+                (var.fModifiers.fFlags & Modifiers::kUniform_Flag)) {
+                fErrors.error(var.fOffset, "layout(key) may not be specified on uniforms");
+            }
+            switch (var.fModifiers.fLayout.fKey) {
+                case Layout::kKey_Key:
+                    if (is_private(var)) {
+                        this->writef("%s %s =",
+                                        HCodeGenerator::FieldType(fContext, varType,
+                                                                var.fModifiers.fLayout).c_str(),
+                                        String(var.name()).c_str());
+                        if (decl.fValue) {
+                            fCPPMode = true;
+                            this->writeExpression(*decl.fValue, kAssignment_Precedence);
+                            fCPPMode = false;
                         } else {
-                            ABORT("NOT YET IMPLEMENTED: automatic key handling for %s\n",
-                                  varType.displayName().c_str());
+                            this->writef("%s", default_value(var).c_str());
                         }
-                        if (var.fModifiers.fLayout.fWhen.fLength) {
-                            this->write("}");
-                        }
-                        break;
-                    case Layout::kIdentity_Key:
-                        if (varType.typeKind() != Type::TypeKind::kMatrix) {
-                            fErrors.error(var.fOffset,
-                                          "layout(key=identity) requires matrix type");
-                        }
-                        this->writef("    b->add32(%s.isIdentity() ? 1 : 0);\n",
+                        this->write(";\n");
+                    }
+                    if (var.fModifiers.fLayout.fWhen.fLength) {
+                        this->writef("if (%s) {", String(var.fModifiers.fLayout.fWhen).c_str());
+                    }
+                    if (varType == *fContext.fHalf4_Type) {
+                        this->writef("    uint16_t red = SkFloatToHalf(%s.fR);\n",
                                      HCodeGenerator::FieldName(name).c_str());
-                        break;
-                    case Layout::kNo_Key:
-                        break;
-                }
+                        this->writef("    uint16_t green = SkFloatToHalf(%s.fG);\n",
+                                     HCodeGenerator::FieldName(name).c_str());
+                        this->writef("    uint16_t blue = SkFloatToHalf(%s.fB);\n",
+                                     HCodeGenerator::FieldName(name).c_str());
+                        this->writef("    uint16_t alpha = SkFloatToHalf(%s.fA);\n",
+                                     HCodeGenerator::FieldName(name).c_str());
+                        this->write("    b->add32(((uint32_t)red << 16) | green);\n");
+                        this->write("    b->add32(((uint32_t)blue << 16) | alpha);\n");
+                    } else if (varType == *fContext.fHalf_Type ||
+                               varType == *fContext.fFloat_Type) {
+                        this->writef("    b->add32(sk_bit_cast<uint32_t>(%s));\n",
+                                     HCodeGenerator::FieldName(name).c_str());
+                    } else if (varType.isInteger() || varType == *fContext.fBool_Type ||
+                               varType.typeKind() == Type::TypeKind::kEnum) {
+                        this->writef("    b->add32((uint32_t) %s);\n",
+                                     HCodeGenerator::FieldName(name).c_str());
+                    } else {
+                        ABORT("NOT YET IMPLEMENTED: automatic key handling for %s\n",
+                              varType.displayName().c_str());
+                    }
+                    if (var.fModifiers.fLayout.fWhen.fLength) {
+                        this->write("}");
+                    }
+                    break;
+                case Layout::kIdentity_Key:
+                    if (varType.typeKind() != Type::TypeKind::kMatrix) {
+                        fErrors.error(var.fOffset, "layout(key=identity) requires matrix type");
+                    }
+                    this->writef("    b->add32(%s.isIdentity() ? 1 : 0);\n",
+                                 HCodeGenerator::FieldName(name).c_str());
+                    break;
+                case Layout::kNo_Key:
+                    break;
             }
         }
     }
@@ -1339,39 +1313,36 @@
 bool CPPCodeGenerator::generateCode() {
     std::vector<const Variable*> uniforms;
     for (const auto& p : fProgram) {
-        if (p.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = p.as<VarDeclarations>();
-            for (const auto& raw : decls.fVars) {
-                VarDeclaration& decl = raw->as<VarDeclaration>();
-                if ((decl.fVar->fModifiers.fFlags & Modifiers::kUniform_Flag) &&
-                           decl.fVar->type().typeKind() != Type::TypeKind::kSampler) {
-                    uniforms.push_back(decl.fVar);
+        if (p.is<GlobalVarDeclaration>()) {
+            const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+            if ((decl.fVar->fModifiers.fFlags & Modifiers::kUniform_Flag) &&
+                        decl.fVar->type().typeKind() != Type::TypeKind::kSampler) {
+                uniforms.push_back(decl.fVar);
+            }
+
+            if (is_uniform_in(*decl.fVar)) {
+                // Validate the "uniform in" declarations to make sure they are fully supported,
+                // instead of generating surprising C++
+                const UniformCTypeMapper* mapper =
+                        UniformCTypeMapper::Get(fContext, *decl.fVar);
+                if (mapper == nullptr) {
+                    fErrors.error(decl.fOffset, String(decl.fVar->name())
+                            + "'s type is not supported for use as a 'uniform in'");
+                    return false;
+                }
+                if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
+                    if (!mapper->supportsTracking()) {
+                        fErrors.error(decl.fOffset, String(decl.fVar->name())
+                                + "'s type does not support state tracking");
+                        return false;
+                    }
                 }
 
-                if (is_uniform_in(*decl.fVar)) {
-                    // Validate the "uniform in" declarations to make sure they are fully supported,
-                    // instead of generating surprising C++
-                    const UniformCTypeMapper* mapper =
-                            UniformCTypeMapper::Get(fContext, *decl.fVar);
-                    if (mapper == nullptr) {
-                        fErrors.error(decl.fOffset, String(decl.fVar->name())
-                                + "'s type is not supported for use as a 'uniform in'");
-                        return false;
-                    }
-                    if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
-                        if (!mapper->supportsTracking()) {
-                            fErrors.error(decl.fOffset, String(decl.fVar->name())
-                                    + "'s type does not support state tracking");
-                            return false;
-                        }
-                    }
-
-                } else {
-                    // If it's not a uniform_in, it's an error to be tracked
-                    if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
-                        fErrors.error(decl.fOffset, "Non-'in uniforms' cannot be tracked");
-                        return false;
-                    }
+            } else {
+                // If it's not a uniform_in, it's an error to be tracked
+                if (decl.fVar->fModifiers.fLayout.fFlags & Layout::kTracked_Flag) {
+                    fErrors.error(decl.fOffset, "Non-'in uniforms' cannot be tracked");
+                    return false;
                 }
             }
         }
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp
index db34be8..55f5c25 100644
--- a/src/sksl/SkSLCompiler.cpp
+++ b/src/sksl/SkSLCompiler.cpp
@@ -89,13 +89,9 @@
                 iter = src->erase(iter);
                 break;
             }
-            case ProgramElement::Kind::kVar: {
-                // TODO: For now, we only support one variable per declaration. We map names to
-                // declarations, and each declaration pulls in all of it's variables, so this rule
-                // ensures that we never pull in variables that aren't actually used.
-                const VarDeclarations& vd = element->as<VarDeclarations>();
-                SkASSERT(vd.fVars.size() == 1);
-                const Variable* var = vd.fVars[0]->as<VarDeclaration>().fVar;
+            case ProgramElement::Kind::kGlobalVar: {
+                const GlobalVarDeclaration& vd = element->as<GlobalVarDeclaration>();
+                const Variable* var = vd.fDecl->fVar;
                 target->insertOrDie(var->name(), std::move(element));
                 iter = src->erase(iter);
                 break;
@@ -599,13 +595,8 @@
         for (const auto& node : block.fNodes) {
             if (node.isStatement()) {
                 const Statement* s = node.statement()->get();
-                if (s->is<VarDeclarationsStatement>()) {
-                    const VarDeclarationsStatement* vd = &s->as<VarDeclarationsStatement>();
-                    for (const auto& decl : vd->fDeclaration->fVars) {
-                        if (decl->kind() == Statement::Kind::kVarDeclaration) {
-                            result[decl->as<VarDeclaration>().fVar] = nullptr;
-                        }
-                    }
+                if (s->is<VarDeclaration>()) {
+                    result[s->as<VarDeclaration>().fVar] = nullptr;
                 }
             }
         }
@@ -1495,21 +1486,7 @@
                 // Block was reachable before optimization, but has since become unreachable. In
                 // addition to being dead code, it's broken - since control flow can't reach it, no
                 // prior variable definitions can reach it, and therefore variables might look to
-                // have not been properly assigned. Kill it.
-
-                // We need to do this in two steps. For any variable declarations, the node list
-                // will contain statement nodes for each VarDeclaration, and then a statement for
-                // the VarDeclarationsStatement. When we replace the VDS with a Nop, we delete the
-                // storage of the unique_ptr that the VD nodes are pointing to. So we remove those
-                // from the node list entirely, first.
-                b.fNodes.erase(std::remove_if(b.fNodes.begin(), b.fNodes.end(),
-                                              [](const BasicBlock::Node& node) {
-                                                  return node.isStatement() &&
-                                                         (*node.statement())->is<VarDeclaration>();
-                                              }),
-                               b.fNodes.end());
-
-                // Now replace any remaining statements in the block with Nops.
+                // have not been properly assigned. Kill it by replacing all statements with Nops.
                 for (BasicBlock::Node& node : b.fNodes) {
                     if (node.isStatement() && !(*node.statement())->is<Nop>()) {
                         node.setStatement(std::make_unique<Nop>());
@@ -1565,23 +1542,6 @@
                         }
                         ++iter;
                         break;
-                    case Statement::Kind::kVarDeclarations: {
-                        VarDeclarations& decls = *s.as<VarDeclarationsStatement>().fDeclaration;
-                        decls.fVars.erase(
-                                std::remove_if(decls.fVars.begin(), decls.fVars.end(),
-                                               [&](const std::unique_ptr<Statement>& var) {
-                                                   bool nop = var->is<Nop>();
-                                                   madeChanges |= nop;
-                                                   return nop;
-                                               }),
-                                decls.fVars.end());
-                        if (decls.fVars.empty()) {
-                            iter = b.fNodes.erase(iter);
-                        } else {
-                            ++iter;
-                        }
-                        break;
-                    }
                     default:
                         ++iter;
                         break;
@@ -1717,30 +1677,15 @@
         }
 
         if (program.fKind != Program::kFragmentProcessor_Kind) {
-            // Remove dead variables.
-            for (ProgramElement& element : program) {
-                if (!element.is<VarDeclarations>()) {
-                    continue;
-                }
-                VarDeclarations& vars = element.as<VarDeclarations>();
-                vars.fVars.erase(
-                        std::remove_if(vars.fVars.begin(), vars.fVars.end(),
-                                       [&](const std::unique_ptr<Statement>& stmt) {
-                                           bool dead = stmt->as<VarDeclaration>().fVar->dead();
-                                           madeChanges |= dead;
-                                           return dead;
-                                       }),
-                        vars.fVars.end());
-            }
-
-            // Remove empty variable declarations with no variables left inside of them.
+            // Remove declarations of dead global variables
             program.fElements.erase(
                     std::remove_if(program.fElements.begin(), program.fElements.end(),
                                    [&](const std::unique_ptr<ProgramElement>& element) {
-                                       if (!element->is<VarDeclarations>()) {
+                                       if (!element->is<GlobalVarDeclaration>()) {
                                            return false;
                                        }
-                                       bool dead = element->as<VarDeclarations>().fVars.empty();
+                                       const auto& varDecl = element->as<GlobalVarDeclaration>();
+                                       bool dead = varDecl.fDecl->fVar->dead();
                                        madeChanges |= dead;
                                        return dead;
                                    }),
diff --git a/src/sksl/SkSLDehydrator.cpp b/src/sksl/SkSLDehydrator.cpp
index ec039d8..c2619ec 100644
--- a/src/sksl/SkSLDehydrator.cpp
+++ b/src/sksl/SkSLDehydrator.cpp
@@ -45,7 +45,6 @@
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLUnresolvedFunction.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariable.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
@@ -489,6 +488,7 @@
                 const VarDeclaration& v = s->as<VarDeclaration>();
                 this->writeU8(Rehydrator::kVarDeclaration_Command);
                 this->writeU16(this->symbolId(v.fVar));
+                this->write(v.fBaseType);
                 this->writeU8(v.fSizes.size());
                 for (const std::unique_ptr<Expression>& sizeExpr : v.fSizes) {
                     this->write(sizeExpr.get());
@@ -496,11 +496,6 @@
                 this->write(v.fValue.get());
                 break;
             }
-            case Statement::Kind::kVarDeclarations: {
-                const VarDeclarationsStatement& v = s->as<VarDeclarationsStatement>();
-                this->write(*v.fDeclaration);
-                break;
-            }
             case Statement::Kind::kWhile: {
                 const WhileStatement& w = s->as<WhileStatement>();
                 this->writeU8(Rehydrator::kWhile_Command);
@@ -566,14 +561,10 @@
         case ProgramElement::Kind::kSection:
             SkASSERT(false);
             break;
-        case ProgramElement::Kind::kVar: {
-            const VarDeclarations& v = e.as<VarDeclarations>();
+        case ProgramElement::Kind::kGlobalVar: {
+            const GlobalVarDeclaration& v = e.as<GlobalVarDeclaration>();
             this->writeU8(Rehydrator::kVarDeclarations_Command);
-            this->write(v.fBaseType);
-            this->writeU8(v.fVars.size());
-            for (const auto& var : v.fVars) {
-                this->write(var.get());
-            }
+            this->write(v.fDecl.get());
             break;
         }
     }
diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp
index f0f7b7d..66452fd 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/SkSLGLSLCodeGenerator.cpp
@@ -1244,51 +1244,36 @@
     this->write(this->getTypePrecision(type));
 }
 
-void GLSLCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, bool global) {
-    if (!decl.fVars.size()) {
-        return;
+void GLSLCodeGenerator::writeVarDeclaration(const VarDeclaration& var, bool global) {
+    this->writeModifiers(var.fVar->fModifiers, global);
+    this->writeTypePrecision(var.fBaseType);
+    this->writeType(var.fBaseType);
+    this->write(" ");
+    this->write(var.fVar->name());
+    for (const auto& size : var.fSizes) {
+        this->write("[");
+        if (size) {
+            this->writeExpression(*size, kTopLevel_Precedence);
+        }
+        this->write("]");
     }
-    bool wroteType = false;
-    for (const auto& stmt : decl.fVars) {
-        const VarDeclaration& var = stmt->as<VarDeclaration>();
-        if (wroteType) {
-            this->write(", ");
-        } else {
-            this->writeModifiers(var.fVar->fModifiers, global);
-            this->writeTypePrecision(decl.fBaseType);
-            this->writeType(decl.fBaseType);
-            this->write(" ");
-            wroteType = true;
-        }
-        this->write(var.fVar->name());
-        for (const auto& size : var.fSizes) {
-            this->write("[");
-            if (size) {
-                this->writeExpression(*size, kTopLevel_Precedence);
-            }
-            this->write("]");
-        }
-        if (var.fValue) {
-            this->write(" = ");
-            this->writeVarInitializer(*var.fVar, *var.fValue);
-        }
-        if (!fFoundExternalSamplerDecl && var.fVar->type() == *fContext.fSamplerExternalOES_Type) {
-            if (fProgram.fSettings.fCaps->externalTextureExtensionString()) {
-                this->writeExtension(fProgram.fSettings.fCaps->externalTextureExtensionString());
-            }
-            if (fProgram.fSettings.fCaps->secondExternalTextureExtensionString()) {
-                this->writeExtension(
-                                  fProgram.fSettings.fCaps->secondExternalTextureExtensionString());
-            }
-            fFoundExternalSamplerDecl = true;
-        }
-        if (!fFoundRectSamplerDecl && var.fVar->type() == *fContext.fSampler2DRect_Type) {
-            fFoundRectSamplerDecl = true;
-        }
+    if (var.fValue) {
+        this->write(" = ");
+        this->writeVarInitializer(*var.fVar, *var.fValue);
     }
-    if (wroteType) {
-        this->write(";");
+    if (!fFoundExternalSamplerDecl && var.fVar->type() == *fContext.fSamplerExternalOES_Type) {
+        if (fProgram.fSettings.fCaps->externalTextureExtensionString()) {
+            this->writeExtension(fProgram.fSettings.fCaps->externalTextureExtensionString());
+        }
+        if (fProgram.fSettings.fCaps->secondExternalTextureExtensionString()) {
+            this->writeExtension(fProgram.fSettings.fCaps->secondExternalTextureExtensionString());
+        }
+        fFoundExternalSamplerDecl = true;
     }
+    if (!fFoundRectSamplerDecl && var.fVar->type() == *fContext.fSampler2DRect_Type) {
+        fFoundRectSamplerDecl = true;
+    }
+    this->write(";");
 }
 
 void GLSLCodeGenerator::writeStatement(const Statement& s) {
@@ -1303,8 +1288,8 @@
         case Statement::Kind::kReturn:
             this->writeReturnStatement(s.as<ReturnStatement>());
             break;
-        case Statement::Kind::kVarDeclarations:
-            this->writeVarDeclarations(*s.as<VarDeclarationsStatement>().fDeclaration, false);
+        case Statement::Kind::kVarDeclaration:
+            this->writeVarDeclaration(s.as<VarDeclaration>(), false);
             break;
         case Statement::Kind::kIf:
             this->writeIfStatement(s.as<IfStatement>());
@@ -1500,27 +1485,25 @@
         case ProgramElement::Kind::kExtension:
             this->writeExtension(e.as<Extension>().name());
             break;
-        case ProgramElement::Kind::kVar: {
-            const VarDeclarations& decl = e.as<VarDeclarations>();
-            if (decl.fVars.size() > 0) {
-                int builtin = decl.fVars[0]->as<VarDeclaration>().fVar->fModifiers.fLayout.fBuiltin;
-                if (builtin == -1) {
-                    // normal var
-                    this->writeVarDeclarations(decl, true);
-                    this->writeLine();
-                } else if (builtin == SK_FRAGCOLOR_BUILTIN &&
-                           fProgram.fSettings.fCaps->mustDeclareFragmentShaderOutput() &&
-                           decl.fVars[0]->as<VarDeclaration>().fVar->fWriteCount) {
-                    if (fProgram.fSettings.fFragColorIsInOut) {
-                        this->write("inout ");
-                    } else {
-                        this->write("out ");
-                    }
-                    if (usesPrecisionModifiers()) {
-                        this->write("mediump ");
-                    }
-                    this->writeLine("vec4 sk_FragColor;");
+        case ProgramElement::Kind::kGlobalVar: {
+            const VarDeclaration& decl = *e.as<GlobalVarDeclaration>().fDecl;
+            int builtin = decl.fVar->fModifiers.fLayout.fBuiltin;
+            if (builtin == -1) {
+                // normal var
+                this->writeVarDeclaration(decl, true);
+                this->writeLine();
+            } else if (builtin == SK_FRAGCOLOR_BUILTIN &&
+                       fProgram.fSettings.fCaps->mustDeclareFragmentShaderOutput() &&
+                       decl.fVar->fWriteCount) {
+                if (fProgram.fSettings.fFragColorIsInOut) {
+                    this->write("inout ");
+                } else {
+                    this->write("out ");
                 }
+                if (usesPrecisionModifiers()) {
+                    this->write("mediump ");
+                }
+                this->writeLine("vec4 sk_FragColor;");
             }
             break;
         }
diff --git a/src/sksl/SkSLGLSLCodeGenerator.h b/src/sksl/SkSLGLSLCodeGenerator.h
index 9a4c5c7..31683dd 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.h
+++ b/src/sksl/SkSLGLSLCodeGenerator.h
@@ -39,7 +39,6 @@
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
@@ -127,7 +126,7 @@
 
     void writeTypePrecision(const Type& type);
 
-    void writeVarDeclarations(const VarDeclarations& decl, bool global);
+    void writeVarDeclaration(const VarDeclaration& var, bool global);
 
     void writeFragCoord();
 
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp
index 2d94b7f..e883af8 100644
--- a/src/sksl/SkSLIRGenerator.cpp
+++ b/src/sksl/SkSLIRGenerator.cpp
@@ -52,7 +52,6 @@
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLUnresolvedFunction.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariable.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
@@ -293,23 +292,28 @@
 
 std::unique_ptr<Statement> IRGenerator::convertVarDeclarationStatement(const ASTNode& s) {
     SkASSERT(s.fKind == ASTNode::Kind::kVarDeclarations);
-    auto decl = this->convertVarDeclarations(s, Variable::kLocal_Storage);
-    if (!decl) {
+    auto decls = this->convertVarDeclarations(s, Variable::kLocal_Storage);
+    if (decls.empty()) {
         return nullptr;
     }
-    return std::unique_ptr<Statement>(new VarDeclarationsStatement(std::move(decl)));
+    if (decls.size() == 1) {
+        return std::move(decls.front());
+    } else {
+        return std::make_unique<Block>(s.fOffset, std::move(decls), /*symbols=*/nullptr,
+                                       /*isScope=*/false);
+    }
 }
 
-std::unique_ptr<VarDeclarations> IRGenerator::convertVarDeclarations(const ASTNode& decls,
-                                                                     Variable::Storage storage) {
+std::vector<std::unique_ptr<Statement>> IRGenerator::convertVarDeclarations(
+        const ASTNode& decls, Variable::Storage storage) {
     SkASSERT(decls.fKind == ASTNode::Kind::kVarDeclarations);
     auto declarationsIter = decls.begin();
     const Modifiers& modifiers = declarationsIter++->getModifiers();
     const ASTNode& rawType = *(declarationsIter++);
-    std::vector<std::unique_ptr<Statement>> variables;
+    std::vector<std::unique_ptr<Statement>> varDecls;
     const Type* baseType = this->convertType(rawType);
     if (!baseType) {
-        return nullptr;
+        return {};
     }
     if (baseType->nonnullable() == *fContext.fFragmentProcessor_Type &&
         storage != Variable::kGlobal_Storage) {
@@ -416,7 +420,7 @@
             if (rawSize) {
                 auto size = this->coerce(this->convertExpression(rawSize), *fContext.fInt_Type);
                 if (!size) {
-                    return nullptr;
+                    return {};
                 }
                 String name(type->name());
                 int64_t count;
@@ -424,12 +428,12 @@
                     count = size->as<IntLiteral>().value();
                     if (count <= 0) {
                         fErrors.error(size->fOffset, "array size must be positive");
-                        return nullptr;
+                        return {};
                     }
                     name += "[" + to_string(count) + "]";
                 } else {
                     fErrors.error(size->fOffset, "array size must be specified");
-                    return nullptr;
+                    return {};
                 }
                 type = fSymbolTable->takeOwnershipOfSymbol(
                         std::make_unique<Type>(name, Type::TypeKind::kArray, *type, (int)count));
@@ -451,11 +455,11 @@
         if (iter != varDecl.end()) {
             value = this->convertExpression(*iter);
             if (!value) {
-                return nullptr;
+                return {};
             }
             value = this->coerce(std::move(value), *type);
             if (!value) {
-                return nullptr;
+                return {};
             }
             var->fWriteCount = 1;
             var->fInitialValue = value.get();
@@ -469,13 +473,13 @@
             // Already defined, just update the modifiers.
             symbol->as<Variable>().fModifiers = var->fModifiers;
         } else {
-            variables.emplace_back(std::make_unique<VarDeclaration>(var.get(), std::move(sizes),
-                                                                    std::move(value)));
+            varDecls.emplace_back(std::make_unique<VarDeclaration>(
+                    var.get(), baseType, std::move(sizes), std::move(value)));
             StringFragment name = var->name();
             fSymbolTable->add(name, std::move(var));
         }
     }
-    return std::make_unique<VarDeclarations>(decls.fOffset, baseType, std::move(variables));
+    return varDecls;
 }
 
 std::unique_ptr<ModifiersDeclaration> IRGenerator::convertModifiersDeclaration(const ASTNode& m) {
@@ -1119,18 +1123,17 @@
     bool foundRTAdjust = false;
     auto iter = intf.begin();
     for (size_t i = 0; i < id.fDeclarationCount; ++i) {
-        std::unique_ptr<VarDeclarations> decl = this->convertVarDeclarations(
-                                                                 *(iter++),
-                                                                 Variable::kInterfaceBlock_Storage);
-        if (!decl) {
+        std::vector<std::unique_ptr<Statement>> decls =
+                this->convertVarDeclarations(*(iter++), Variable::kInterfaceBlock_Storage);
+        if (decls.empty()) {
             return nullptr;
         }
-        for (const auto& stmt : decl->fVars) {
-            VarDeclaration& vd = stmt->as<VarDeclaration>();
+        for (const auto& decl : decls) {
+            const VarDeclaration& vd = decl->as<VarDeclaration>();
             if (haveRuntimeArray) {
                 fErrors.error(decl->fOffset,
-                              "only the last entry in an interface block may be a runtime-sized "
-                              "array");
+                            "only the last entry in an interface block may be a runtime-sized "
+                            "array");
             }
             if (vd.fVar == fRTAdjust) {
                 foundRTAdjust = true;
@@ -1138,10 +1141,10 @@
                 fRTAdjustFieldIndex = fields.size();
             }
             fields.push_back(Type::Field(vd.fVar->fModifiers, vd.fVar->name(),
-                                         &vd.fVar->type()));
+                                        &vd.fVar->type()));
             if (vd.fValue) {
                 fErrors.error(decl->fOffset,
-                              "initializers are not permitted on interface block fields");
+                            "initializers are not permitted on interface block fields");
             }
             if (vd.fVar->type().typeKind() == Type::TypeKind::kArray &&
                 vd.fVar->type().columns() == Type::kUnsizedArray) {
@@ -2845,17 +2848,15 @@
             // the corresponding ProgramElement.
             if (const ProgramElement* sharedDecls =
                         fGenerator->fIntrinsics->findAndInclude(name)) {
-                SkASSERT(sharedDecls->is<VarDeclarations>());
+                SkASSERT(sharedDecls->is<GlobalVarDeclaration>());
 
-                // Clone the VarDeclarations ProgramElement that declares this variable
+                // Clone the GlobalVarDeclaration ProgramElement that declares this variable
                 std::unique_ptr<ProgramElement> clonedDecls = sharedDecls->clone();
-                VarDeclarations& varDecls = clonedDecls->as<VarDeclarations>();
-                SkASSERT(varDecls.fVars.size() == 1);
-                VarDeclaration& varDecl = varDecls.fVars.front()->as<VarDeclaration>();
+                VarDeclaration& varDecl = *clonedDecls->as<GlobalVarDeclaration>().fDecl;
                 const Variable* sharedVar = varDecl.fVar;
 
                 // Now clone the Variable, and add the clone to the Program's symbol table.
-                // Any initial value expression was cloned as part of the VarDeclarations,
+                // Any initial value expression was cloned as part of the GlobalVarDeclaration,
                 // so we're pointing at a Program-owned expression.
                 const Variable* clonedVar =
                         fGenerator->fSymbolTable->takeOwnershipOfSymbol(std::make_unique<Variable>(
@@ -2869,7 +2870,7 @@
                 // Remember this new re-mapping...
                 fRemap.insert({sharedVar, clonedVar});
 
-                // Add the VarDeclarations to this Program
+                // Add the GlobalVarDeclaration to this Program
                 fNewElements.push_back(std::move(clonedDecls));
             }
         }
@@ -2935,11 +2936,11 @@
     for (const auto& decl : fFile->root()) {
         switch (decl.fKind) {
             case ASTNode::Kind::kVarDeclarations: {
-                std::unique_ptr<VarDeclarations> s = this->convertVarDeclarations(
-                                                                         decl,
-                                                                         Variable::kGlobal_Storage);
-                if (s) {
-                    fProgramElements->push_back(std::move(s));
+                std::vector<std::unique_ptr<Statement>> decls =
+                        this->convertVarDeclarations(decl, Variable::kGlobal_Storage);
+                for (auto& varDecl : decls) {
+                    fProgramElements->push_back(std::make_unique<GlobalVarDeclaration>(
+                            decl.fOffset, std::move(varDecl)));
                 }
                 break;
             }
diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h
index db24930..9ba9e77 100644
--- a/src/sksl/SkSLIRGenerator.h
+++ b/src/sksl/SkSLIRGenerator.h
@@ -127,8 +127,8 @@
     void popSymbolTable();
 
     void checkModifiers(int offset, const Modifiers& modifiers, int permitted);
-    std::unique_ptr<VarDeclarations> convertVarDeclarations(const ASTNode& decl,
-                                                            Variable::Storage storage);
+    std::vector<std::unique_ptr<Statement>> convertVarDeclarations(const ASTNode& decl,
+                                                                   Variable::Storage storage);
     void convertFunction(const ASTNode& f);
     std::unique_ptr<Statement> convertSingleStatement(const ASTNode& statement);
     std::unique_ptr<Statement> convertStatement(const ASTNode& statement);
diff --git a/src/sksl/SkSLInliner.cpp b/src/sksl/SkSLInliner.cpp
index 26e6e98..5b3fb4e 100644
--- a/src/sksl/SkSLInliner.cpp
+++ b/src/sksl/SkSLInliner.cpp
@@ -49,7 +49,6 @@
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLUnresolvedFunction.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariable.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
@@ -547,6 +546,7 @@
             auto name = std::make_unique<String>(
                     this->uniqueNameForInlineVar(String(old->name()), symbolTableForStatement));
             const String* namePtr = symbolTableForStatement->takeOwnershipOfString(std::move(name));
+            const Type* baseTypePtr = copy_if_needed(&decl.fBaseType, *symbolTableForStatement);
             const Type* typePtr = copy_if_needed(&old->type(), *symbolTableForStatement);
             const Variable* clone = symbolTableForStatement->takeOwnershipOfSymbol(
                     std::make_unique<Variable>(offset,
@@ -557,20 +557,9 @@
                                                old->fStorage,
                                                initialValue.get()));
             (*varMap)[old] = std::make_unique<VariableReference>(offset, clone);
-            return std::make_unique<VarDeclaration>(clone, std::move(sizes),
+            return std::make_unique<VarDeclaration>(clone, baseTypePtr, std::move(sizes),
                                                     std::move(initialValue));
         }
-        case Statement::Kind::kVarDeclarations: {
-            const VarDeclarations& decls = *statement.as<VarDeclarationsStatement>().fDeclaration;
-            std::vector<std::unique_ptr<Statement>> vars;
-            vars.reserve(decls.fVars.size());
-            for (const auto& var : decls.fVars) {
-                vars.push_back(stmt(var));
-            }
-            const Type* typePtr = copy_if_needed(&decls.fBaseType, *symbolTableForStatement);
-            return std::unique_ptr<Statement>(new VarDeclarationsStatement(
-                    std::make_unique<VarDeclarations>(offset, typePtr, std::move(vars))));
-        }
         case Statement::Kind::kWhile: {
             const WhileStatement& w = statement.as<WhileStatement>();
             return std::make_unique<WhileStatement>(offset, expr(w.fTest), stmt(w.fStatement));
@@ -646,20 +635,19 @@
 
         // Prepare the variable declaration (taking extra care with `out` params to not clobber any
         // initial value).
-        std::vector<std::unique_ptr<Statement>> variables;
+        std::unique_ptr<Statement> variable;
         if (initialValue && (modifiers.fFlags & Modifiers::kOut_Flag)) {
-            variables.push_back(std::make_unique<VarDeclaration>(
-                    variableSymbol, /*sizes=*/std::vector<std::unique_ptr<Expression>>{},
-                    (*initialValue)->clone()));
+            variable = std::make_unique<VarDeclaration>(
+                    variableSymbol, type, /*sizes=*/std::vector<std::unique_ptr<Expression>>{},
+                    (*initialValue)->clone());
         } else {
-            variables.push_back(std::make_unique<VarDeclaration>(
-                    variableSymbol, /*sizes=*/std::vector<std::unique_ptr<Expression>>{},
-                    std::move(*initialValue)));
+            variable = std::make_unique<VarDeclaration>(
+                    variableSymbol, type, /*sizes=*/std::vector<std::unique_ptr<Expression>>{},
+                    std::move(*initialValue));
         }
 
         // Add the new variable-declaration statement to our block of extra statements.
-        inlinedBody.children().push_back(std::make_unique<VarDeclarationsStatement>(
-                std::make_unique<VarDeclarations>(offset, type, std::move(variables))));
+        inlinedBody.children().push_back(std::move(variable));
 
         return std::make_unique<VariableReference>(offset, variableSymbol);
     };
@@ -943,13 +931,6 @@
                 this->visitExpression(&varDeclStmt.fValue);
                 break;
             }
-            case Statement::Kind::kVarDeclarations: {
-                VarDeclarationsStatement& varDecls = (*stmt)->as<VarDeclarationsStatement>();
-                for (std::unique_ptr<Statement>& varDecl : varDecls.fDeclaration->fVars) {
-                    this->visitStatement(&varDecl, /*isViableAsEnclosingStatement=*/false);
-                }
-                break;
-            }
             case Statement::Kind::kWhile: {
                 WhileStatement& whileStmt = (*stmt)->as<WhileStatement>();
                 // The loop body is a candidate for inlining.
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp
index d510af3..2ef5451 100644
--- a/src/sksl/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/SkSLMetalCodeGenerator.cpp
@@ -951,36 +951,31 @@
                         to_string(fUniformBuffer) + ")]]");
         }
         for (const auto& e : fProgram) {
-            if (e.kind() == ProgramElement::Kind::kVar) {
-                const VarDeclarations& decls = e.as<VarDeclarations>();
-                if (!decls.fVars.size()) {
-                    continue;
-                }
-                for (const auto& stmt: decls.fVars) {
-                    VarDeclaration& var = stmt->as<VarDeclaration>();
-                    if (var.fVar->type().typeKind() == Type::TypeKind::kSampler) {
-                        if (var.fVar->fModifiers.fLayout.fBinding < 0) {
-                            fErrors.error(decls.fOffset,
-                                          "Metal samplers must have 'layout(binding=...)'");
-                            return;
-                        }
-                        if (var.fVar->type().dimensions() != SpvDim2D) {
-                            // TODO: Support other texture types (skbug.com/10797)
-                            fErrors.error(decls.fOffset, "Unsupported texture dimensions");
-                            return;
-                        }
-                        this->write(", texture2d<float> ");
-                        this->writeName(var.fVar->name());
-                        this->write("[[texture(");
-                        this->write(to_string(var.fVar->fModifiers.fLayout.fBinding));
-                        this->write(")]]");
-                        this->write(", sampler ");
-                        this->writeName(var.fVar->name());
-                        this->write(SAMPLER_SUFFIX);
-                        this->write("[[sampler(");
-                        this->write(to_string(var.fVar->fModifiers.fLayout.fBinding));
-                        this->write(")]]");
+            if (e.is<GlobalVarDeclaration>()) {
+                const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+                const VarDeclaration& var = *decls.fDecl;
+                if (var.fVar->type().typeKind() == Type::TypeKind::kSampler) {
+                    if (var.fVar->fModifiers.fLayout.fBinding < 0) {
+                        fErrors.error(decls.fOffset,
+                                        "Metal samplers must have 'layout(binding=...)'");
+                        return;
                     }
+                    if (var.fVar->type().dimensions() != SpvDim2D) {
+                        // TODO: Support other texture types (skbug.com/10797)
+                        fErrors.error(decls.fOffset, "Unsupported texture dimensions");
+                        return;
+                    }
+                    this->write(", texture2d<float> ");
+                    this->writeName(var.fVar->name());
+                    this->write("[[texture(");
+                    this->write(to_string(var.fVar->fModifiers.fLayout.fBinding));
+                    this->write(")]]");
+                    this->write(", sampler ");
+                    this->writeName(var.fVar->name());
+                    this->write(SAMPLER_SUFFIX);
+                    this->write("[[sampler(");
+                    this->write(to_string(var.fVar->fModifiers.fLayout.fBinding));
+                    this->write(")]]");
                 }
             } else if (e.kind() == ProgramElement::Kind::kInterfaceBlock) {
                 InterfaceBlock& intf = (InterfaceBlock&) e;
@@ -1219,38 +1214,26 @@
     this->write(name);
 }
 
-void MetalCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, bool global) {
-    SkASSERT(decl.fVars.size() > 0);
-    bool wroteType = false;
-    for (const auto& stmt : decl.fVars) {
-        VarDeclaration& var = (VarDeclaration&) *stmt;
-        if (global && !(var.fVar->fModifiers.fFlags & Modifiers::kConst_Flag)) {
-            continue;
-        }
-        if (wroteType) {
-            this->write(", ");
-        } else {
-            this->writeModifiers(var.fVar->fModifiers, global);
-            this->writeType(decl.fBaseType);
-            this->write(" ");
-            wroteType = true;
-        }
-        this->writeName(var.fVar->name());
-        for (const auto& size : var.fSizes) {
-            this->write("[");
-            if (size) {
-                this->writeExpression(*size, kTopLevel_Precedence);
-            }
-            this->write("]");
-        }
-        if (var.fValue) {
-            this->write(" = ");
-            this->writeVarInitializer(*var.fVar, *var.fValue);
-        }
+void MetalCodeGenerator::writeVarDeclaration(const VarDeclaration& var, bool global) {
+    if (global && !(var.fVar->fModifiers.fFlags & Modifiers::kConst_Flag)) {
+        return;
     }
-    if (wroteType) {
-        this->write(";");
+    this->writeModifiers(var.fVar->fModifiers, global);
+    this->writeType(var.fBaseType);
+    this->write(" ");
+    this->writeName(var.fVar->name());
+    for (const auto& size : var.fSizes) {
+        this->write("[");
+        if (size) {
+            this->writeExpression(*size, kTopLevel_Precedence);
+        }
+        this->write("]");
     }
+    if (var.fValue) {
+        this->write(" = ");
+        this->writeVarInitializer(*var.fVar, *var.fValue);
+    }
+    this->write(";");
 }
 
 void MetalCodeGenerator::writeStatement(const Statement& s) {
@@ -1265,8 +1248,8 @@
         case Statement::Kind::kReturn:
             this->writeReturnStatement(s.as<ReturnStatement>());
             break;
-        case Statement::Kind::kVarDeclarations:
-            this->writeVarDeclarations(*s.as<VarDeclarationsStatement>().fDeclaration, false);
+        case Statement::Kind::kVarDeclaration:
+            this->writeVarDeclaration(s.as<VarDeclaration>(), false);
             break;
         case Statement::Kind::kIf:
             this->writeIfStatement(s.as<IfStatement>());
@@ -1407,33 +1390,27 @@
 
 void MetalCodeGenerator::writeUniformStruct() {
     for (const auto& e : fProgram) {
-        if (e.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = e.as<VarDeclarations>();
-            if (!decls.fVars.size()) {
-                continue;
-            }
-            const Variable& first = *decls.fVars[0]->as<VarDeclaration>().fVar;
-            if (first.fModifiers.fFlags & Modifiers::kUniform_Flag &&
-                first.type().typeKind() != Type::TypeKind::kSampler) {
+        if (e.is<GlobalVarDeclaration>()) {
+            const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+            const Variable& var = *decls.fDecl->fVar;
+            if (var.fModifiers.fFlags & Modifiers::kUniform_Flag &&
+                var.type().typeKind() != Type::TypeKind::kSampler) {
                 if (-1 == fUniformBuffer) {
                     this->write("struct Uniforms {\n");
-                    fUniformBuffer = first.fModifiers.fLayout.fSet;
+                    fUniformBuffer = var.fModifiers.fLayout.fSet;
                     if (-1 == fUniformBuffer) {
                         fErrors.error(decls.fOffset, "Metal uniforms must have 'layout(set=...)'");
                     }
-                } else if (first.fModifiers.fLayout.fSet != fUniformBuffer) {
+                } else if (var.fModifiers.fLayout.fSet != fUniformBuffer) {
                     if (-1 == fUniformBuffer) {
                         fErrors.error(decls.fOffset, "Metal backend requires all uniforms to have "
                                     "the same 'layout(set=...)'");
                     }
                 }
                 this->write("    ");
-                this->writeType(first.type());
+                this->writeType(var.type());
                 this->write(" ");
-                for (const auto& stmt : decls.fVars) {
-                    const VarDeclaration& var = stmt->as<VarDeclaration>();
-                    this->writeName(var.fVar->name());
-                }
+                this->writeName(var.name());
                 this->write(";\n");
             }
         }
@@ -1446,28 +1423,22 @@
 void MetalCodeGenerator::writeInputStruct() {
     this->write("struct Inputs {\n");
     for (const auto& e : fProgram) {
-        if (e.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = e.as<VarDeclarations>();
-            if (!decls.fVars.size()) {
-                continue;
-            }
-            const Variable& first = *decls.fVars[0]->as<VarDeclaration>().fVar;
-            if (first.fModifiers.fFlags & Modifiers::kIn_Flag &&
-                -1 == first.fModifiers.fLayout.fBuiltin) {
+        if (e.is<GlobalVarDeclaration>()) {
+            const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+            const Variable& var = *decls.fDecl->fVar;
+            if (var.fModifiers.fFlags & Modifiers::kIn_Flag &&
+                -1 == var.fModifiers.fLayout.fBuiltin) {
                 this->write("    ");
-                this->writeType(first.type());
+                this->writeType(var.type());
                 this->write(" ");
-                for (const auto& stmt : decls.fVars) {
-                    const VarDeclaration& var = stmt->as<VarDeclaration>();
-                    this->writeName(var.fVar->name());
-                    if (-1 != var.fVar->fModifiers.fLayout.fLocation) {
-                        if (fProgram.fKind == Program::kVertex_Kind) {
-                            this->write("  [[attribute(" +
-                                        to_string(var.fVar->fModifiers.fLayout.fLocation) + ")]]");
-                        } else if (fProgram.fKind == Program::kFragment_Kind) {
-                            this->write("  [[user(locn" +
-                                        to_string(var.fVar->fModifiers.fLayout.fLocation) + ")]]");
-                        }
+                this->writeName(var.name());
+                if (-1 != var.fModifiers.fLayout.fLocation) {
+                    if (fProgram.fKind == Program::kVertex_Kind) {
+                        this->write("  [[attribute(" +
+                                    to_string(var.fModifiers.fLayout.fLocation) + ")]]");
+                    } else if (fProgram.fKind == Program::kFragment_Kind) {
+                        this->write("  [[user(locn" +
+                                    to_string(var.fModifiers.fLayout.fLocation) + ")]]");
                     }
                 }
                 this->write(";\n");
@@ -1485,32 +1456,26 @@
         this->write("    float4 sk_FragColor [[color(0)]];\n");
     }
     for (const auto& e : fProgram) {
-        if (e.kind() == ProgramElement::Kind::kVar) {
-            const VarDeclarations& decls = e.as<VarDeclarations>();
-            if (!decls.fVars.size()) {
-                continue;
-            }
-            const Variable& first = *decls.fVars[0]->as<VarDeclaration>().fVar;
-            if (first.fModifiers.fFlags & Modifiers::kOut_Flag &&
-                -1 == first.fModifiers.fLayout.fBuiltin) {
+        if (e.is<GlobalVarDeclaration>()) {
+            const GlobalVarDeclaration& decls = e.as<GlobalVarDeclaration>();
+            const Variable& var = *decls.fDecl->fVar;
+            if (var.fModifiers.fFlags & Modifiers::kOut_Flag &&
+                -1 == var.fModifiers.fLayout.fBuiltin) {
                 this->write("    ");
-                this->writeType(first.type());
+                this->writeType(var.type());
                 this->write(" ");
-                for (const auto& stmt : decls.fVars) {
-                    const VarDeclaration& var = stmt->as<VarDeclaration>();
-                    this->writeName(var.fVar->name());
-                    if (fProgram.fKind == Program::kVertex_Kind) {
-                        this->write("  [[user(locn" +
-                                    to_string(var.fVar->fModifiers.fLayout.fLocation) + ")]]");
-                    } else if (fProgram.fKind == Program::kFragment_Kind) {
-                        this->write(" [[color(" +
-                                    to_string(var.fVar->fModifiers.fLayout.fLocation) +")");
-                        int colorIndex = var.fVar->fModifiers.fLayout.fIndex;
-                        if (colorIndex) {
-                            this->write(", index(" + to_string(colorIndex) + ")");
-                        }
-                        this->write("]]");
+                this->writeName(var.name());
+                if (fProgram.fKind == Program::kVertex_Kind) {
+                    this->write("  [[user(locn" +
+                                to_string(var.fModifiers.fLayout.fLocation) + ")]]");
+                } else if (fProgram.fKind == Program::kFragment_Kind) {
+                    this->write(" [[color(" +
+                                to_string(var.fModifiers.fLayout.fLocation) +")");
+                    int colorIndex = var.fModifiers.fLayout.fIndex;
+                    if (colorIndex) {
+                        this->write(", index(" + to_string(colorIndex) + ")");
                     }
+                    this->write("]]");
                 }
                 this->write(";\n");
             }
@@ -1543,27 +1508,21 @@
         visitor->VisitInterfaceBlock(*interfaceType, interfaceName);
     }
     for (const ProgramElement& element : fProgram) {
-        if (element.kind() != ProgramElement::Kind::kVar) {
+        if (!element.is<GlobalVarDeclaration>()) {
             continue;
         }
-        const VarDeclarations& decls = static_cast<const VarDeclarations&>(element);
-        if (decls.fVars.empty()) {
-            continue;
-        }
-        const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar;
-        if ((!first.fModifiers.fFlags && -1 == first.fModifiers.fLayout.fBuiltin) ||
-            first.type().typeKind() == Type::TypeKind::kSampler) {
-            for (const auto& stmt : decls.fVars) {
-                VarDeclaration& var = static_cast<VarDeclaration&>(*stmt);
-
-                if (var.fVar->type().typeKind() == Type::TypeKind::kSampler) {
-                    // Samplers are represented as a "texture/sampler" duo in the global struct.
-                    visitor->VisitTexture(first.type(), var.fVar->name());
-                    visitor->VisitSampler(first.type(), String(var.fVar->name()) + SAMPLER_SUFFIX);
-                } else {
-                    // Visit a regular variable.
-                    visitor->VisitVariable(*var.fVar, var.fValue.get());
-                }
+        const GlobalVarDeclaration& decls = element.as<GlobalVarDeclaration>();
+        const VarDeclaration& decl = *decls.fDecl;
+        const Variable& var = *decl.fVar;
+        if ((!var.fModifiers.fFlags && -1 == var.fModifiers.fLayout.fBuiltin) ||
+            var.type().typeKind() == Type::TypeKind::kSampler) {
+            if (var.type().typeKind() == Type::TypeKind::kSampler) {
+                // Samplers are represented as a "texture/sampler" duo in the global struct.
+                visitor->VisitTexture(var.type(), var.name());
+                visitor->VisitSampler(var.type(), String(var.name()) + SAMPLER_SUFFIX);
+            } else {
+                // Visit a regular variable.
+                visitor->VisitVariable(var, decl.fValue.get());
             }
         }
     }
@@ -1677,17 +1636,15 @@
     switch (e.kind()) {
         case ProgramElement::Kind::kExtension:
             break;
-        case ProgramElement::Kind::kVar: {
-            const VarDeclarations& decl = e.as<VarDeclarations>();
-            if (decl.fVars.size() > 0) {
-                int builtin = decl.fVars[0]->as<VarDeclaration>().fVar->fModifiers.fLayout.fBuiltin;
-                if (-1 == builtin) {
-                    // normal var
-                    this->writeVarDeclarations(decl, true);
-                    this->writeLine();
-                } else if (SK_FRAGCOLOR_BUILTIN == builtin) {
-                    // ignore
-                }
+        case ProgramElement::Kind::kGlobalVar: {
+            const VarDeclaration& decl = *e.as<GlobalVarDeclaration>().fDecl;
+            int builtin = decl.fVar->fModifiers.fLayout.fBuiltin;
+            if (-1 == builtin) {
+                // normal var
+                this->writeVarDeclaration(decl, true);
+                this->writeLine();
+            } else if (SK_FRAGCOLOR_BUILTIN == builtin) {
+                // ignore
             }
             break;
         }
@@ -1797,14 +1754,6 @@
             const VarDeclaration& var = s->as<VarDeclaration>();
             return this->requirements(var.fValue.get());
         }
-        case Statement::Kind::kVarDeclarations: {
-            Requirements result = kNo_Requirements;
-            const VarDeclarations& decls = *s->as<VarDeclarationsStatement>().fDeclaration;
-            for (const auto& stmt : decls.fVars) {
-                result |= this->requirements(stmt.get());
-            }
-            return result;
-        }
         case Statement::Kind::kExpression:
             return this->requirements(s->as<ExpressionStatement>().expression().get());
         case Statement::Kind::kReturn: {
diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h
index 3276f0d..82a489e 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -42,7 +42,6 @@
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
@@ -177,7 +176,7 @@
 
     void writeName(const String& name);
 
-    void writeVarDeclarations(const VarDeclarations& decl, bool global);
+    void writeVarDeclaration(const VarDeclaration& decl, bool global);
 
     void writeFragCoord();
 
diff --git a/src/sksl/SkSLPipelineStageCodeGenerator.cpp b/src/sksl/SkSLPipelineStageCodeGenerator.cpp
index 55876a4..35e2aae 100644
--- a/src/sksl/SkSLPipelineStageCodeGenerator.cpp
+++ b/src/sksl/SkSLPipelineStageCodeGenerator.cpp
@@ -45,15 +45,12 @@
         int index = 0;
         bool found = false;
         for (const auto& p : fProgram) {
-            if (p.kind() == ProgramElement::Kind::kVar) {
-                const VarDeclarations& decls = p.as<VarDeclarations>();
-                for (const std::unique_ptr<Statement>& raw : decls.fVars) {
-                    VarDeclaration& decl = raw->as<VarDeclaration>();
-                    if (decl.fVar == arguments[0]->as<VariableReference>().fVariable) {
-                        found = true;
-                    } else if (decl.fVar->type() == *fContext.fFragmentProcessor_Type) {
-                        ++index;
-                    }
+            if (p.is<GlobalVarDeclaration>()) {
+                const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+                if (decl.fVar == arguments[0]->as<VariableReference>().fVariable) {
+                    found = true;
+                } else if (decl.fVar->type() == *fContext.fFragmentProcessor_Type) {
+                    ++index;
                 }
             }
             if (found) {
@@ -127,17 +124,14 @@
                     if (found) {
                         break;
                     }
-                    if (e.kind() == ProgramElement::Kind::kVar) {
-                        const VarDeclarations& decls = e.as<VarDeclarations>();
-                        for (const auto& decl : decls.fVars) {
-                            const Variable& var = *decl->as<VarDeclaration>().fVar;
-                            if (&var == ref.fVariable) {
-                                found = true;
-                                break;
-                            }
-                            if (var.fModifiers.fFlags & flag) {
-                                ++index;
-                            }
+                    if (e.is<GlobalVarDeclaration>()) {
+                        const Variable& var = *e.as<GlobalVarDeclaration>().fDecl->fVar;
+                        if (&var == ref.fVariable) {
+                            found = true;
+                            break;
+                        }
+                        if (var.fModifiers.fFlags & flag) {
+                            ++index;
                         }
                     }
                 }
@@ -215,15 +209,11 @@
 }
 
 void PipelineStageCodeGenerator::writeProgramElement(const ProgramElement& p) {
-    if (p.kind() == ProgramElement::Kind::kSection) {
+    if (p.is<Section>()) {
         return;
     }
-    if (p.kind() == ProgramElement::Kind::kVar) {
-        const VarDeclarations& decls = p.as<VarDeclarations>();
-        if (!decls.fVars.size()) {
-            return;
-        }
-        const Variable& var = *decls.fVars[0]->as<VarDeclaration>().fVar;
+    if (p.is<GlobalVarDeclaration>()) {
+        const Variable& var = *p.as<GlobalVarDeclaration>().fDecl->fVar;
         if (var.fModifiers.fFlags &
                     (Modifiers::kIn_Flag | Modifiers::kUniform_Flag | Modifiers::kVarying_Flag) ||
             -1 != var.fModifiers.fLayout.fBuiltin) {
diff --git a/src/sksl/SkSLRehydrator.cpp b/src/sksl/SkSLRehydrator.cpp
index 05d69dc..c778bf4 100644
--- a/src/sksl/SkSLRehydrator.cpp
+++ b/src/sksl/SkSLRehydrator.cpp
@@ -47,7 +47,6 @@
 #include "src/sksl/ir/SkSLType.h"
 #include "src/sksl/ir/SkSLUnresolvedFunction.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariable.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
@@ -323,15 +322,9 @@
                                                                       std::move(sizes), nullptr));
         }
         case Rehydrator::kVarDeclarations_Command: {
-            const Type* baseType = this->type();
-            int count = this->readU8();
-            std::vector<std::unique_ptr<Statement>> vars;
-            vars.reserve(count);
-            for (int i = 0 ; i < count; ++i) {
-                vars.push_back(this->statement());
-            }
-            return std::unique_ptr<ProgramElement>(new VarDeclarations(-1, baseType,
-                                                                       std::move(vars)));
+            std::unique_ptr<Statement> decl = this->statement();
+            return std::unique_ptr<ProgramElement>(
+                    new GlobalVarDeclaration(/*offset=*/-1, std::move(decl)));
         }
         default:
             printf("unsupported element %d\n", kind);
@@ -427,6 +420,7 @@
         }
         case Rehydrator::kVarDeclaration_Command: {
             Variable* var = this->symbolRef<Variable>(Symbol::Kind::kVariable);
+            const Type* baseType = this->type();
             uint8_t sizeCount = this->readU8();
             std::vector<std::unique_ptr<Expression>> sizes;
             sizes.reserve(sizeCount);
@@ -439,20 +433,8 @@
                 SkASSERT(var->fWriteCount == 0);
                 ++var->fWriteCount;
             }
-            return std::unique_ptr<Statement>(new VarDeclaration(var,
-                                                                 std::move(sizes),
-                                                                 std::move(value)));
-        }
-        case Rehydrator::kVarDeclarations_Command: {
-            const Type* baseType = this->type();
-            int count = this->readU8();
-            std::vector<std::unique_ptr<Statement>> vars;
-            vars.reserve(count);
-            for (int i = 0 ; i < count; ++i) {
-                vars.push_back(this->statement());
-            }
-            return std::make_unique<VarDeclarationsStatement>(
-                    std::make_unique<VarDeclarations>(-1, baseType, std::move(vars)));
+            return std::unique_ptr<Statement>(
+                    new VarDeclaration(var, baseType, std::move(sizes), std::move(value)));
         }
         case Rehydrator::kVoid_Command:
             return nullptr;
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp
index b3c1bf5..05cbea6 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp
@@ -2772,101 +2772,91 @@
 }
 
 #define BUILTIN_IGNORE 9999
-void SPIRVCodeGenerator::writeGlobalVars(Program::Kind kind, const VarDeclarations& decl,
-                                         OutputStream& out) {
-    for (size_t i = 0; i < decl.fVars.size(); i++) {
-        if (decl.fVars[i]->kind() == Statement::Kind::kNop) {
-            continue;
-        }
-        const VarDeclaration& varDecl = (VarDeclaration&) *decl.fVars[i];
-        const Variable* var = varDecl.fVar;
-        // These haven't been implemented in our SPIR-V generator yet and we only currently use them
-        // in the OpenGL backend.
-        SkASSERT(!(var->fModifiers.fFlags & (Modifiers::kReadOnly_Flag |
-                                             Modifiers::kWriteOnly_Flag |
-                                             Modifiers::kCoherent_Flag |
-                                             Modifiers::kVolatile_Flag |
-                                             Modifiers::kRestrict_Flag)));
-        if (var->fModifiers.fLayout.fBuiltin == BUILTIN_IGNORE) {
-            continue;
-        }
-        if (var->fModifiers.fLayout.fBuiltin == SK_FRAGCOLOR_BUILTIN &&
-            kind != Program::kFragment_Kind) {
-            SkASSERT(!fProgram.fSettings.fFragColorIsInOut);
-            continue;
-        }
-        if (is_dead(*var)) {
-            continue;
-        }
-        const Type& type = var->type();
-        SpvStorageClass_ storageClass;
-        if (var->fModifiers.fFlags & Modifiers::kIn_Flag) {
-            storageClass = SpvStorageClassInput;
-        } else if (var->fModifiers.fFlags & Modifiers::kOut_Flag) {
-            storageClass = SpvStorageClassOutput;
-        } else if (var->fModifiers.fFlags & Modifiers::kUniform_Flag) {
-            if (type.typeKind() == Type::TypeKind::kSampler ||
-                type.typeKind() == Type::TypeKind::kSeparateSampler ||
-                type.typeKind() == Type::TypeKind::kTexture) {
-                storageClass = SpvStorageClassUniformConstant;
-            } else {
-                storageClass = SpvStorageClassUniform;
-            }
+void SPIRVCodeGenerator::writeGlobalVar(Program::Kind kind, const VarDeclaration& varDecl,
+                                        OutputStream& out) {
+    const Variable* var = varDecl.fVar;
+    // These haven't been implemented in our SPIR-V generator yet and we only currently use them
+    // in the OpenGL backend.
+    SkASSERT(!(var->fModifiers.fFlags & (Modifiers::kReadOnly_Flag |
+                                         Modifiers::kWriteOnly_Flag |
+                                         Modifiers::kCoherent_Flag |
+                                         Modifiers::kVolatile_Flag |
+                                         Modifiers::kRestrict_Flag)));
+    if (var->fModifiers.fLayout.fBuiltin == BUILTIN_IGNORE) {
+        return;
+    }
+    if (var->fModifiers.fLayout.fBuiltin == SK_FRAGCOLOR_BUILTIN &&
+        kind != Program::kFragment_Kind) {
+        SkASSERT(!fProgram.fSettings.fFragColorIsInOut);
+        return;
+    }
+    if (is_dead(*var)) {
+        return;
+    }
+    const Type& type = var->type();
+    SpvStorageClass_ storageClass;
+    if (var->fModifiers.fFlags & Modifiers::kIn_Flag) {
+        storageClass = SpvStorageClassInput;
+    } else if (var->fModifiers.fFlags & Modifiers::kOut_Flag) {
+        storageClass = SpvStorageClassOutput;
+    } else if (var->fModifiers.fFlags & Modifiers::kUniform_Flag) {
+        if (type.typeKind() == Type::TypeKind::kSampler ||
+            type.typeKind() == Type::TypeKind::kSeparateSampler ||
+            type.typeKind() == Type::TypeKind::kTexture) {
+            storageClass = SpvStorageClassUniformConstant;
         } else {
-            storageClass = SpvStorageClassPrivate;
+            storageClass = SpvStorageClassUniform;
         }
-        SpvId id = this->nextId();
-        fVariableMap[var] = id;
-        SpvId typeId;
-        if (var->fModifiers.fLayout.fBuiltin == SK_IN_BUILTIN) {
-            typeId = this->getPointerType(Type("sk_in", Type::TypeKind::kArray,
-                                             type.componentType(), fSkInCount),
-                                        storageClass);
-        } else {
-            typeId = this->getPointerType(type, storageClass);
-        }
-        this->writeInstruction(SpvOpVariable, typeId, id, storageClass, fConstantBuffer);
-        this->writeInstruction(SpvOpName, id, var->name(), fNameBuffer);
-        this->writePrecisionModifier(type, id);
-        if (varDecl.fValue) {
-            SkASSERT(!fCurrentBlock);
-            fCurrentBlock = -1;
-            SpvId value = this->writeExpression(*varDecl.fValue, fGlobalInitializersBuffer);
-            this->writeInstruction(SpvOpStore, id, value, fGlobalInitializersBuffer);
-            fCurrentBlock = 0;
-        }
-        this->writeLayout(var->fModifiers.fLayout, id);
-        if (var->fModifiers.fFlags & Modifiers::kFlat_Flag) {
-            this->writeInstruction(SpvOpDecorate, id, SpvDecorationFlat, fDecorationBuffer);
-        }
-        if (var->fModifiers.fFlags & Modifiers::kNoPerspective_Flag) {
-            this->writeInstruction(SpvOpDecorate, id, SpvDecorationNoPerspective,
-                                   fDecorationBuffer);
-        }
+    } else {
+        storageClass = SpvStorageClassPrivate;
+    }
+    SpvId id = this->nextId();
+    fVariableMap[var] = id;
+    SpvId typeId;
+    if (var->fModifiers.fLayout.fBuiltin == SK_IN_BUILTIN) {
+        typeId = this->getPointerType(
+                Type("sk_in", Type::TypeKind::kArray, type.componentType(), fSkInCount),
+                storageClass);
+    } else {
+        typeId = this->getPointerType(type, storageClass);
+    }
+    this->writeInstruction(SpvOpVariable, typeId, id, storageClass, fConstantBuffer);
+    this->writeInstruction(SpvOpName, id, var->name(), fNameBuffer);
+    this->writePrecisionModifier(type, id);
+    if (varDecl.fValue) {
+        SkASSERT(!fCurrentBlock);
+        fCurrentBlock = -1;
+        SpvId value = this->writeExpression(*varDecl.fValue, fGlobalInitializersBuffer);
+        this->writeInstruction(SpvOpStore, id, value, fGlobalInitializersBuffer);
+        fCurrentBlock = 0;
+    }
+    this->writeLayout(var->fModifiers.fLayout, id);
+    if (var->fModifiers.fFlags & Modifiers::kFlat_Flag) {
+        this->writeInstruction(SpvOpDecorate, id, SpvDecorationFlat, fDecorationBuffer);
+    }
+    if (var->fModifiers.fFlags & Modifiers::kNoPerspective_Flag) {
+        this->writeInstruction(SpvOpDecorate, id, SpvDecorationNoPerspective,
+                                fDecorationBuffer);
     }
 }
 
-void SPIRVCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, OutputStream& out) {
-    for (const auto& stmt : decl.fVars) {
-        SkASSERT(stmt->kind() == Statement::Kind::kVarDeclaration);
-        VarDeclaration& varDecl = (VarDeclaration&) *stmt;
-        const Variable* var = varDecl.fVar;
-        // These haven't been implemented in our SPIR-V generator yet and we only currently use them
-        // in the OpenGL backend.
-        SkASSERT(!(var->fModifiers.fFlags & (Modifiers::kReadOnly_Flag |
-                                           Modifiers::kWriteOnly_Flag |
-                                           Modifiers::kCoherent_Flag |
-                                           Modifiers::kVolatile_Flag |
-                                           Modifiers::kRestrict_Flag)));
-        SpvId id = this->nextId();
-        fVariableMap[var] = id;
-        SpvId type = this->getPointerType(var->type(), SpvStorageClassFunction);
-        this->writeInstruction(SpvOpVariable, type, id, SpvStorageClassFunction, fVariableBuffer);
-        this->writeInstruction(SpvOpName, id, var->name(), fNameBuffer);
-        if (varDecl.fValue) {
-            SpvId value = this->writeExpression(*varDecl.fValue, out);
-            this->writeInstruction(SpvOpStore, id, value, out);
-        }
+void SPIRVCodeGenerator::writeVarDeclaration(const VarDeclaration& varDecl, OutputStream& out) {
+    const Variable* var = varDecl.fVar;
+    // These haven't been implemented in our SPIR-V generator yet and we only currently use them
+    // in the OpenGL backend.
+    SkASSERT(!(var->fModifiers.fFlags & (Modifiers::kReadOnly_Flag |
+                                        Modifiers::kWriteOnly_Flag |
+                                        Modifiers::kCoherent_Flag |
+                                        Modifiers::kVolatile_Flag |
+                                        Modifiers::kRestrict_Flag)));
+    SpvId id = this->nextId();
+    fVariableMap[var] = id;
+    SpvId type = this->getPointerType(var->type(), SpvStorageClassFunction);
+    this->writeInstruction(SpvOpVariable, type, id, SpvStorageClassFunction, fVariableBuffer);
+    this->writeInstruction(SpvOpName, id, var->name(), fNameBuffer);
+    if (varDecl.fValue) {
+        SpvId value = this->writeExpression(*varDecl.fValue, out);
+        this->writeInstruction(SpvOpStore, id, value, out);
     }
 }
 
@@ -2884,8 +2874,8 @@
         case Statement::Kind::kReturn:
             this->writeReturnStatement(s.as<ReturnStatement>(), out);
             break;
-        case Statement::Kind::kVarDeclarations:
-            this->writeVarDeclarations(*s.as<VarDeclarationsStatement>().fDeclaration, out);
+        case Statement::Kind::kVarDeclaration:
+            this->writeVarDeclaration(s.as<VarDeclaration>(), out);
             break;
         case Statement::Kind::kIf:
             this->writeIfStatement(s.as<IfStatement>(), out);
@@ -3216,8 +3206,8 @@
         }
     }
     for (const auto& e : program) {
-        if (e.kind() == ProgramElement::Kind::kVar) {
-            this->writeGlobalVars(program.fKind, ((VarDeclarations&) e), body);
+        if (e.is<GlobalVarDeclaration>()) {
+            this->writeGlobalVar(program.fKind, *e.as<GlobalVarDeclaration>().fDecl, body);
         }
     }
     for (const auto& e : program) {
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.h b/src/sksl/SkSLSPIRVCodeGenerator.h
index 580a74f..2bc8b32 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.h
+++ b/src/sksl/SkSLSPIRVCodeGenerator.h
@@ -38,7 +38,6 @@
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
 #include "src/sksl/ir/SkSLVarDeclarations.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariableReference.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 #include "src/sksl/spirv.h"
@@ -189,9 +188,9 @@
 
     SpvId writeFunction(const FunctionDefinition& f, OutputStream& out);
 
-    void writeGlobalVars(Program::Kind kind, const VarDeclarations& v, OutputStream& out);
+    void writeGlobalVar(Program::Kind kind, const VarDeclaration& v, OutputStream& out);
 
-    void writeVarDeclarations(const VarDeclarations& decl, OutputStream& out);
+    void writeVarDeclaration(const VarDeclaration& var, OutputStream& out);
 
     SpvId writeVariableReference(const VariableReference& ref, OutputStream& out);
 
diff --git a/src/sksl/SkSLSampleUsage.cpp b/src/sksl/SkSLSampleUsage.cpp
index c545ce3..87d5790 100644
--- a/src/sksl/SkSLSampleUsage.cpp
+++ b/src/sksl/SkSLSampleUsage.cpp
@@ -24,7 +24,6 @@
 #include "src/sksl/ir/SkSLSwitchStatement.h"
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLVariable.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
diff --git a/src/sksl/SkSLSectionAndParameterHelper.cpp b/src/sksl/SkSLSectionAndParameterHelper.cpp
index ee13e63..0116c9c 100644
--- a/src/sksl/SkSLSectionAndParameterHelper.cpp
+++ b/src/sksl/SkSLSectionAndParameterHelper.cpp
@@ -21,7 +21,6 @@
 #include "src/sksl/ir/SkSLSwitchStatement.h"
 #include "src/sksl/ir/SkSLSwizzle.h"
 #include "src/sksl/ir/SkSLTernaryExpression.h"
-#include "src/sksl/ir/SkSLVarDeclarationsStatement.h"
 #include "src/sksl/ir/SkSLWhileStatement.h"
 
 namespace SkSL {
@@ -30,13 +29,10 @@
     : fProgram(*program) {
     for (const auto& p : fProgram) {
         switch (p.kind()) {
-            case ProgramElement::Kind::kVar: {
-                const VarDeclarations& decls = (const VarDeclarations&) p;
-                for (const auto& raw : decls.fVars) {
-                    const VarDeclaration& decl = (VarDeclaration&) *raw;
-                    if (IsParameter(*decl.fVar)) {
-                        fParameters.push_back(decl.fVar);
-                    }
+            case ProgramElement::Kind::kGlobalVar: {
+                const VarDeclaration& decl = *p.as<GlobalVarDeclaration>().fDecl;
+                if (IsParameter(*decl.fVar)) {
+                    fParameters.push_back(decl.fVar);
                 }
                 break;
             }
diff --git a/src/sksl/generated/sksl_fp.dehydrated.sksl b/src/sksl/generated/sksl_fp.dehydrated.sksl
index 5e08e78..676fea1 100644
--- a/src/sksl/generated/sksl_fp.dehydrated.sksl
+++ b/src/sksl/generated/sksl_fp.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_fp_LENGTH = 1594;
-static uint8_t SKSL_INCLUDE_sksl_fp[1594] = {98,1,14,71,114,67,108,105,112,69,100,103,101,84,121,112,101,12,80,77,67,111,110,118,101,114,115,105,111,110,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,3,105,110,116,13,115,107,95,83,97,109,112,108,101,77,97,115,107,15,103,108,95,76,97,115,116,70,114,97,103,68,97,116,97,16,103,108,95,76,97,115,116,70,114,97,103,67,111,108,111,114,5,104,97,108,102,52,19,103,108,95,76,97,115,116,70,114,97,103,67,111,108,111,114,65,82,77,24,103,108,95,83,101,99,111,110,100,97,114,121,70,114,97,103,67,111,108,111,114,69,88,84,11,115,107,95,79,117,116,67,111,108,111,114,8,115,107,95,87,105,100,116,104,4,104,97,108,102,9,115,107,95,72,101,105,103,104,116,2,102,112,17,102,114,97,103,109,101,110,116,80,114,111,99,101,115,115,111,114,6,115,97,109,112,108,101,9,116,114,97,110,115,102,111,114,109,8,102,108,111,97,116,51,120,51,6,99,111,111,114,100,115,6,102,108,111,97,116,50,5,105,110,112,117,116,9,116,114,97,110,115,102,114,111,109,7,107,70,105,108,108,66,87,7,107,70,105,108,108,65,65,14,107,73,110,118,101,114,115,101,70,105,108,108,66,87,14,107,73,110,118,101,114,115,101,70,105,108,108,65,65,5,107,76,97,115,116,9,107,84,111,80,114,101,109,117,108,11,107,84,111,85,110,112,114,101,109,117,108,16,107,80,77,67,111,110,118,101,114,115,105,111,110,67,110,116,42,68,0,14,1,0,2,0,14,2,0,17,0,46,3,0,29,5,15,0,2,30,0,43,4,0,43,0,0,0,5,0,43,6,0,50,0,1,46,7,0,29,5,20,0,4,54,0,40,5,0,0,0,8,0,40,4,0,1,46,9,0,29,5,15,39,0,68,0,40,8,0,0,46,10,0,29,5,15,39,0,84,0,43,11,0,101,0,0,46,12,0,29,5,15,39,0,107,0,40,11,0,0,46,13,0,29,5,15,39,0,127,0,40,11,0,0,46,14,0,29,5,20,39,4,152,0,40,11,0,0,46,15,0,29,5,27,39,0,164,0,43,16,0,173,0,0,46,17,0,29,5,28,39,0,178,0,40,16,0,0,46,18,0,9,188,0,43,19,0,191,0,3,22,20,0,9,209,0,1,18,0,40,11,0,46,21,0,9,188,0,40,19,0,3,46,22,0,9,216,0,43,23,0,226,0,3,45,24,0,2,40,20,0,22,25,0,9,209,0,2,21,0,22,0,40,11,0,40,25,0,46,26,0,9,188,0,40,19,0,3,46,27,0,9,235,0,43,28,0,242,0,3,45,29,0,3,40,20,0,40,25,0,22,30,0,9,209,0,2,26,0,27,0,40,11,0,40,30,0,46,31,0,9,188,0,40,19,0,3,46,32,0,9,249,0,40,11,0,3,45,33,0,4,40,20,0,40,25,0,40,30,0,22,34,0,9,209,0,2,31,0,32,0,40,11,0,40,34,0,46,35,0,9,188,0,40,19,0,3,46,36,0,9,249,0,40,11,0,3,46,37,0,9,216,0,40,23,0,3,45,38,0,5,40,20,0,40,25,0,40,30,0,40,34,0,22,39,0,9,209,0,3,35,0,36,0,37,0,40,11,0,40,39,0,46,40,0,9,188,0,40,19,0,3,46,41,0,9,249,0,40,11,0,3,46,42,0,9,235,0,40,28,0,3,45,43,0,6,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,22,44,0,9,209,0,3,40,0,41,0,42,0,40,11,0,40,44,0,31,45,0,40,19,0,46,46,0,9,188,0,40,45,0,3,45,47,0,7,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,22,48,0,9,209,0,1,46,0,40,11,0,40,48,0,31,49,0,40,19,0,46,50,0,9,188,0,40,49,0,3,46,51,0,9,216,0,40,23,0,3,45,52,0,8,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,22,53,0,9,209,0,2,50,0,51,0,40,11,0,40,53,0,31,54,0,40,19,0,46,55,0,9,188,0,40,54,0,3,46,56,0,9,235,0,40,28,0,3,45,57,0,9,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,22,58,0,9,209,0,2,55,0,56,0,40,11,0,40,58,0,31,59,0,40,19,0,46,60,0,9,188,0,40,59,0,3,46,61,0,9,249,0,40,11,0,3,45,62,0,10,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,22,63,0,9,209,0,2,60,0,61,0,40,11,0,40,63,0,31,64,0,40,19,0,46,65,0,9,188,0,40,64,0,3,46,66,0,9,249,0,40,11,0,3,46,67,0,9,255,0,40,23,0,3,45,68,0,11,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,40,63,0,22,69,0,9,209,0,3,65,0,66,0,67,0,40,11,0,40,69,0,31,70,0,40,19,0,46,71,0,9,188,0,40,70,0,3,46,72,0,9,249,0,40,11,0,3,46,73,0,9,235,0,40,28,0,3,45,74,0,12,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,40,63,0,40,69,0,22,75,0,9,209,0,3,71,0,72,0,73,0,40,11,0,40,75,0,12,0,2,0,0,0,17,0,1,0,84,0,7,0,107,0,8,0,68,0,6,0,127,0,9,0,209,0,66,0,30,0,2,0,178,0,12,0,152,0,10,0,54,0,4,0,164,0,11,0,12,11,13,2,0,42,5,0,46,76,0,29,8,1,9,1,40,1,0,0,46,77,0,29,8,1,17,1,40,1,0,0,46,78,0,29,8,1,25,1,40,1,0,0,46,79,0,29,8,1,40,1,40,1,0,0,46,80,0,29,8,1,55,1,40,1,0,0,5,0,17,1,1,0,9,1,0,0,40,1,3,0,25,1,2,0,55,1,4,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,13,17,0,42,3,0,46,81,0,29,8,1,61,1,40,2,0,0,46,82,0,29,8,1,71,1,40,2,0,0,46,83,0,29,8,1,83,1,40,2,0,0,3,0,83,1,2,0,61,1,0,0,71,1,1,0,0,0,0,0,1,0,0,0,2,0,0,0,48,40,4,0,1,47,3,0,0,50,48,40,6,0,1,47,7,0,1,27,1,0,0,0,50,48,40,4,0,1,47,9,0,1,27,1,0,0,0,50,48,40,11,0,1,47,10,0,0,50,48,40,11,0,1,47,12,0,0,50,48,40,11,0,1,47,13,0,0,50,48,40,11,0,1,47,14,0,0,50,48,40,16,0,1,47,15,0,0,50,48,40,16,0,1,47,17,0,0,50,};
+static constexpr size_t SKSL_INCLUDE_sksl_fp_LENGTH = 1585;
+static uint8_t SKSL_INCLUDE_sksl_fp[1585] = {98,1,14,71,114,67,108,105,112,69,100,103,101,84,121,112,101,12,80,77,67,111,110,118,101,114,115,105,111,110,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,3,105,110,116,13,115,107,95,83,97,109,112,108,101,77,97,115,107,15,103,108,95,76,97,115,116,70,114,97,103,68,97,116,97,16,103,108,95,76,97,115,116,70,114,97,103,67,111,108,111,114,5,104,97,108,102,52,19,103,108,95,76,97,115,116,70,114,97,103,67,111,108,111,114,65,82,77,24,103,108,95,83,101,99,111,110,100,97,114,121,70,114,97,103,67,111,108,111,114,69,88,84,11,115,107,95,79,117,116,67,111,108,111,114,8,115,107,95,87,105,100,116,104,4,104,97,108,102,9,115,107,95,72,101,105,103,104,116,2,102,112,17,102,114,97,103,109,101,110,116,80,114,111,99,101,115,115,111,114,6,115,97,109,112,108,101,9,116,114,97,110,115,102,111,114,109,8,102,108,111,97,116,51,120,51,6,99,111,111,114,100,115,6,102,108,111,97,116,50,5,105,110,112,117,116,9,116,114,97,110,115,102,114,111,109,7,107,70,105,108,108,66,87,7,107,70,105,108,108,65,65,14,107,73,110,118,101,114,115,101,70,105,108,108,66,87,14,107,73,110,118,101,114,115,101,70,105,108,108,65,65,5,107,76,97,115,116,9,107,84,111,80,114,101,109,117,108,11,107,84,111,85,110,112,114,101,109,117,108,16,107,80,77,67,111,110,118,101,114,115,105,111,110,67,110,116,42,68,0,14,1,0,2,0,14,2,0,17,0,46,3,0,29,5,15,0,2,30,0,43,4,0,43,0,0,0,5,0,43,6,0,50,0,1,46,7,0,29,5,20,0,4,54,0,40,5,0,0,0,8,0,40,4,0,1,46,9,0,29,5,15,39,0,68,0,40,8,0,0,46,10,0,29,5,15,39,0,84,0,43,11,0,101,0,0,46,12,0,29,5,15,39,0,107,0,40,11,0,0,46,13,0,29,5,15,39,0,127,0,40,11,0,0,46,14,0,29,5,20,39,4,152,0,40,11,0,0,46,15,0,29,5,27,39,0,164,0,43,16,0,173,0,0,46,17,0,29,5,28,39,0,178,0,40,16,0,0,46,18,0,9,188,0,43,19,0,191,0,3,22,20,0,9,209,0,1,18,0,40,11,0,46,21,0,9,188,0,40,19,0,3,46,22,0,9,216,0,43,23,0,226,0,3,45,24,0,2,40,20,0,22,25,0,9,209,0,2,21,0,22,0,40,11,0,40,25,0,46,26,0,9,188,0,40,19,0,3,46,27,0,9,235,0,43,28,0,242,0,3,45,29,0,3,40,20,0,40,25,0,22,30,0,9,209,0,2,26,0,27,0,40,11,0,40,30,0,46,31,0,9,188,0,40,19,0,3,46,32,0,9,249,0,40,11,0,3,45,33,0,4,40,20,0,40,25,0,40,30,0,22,34,0,9,209,0,2,31,0,32,0,40,11,0,40,34,0,46,35,0,9,188,0,40,19,0,3,46,36,0,9,249,0,40,11,0,3,46,37,0,9,216,0,40,23,0,3,45,38,0,5,40,20,0,40,25,0,40,30,0,40,34,0,22,39,0,9,209,0,3,35,0,36,0,37,0,40,11,0,40,39,0,46,40,0,9,188,0,40,19,0,3,46,41,0,9,249,0,40,11,0,3,46,42,0,9,235,0,40,28,0,3,45,43,0,6,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,22,44,0,9,209,0,3,40,0,41,0,42,0,40,11,0,40,44,0,31,45,0,40,19,0,46,46,0,9,188,0,40,45,0,3,45,47,0,7,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,22,48,0,9,209,0,1,46,0,40,11,0,40,48,0,31,49,0,40,19,0,46,50,0,9,188,0,40,49,0,3,46,51,0,9,216,0,40,23,0,3,45,52,0,8,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,22,53,0,9,209,0,2,50,0,51,0,40,11,0,40,53,0,31,54,0,40,19,0,46,55,0,9,188,0,40,54,0,3,46,56,0,9,235,0,40,28,0,3,45,57,0,9,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,22,58,0,9,209,0,2,55,0,56,0,40,11,0,40,58,0,31,59,0,40,19,0,46,60,0,9,188,0,40,59,0,3,46,61,0,9,249,0,40,11,0,3,45,62,0,10,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,22,63,0,9,209,0,2,60,0,61,0,40,11,0,40,63,0,31,64,0,40,19,0,46,65,0,9,188,0,40,64,0,3,46,66,0,9,249,0,40,11,0,3,46,67,0,9,255,0,40,23,0,3,45,68,0,11,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,40,63,0,22,69,0,9,209,0,3,65,0,66,0,67,0,40,11,0,40,69,0,31,70,0,40,19,0,46,71,0,9,188,0,40,70,0,3,46,72,0,9,249,0,40,11,0,3,46,73,0,9,235,0,40,28,0,3,45,74,0,12,40,20,0,40,25,0,40,30,0,40,34,0,40,39,0,40,44,0,40,48,0,40,53,0,40,58,0,40,63,0,40,69,0,22,75,0,9,209,0,3,71,0,72,0,73,0,40,11,0,40,75,0,12,0,2,0,0,0,17,0,1,0,84,0,7,0,107,0,8,0,68,0,6,0,127,0,9,0,209,0,66,0,30,0,2,0,178,0,12,0,152,0,10,0,54,0,4,0,164,0,11,0,12,11,13,2,0,42,5,0,46,76,0,29,8,1,9,1,40,1,0,0,46,77,0,29,8,1,17,1,40,1,0,0,46,78,0,29,8,1,25,1,40,1,0,0,46,79,0,29,8,1,40,1,40,1,0,0,46,80,0,29,8,1,55,1,40,1,0,0,5,0,17,1,1,0,9,1,0,0,40,1,3,0,25,1,2,0,55,1,4,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,13,17,0,42,3,0,46,81,0,29,8,1,61,1,40,2,0,0,46,82,0,29,8,1,71,1,40,2,0,0,46,83,0,29,8,1,83,1,40,2,0,0,3,0,83,1,2,0,61,1,0,0,71,1,1,0,0,0,0,0,1,0,0,0,2,0,0,0,48,47,3,0,40,4,0,0,50,48,47,7,0,40,6,0,1,27,1,0,0,0,50,48,47,9,0,40,4,0,1,27,1,0,0,0,50,48,47,10,0,40,11,0,0,50,48,47,12,0,40,11,0,0,50,48,47,13,0,40,11,0,0,50,48,47,14,0,40,11,0,0,50,48,47,15,0,40,16,0,0,50,48,47,17,0,40,16,0,0,50,};
diff --git a/src/sksl/generated/sksl_frag.dehydrated.sksl b/src/sksl/generated/sksl_frag.dehydrated.sksl
index 5c78a50..c351969 100644
--- a/src/sksl/generated/sksl_frag.dehydrated.sksl
+++ b/src/sksl/generated/sksl_frag.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_frag_LENGTH = 417;
-static uint8_t SKSL_INCLUDE_sksl_frag[417] = {142,0,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,12,115,107,95,67,108,111,99,107,119,105,115,101,4,98,111,111,108,3,105,110,116,13,115,107,95,83,97,109,112,108,101,77,97,115,107,24,103,108,95,83,101,99,111,110,100,97,114,121,70,114,97,103,67,111,108,111,114,69,88,84,5,104,97,108,102,52,0,12,115,107,95,70,114,97,103,67,111,108,111,114,16,115,107,95,76,97,115,116,70,114,97,103,67,111,108,111,114,8,115,107,95,87,105,100,116,104,4,104,97,108,102,9,115,107,95,72,101,105,103,104,116,42,9,0,46,1,0,29,5,15,0,2,2,0,43,2,0,15,0,0,46,3,0,29,5,17,0,2,22,0,43,4,0,35,0,0,0,5,0,43,6,0,40,0,1,46,7,0,29,5,20,0,4,44,0,40,5,0,0,46,8,0,29,5,15,39,4,58,0,43,9,0,83,0,0,46,10,0,29,28,0,0,0,0,0,255,255,0,255,17,39,255,255,255,255,255,89,0,89,0,0,0,4,90,0,40,9,0,0,46,11,0,29,5,24,39,0,103,0,40,9,0,0,46,12,0,29,5,27,39,0,120,0,43,13,0,129,0,0,46,14,0,29,5,28,39,0,134,0,40,13,0,0,8,0,58,0,4,0,22,0,1,0,90,0,5,0,2,0,0,0,134,0,8,0,103,0,6,0,44,0,3,0,120,0,7,0,12,8,48,40,2,0,1,47,1,0,0,50,48,40,4,0,1,47,3,0,0,50,48,40,6,0,1,47,7,0,1,27,1,0,0,0,50,48,40,9,0,1,47,8,0,0,50,48,40,9,0,1,47,10,0,0,50,48,40,9,0,1,47,11,0,0,50,48,40,13,0,1,47,12,0,0,50,48,40,13,0,1,47,14,0,0,50,};
+static constexpr size_t SKSL_INCLUDE_sksl_frag_LENGTH = 409;
+static uint8_t SKSL_INCLUDE_sksl_frag[409] = {142,0,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,12,115,107,95,67,108,111,99,107,119,105,115,101,4,98,111,111,108,3,105,110,116,13,115,107,95,83,97,109,112,108,101,77,97,115,107,24,103,108,95,83,101,99,111,110,100,97,114,121,70,114,97,103,67,111,108,111,114,69,88,84,5,104,97,108,102,52,0,12,115,107,95,70,114,97,103,67,111,108,111,114,16,115,107,95,76,97,115,116,70,114,97,103,67,111,108,111,114,8,115,107,95,87,105,100,116,104,4,104,97,108,102,9,115,107,95,72,101,105,103,104,116,42,9,0,46,1,0,29,5,15,0,2,2,0,43,2,0,15,0,0,46,3,0,29,5,17,0,2,22,0,43,4,0,35,0,0,0,5,0,43,6,0,40,0,1,46,7,0,29,5,20,0,4,44,0,40,5,0,0,46,8,0,29,5,15,39,4,58,0,43,9,0,83,0,0,46,10,0,29,28,0,0,0,0,0,255,255,0,255,17,39,255,255,255,255,255,89,0,89,0,0,0,4,90,0,40,9,0,0,46,11,0,29,5,24,39,0,103,0,40,9,0,0,46,12,0,29,5,27,39,0,120,0,43,13,0,129,0,0,46,14,0,29,5,28,39,0,134,0,40,13,0,0,8,0,58,0,4,0,22,0,1,0,90,0,5,0,2,0,0,0,134,0,8,0,103,0,6,0,44,0,3,0,120,0,7,0,12,8,48,47,1,0,40,2,0,0,50,48,47,3,0,40,4,0,0,50,48,47,7,0,40,6,0,1,27,1,0,0,0,50,48,47,8,0,40,9,0,0,50,48,47,10,0,40,9,0,0,50,48,47,11,0,40,9,0,0,50,48,47,12,0,40,13,0,0,50,48,47,14,0,40,13,0,0,50,};
diff --git a/src/sksl/generated/sksl_geom.dehydrated.sksl b/src/sksl/generated/sksl_geom.dehydrated.sksl
index 9456216..b3c2756 100644
--- a/src/sksl/generated/sksl_geom.dehydrated.sksl
+++ b/src/sksl/generated/sksl_geom.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_geom_LENGTH = 418;
-static uint8_t SKSL_INCLUDE_sksl_geom[418] = {150,0,12,115,107,95,80,101,114,86,101,114,116,101,120,11,115,107,95,80,111,115,105,116,105,111,110,6,102,108,111,97,116,52,12,115,107,95,80,111,105,110,116,83,105,122,101,5,102,108,111,97,116,5,115,107,95,105,110,15,115,107,95,73,110,118,111,99,97,116,105,111,110,73,68,3,105,110,116,6,115,116,114,101,97,109,16,69,109,105,116,83,116,114,101,97,109,86,101,114,116,101,120,4,118,111,105,100,18,69,110,100,83,116,114,101,97,109,80,114,105,109,105,116,105,118,101,10,69,109,105,116,86,101,114,116,101,120,12,69,110,100,80,114,105,109,105,116,105,118,101,0,42,13,0,37,1,0,2,0,2,29,5,0,0,0,15,0,43,2,0,27,0,29,5,1,0,0,34,0,43,3,0,47,0,46,4,0,29,5,18,39,2,53,0,0,5,0,40,1,0,255,0,37,6,0,2,0,2,29,5,0,0,0,15,0,40,2,0,29,5,1,0,0,34,0,40,3,0,46,7,0,29,5,23,39,4,2,0,40,6,0,0,16,7,0,0,16,7,0,1,46,8,0,29,5,8,0,2,59,0,43,9,0,75,0,0,46,10,0,9,79,0,40,9,0,3,22,11,0,30,8,0,16,0,0,86,0,1,10,0,43,12,0,103,0,46,13,0,9,79,0,40,9,0,3,22,14,0,30,8,0,16,0,0,108,0,1,13,0,40,12,0,22,15,0,30,8,0,16,0,0,127,0,0,40,12,0,22,16,0,30,8,0,16,0,0,138,0,0,40,12,0,8,0,86,0,8,0,127,0,11,0,138,0,12,0,108,0,10,0,59,0,6,0,34,0,5,0,15,0,4,0,53,0,1,0,12,3,26,40,4,0,2,0,53,0,1,50,26,40,7,0,2,0,151,0,0,48,40,9,0,1,47,8,0,0,50,};
+static constexpr size_t SKSL_INCLUDE_sksl_geom_LENGTH = 417;
+static uint8_t SKSL_INCLUDE_sksl_geom[417] = {150,0,12,115,107,95,80,101,114,86,101,114,116,101,120,11,115,107,95,80,111,115,105,116,105,111,110,6,102,108,111,97,116,52,12,115,107,95,80,111,105,110,116,83,105,122,101,5,102,108,111,97,116,5,115,107,95,105,110,15,115,107,95,73,110,118,111,99,97,116,105,111,110,73,68,3,105,110,116,6,115,116,114,101,97,109,16,69,109,105,116,83,116,114,101,97,109,86,101,114,116,101,120,4,118,111,105,100,18,69,110,100,83,116,114,101,97,109,80,114,105,109,105,116,105,118,101,10,69,109,105,116,86,101,114,116,101,120,12,69,110,100,80,114,105,109,105,116,105,118,101,0,42,13,0,37,1,0,2,0,2,29,5,0,0,0,15,0,43,2,0,27,0,29,5,1,0,0,34,0,43,3,0,47,0,46,4,0,29,5,18,39,2,53,0,0,5,0,40,1,0,255,0,37,6,0,2,0,2,29,5,0,0,0,15,0,40,2,0,29,5,1,0,0,34,0,40,3,0,46,7,0,29,5,23,39,4,2,0,40,6,0,0,16,7,0,0,16,7,0,1,46,8,0,29,5,8,0,2,59,0,43,9,0,75,0,0,46,10,0,9,79,0,40,9,0,3,22,11,0,30,8,0,16,0,0,86,0,1,10,0,43,12,0,103,0,46,13,0,9,79,0,40,9,0,3,22,14,0,30,8,0,16,0,0,108,0,1,13,0,40,12,0,22,15,0,30,8,0,16,0,0,127,0,0,40,12,0,22,16,0,30,8,0,16,0,0,138,0,0,40,12,0,8,0,86,0,8,0,127,0,11,0,138,0,12,0,108,0,10,0,59,0,6,0,34,0,5,0,15,0,4,0,53,0,1,0,12,3,26,40,4,0,2,0,53,0,1,50,26,40,7,0,2,0,151,0,0,48,47,8,0,40,9,0,0,50,};
diff --git a/src/sksl/generated/sksl_gpu.dehydrated.sksl b/src/sksl/generated/sksl_gpu.dehydrated.sksl
index 51aaff2..13cb503 100644
--- a/src/sksl/generated/sksl_gpu.dehydrated.sksl
+++ b/src/sksl/generated/sksl_gpu.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_gpu_LENGTH = 23062;
-static uint8_t SKSL_INCLUDE_sksl_gpu[23062] = {28,10,11,83,107,66,108,101,110,100,77,111,100,101,7,100,101,103,114,101,101,115,8,36,103,101,110,84,121,112,101,7,114,97,100,105,97,110,115,5,97,110,103,108,101,3,115,105,110,3,99,111,115,3,116,97,110,1,120,4,97,115,105,110,4,97,99,111,115,1,121,4,97,116,97,110,8,121,95,111,118,101,114,95,120,4,115,105,110,104,4,99,111,115,104,4,116,97,110,104,5,97,115,105,110,104,5,97,99,111,115,104,5,97,116,97,110,104,3,112,111,119,3,101,120,112,3,108,111,103,4,101,120,112,50,4,108,111,103,50,4,115,113,114,116,9,36,103,101,110,72,84,121,112,101,11,105,110,118,101,114,115,101,115,113,114,116,3,97,98,115,9,36,103,101,110,73,84,121,112,101,4,115,105,103,110,5,102,108,111,111,114,5,116,114,117,110,99,5,114,111,117,110,100,9,114,111,117,110,100,69,118,101,110,4,99,101,105,108,5,102,114,97,99,116,5,102,108,111,97,116,3,109,111,100,4,104,97,108,102,1,105,4,109,111,100,102,3,109,105,110,3,105,110,116,3,109,97,120,6,109,105,110,86,97,108,6,109,97,120,86,97,108,5,99,108,97,109,112,8,115,97,116,117,114,97,116,101,1,97,3,109,105,120,9,36,103,101,110,66,84,121,112,101,4,101,100,103,101,4,115,116,101,112,5,101,100,103,101,48,5,101,100,103,101,49,10,115,109,111,111,116,104,115,116,101,112,5,105,115,110,97,110,5,105,115,105,110,102,5,118,97,108,117,101,14,102,108,111,97,116,66,105,116,115,84,111,73,110,116,14,105,110,116,66,105,116,115,84,111,102,108,111,97,116,9,36,103,101,110,85,84,121,112,101,15,117,105,110,116,66,105,116,115,84,111,102,108,111,97,116,1,98,1,99,3,102,109,97,5,102,114,101,120,112,5,108,100,101,120,112,1,118,6,102,108,111,97,116,50,13,112,97,99,107,85,110,111,114,109,50,120,49,54,4,117,105,110,116,13,112,97,99,107,83,110,111,114,109,50,120,49,54,6,102,108,111,97,116,52,12,112,97,99,107,85,110,111,114,109,52,120,56,12,112,97,99,107,83,110,111,114,109,52,120,56,1,112,15,117,110,112,97,99,107,85,110,111,114,109,50,120,49,54,15,117,110,112,97,99,107,83,110,111,114,109,50,120,49,54,14,117,110,112,97,99,107,85,110,111,114,109,52,120,56,14,117,110,112,97,99,107,83,110,111,114,109,52,120,56,12,112,97,99,107,72,97,108,102,50,120,49,54,14,117,110,112,97,99,107,72,97,108,102,50,120,49,54,6,108,101,110,103,116,104,2,112,48,2,112,49,8,100,105,115,116,97,110,99,101,3,100,111,116,6,102,108,111,97,116,51,5,99,114,111,115,115,5,104,97,108,102,51,9,110,111,114,109,97,108,105,122,101,10,102,116,114,97,110,115,102,111,114,109,1,78,1,73,4,78,114,101,102,11,102,97,99,101,102,111,114,119,97,114,100,7,114,101,102,108,101,99,116,3,101,116,97,7,114,101,102,114,97,99,116,4,36,109,97,116,14,109,97,116,114,105,120,67,111,109,112,77,117,108,116,1,114,12,111,117,116,101,114,80,114,111,100,117,99,116,8,102,108,111,97,116,50,120,50,8,102,108,111,97,116,51,120,51,8,102,108,111,97,116,52,120,51,8,102,108,111,97,116,50,120,51,8,102,108,111,97,116,51,120,50,8,102,108,111,97,116,50,120,52,8,102,108,111,97,116,52,120,50,8,102,108,111,97,116,51,120,52,5,104,97,108,102,50,7,104,97,108,102,50,120,50,7,104,97,108,102,51,120,51,5,104,97,108,102,52,7,104,97,108,102,52,120,51,7,104,97,108,102,50,120,51,7,104,97,108,102,51,120,50,7,104,97,108,102,50,120,52,7,104,97,108,102,52,120,50,7,104,97,108,102,51,120,52,1,109,9,116,114,97,110,115,112,111,115,101,8,102,108,111,97,116,52,120,52,7,104,97,108,102,52,120,52,11,100,101,116,101,114,109,105,110,97,110,116,7,105,110,118,101,114,115,101,4,36,118,101,99,8,108,101,115,115,84,104,97,110,5,36,98,118,101,99,5,36,104,118,101,99,5,36,105,118,101,99,5,36,115,118,101,99,6,36,117,115,118,101,99,5,36,117,118,101,99,13,108,101,115,115,84,104,97,110,69,113,117,97,108,11,103,114,101,97,116,101,114,84,104,97,110,16,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,5,101,113,117,97,108,8,110,111,116,69,113,117,97,108,3,97,110,121,4,98,111,111,108,3,97,108,108,3,110,111,116,8,98,105,116,67,111,117,110,116,7,102,105,110,100,76,83,66,7,102,105,110,100,77,83,66,7,116,101,120,116,117,114,101,9,116,101,120,116,117,114,101,50,68,7,115,97,109,112,108,101,114,13,109,97,107,101,83,97,109,112,108,101,114,50,68,9,115,97,109,112,108,101,114,50,68,15,36,103,115,97,109,112,108,101,114,50,68,82,101,99,116,11,116,101,120,116,117,114,101,83,105,122,101,4,105,110,116,50,11,36,103,115,97,109,112,108,101,114,49,68,1,80,6,115,97,109,112,108,101,4,98,105,97,115,11,36,103,115,97,109,112,108,101,114,50,68,10,105,115,97,109,112,108,101,114,50,68,4,105,110,116,52,18,115,97,109,112,108,101,114,69,120,116,101,114,110,97,108,79,69,83,7,115,117,98,112,97,115,115,12,115,117,98,112,97,115,115,73,110,112,117,116,11,115,117,98,112,97,115,115,76,111,97,100,14,115,117,98,112,97,115,115,73,110,112,117,116,77,83,5,105,109,97,103,101,7,105,109,97,103,101,50,68,9,105,109,97,103,101,76,111,97,100,8,105,105,109,97,103,101,50,68,4,100,70,100,120,4,100,70,100,121,6,102,119,105,100,116,104,11,105,110,116,101,114,112,111,108,97,110,116,19,105,110,116,101,114,112,111,108,97,116,101,65,116,83,97,109,112,108,101,6,111,102,102,115,101,116,19,105,110,116,101,114,112,111,108,97,116,101,65,116,79,102,102,115,101,116,3,115,114,99,3,100,115,116,11,98,108,101,110,100,95,99,108,101,97,114,9,98,108,101,110,100,95,115,114,99,9,98,108,101,110,100,95,100,115,116,14,98,108,101,110,100,95,115,114,99,95,111,118,101,114,14,98,108,101,110,100,95,100,115,116,95,111,118,101,114,12,98,108,101,110,100,95,115,114,99,95,105,110,12,98,108,101,110,100,95,100,115,116,95,105,110,13,98,108,101,110,100,95,115,114,99,95,111,117,116,13,98,108,101,110,100,95,100,115,116,95,111,117,116,14,98,108,101,110,100,95,115,114,99,95,97,116,111,112,14,98,108,101,110,100,95,100,115,116,95,97,116,111,112,9,98,108,101,110,100,95,120,111,114,10,98,108,101,110,100,95,112,108,117,115,14,98,108,101,110,100,95,109,111,100,117,108,97,116,101,12,98,108,101,110,100,95,115,99,114,101,101,110,1,115,1,100,24,95,98,108,101,110,100,95,111,118,101,114,108,97,121,95,99,111,109,112,111,110,101,110,116,13,98,108,101,110,100,95,111,118,101,114,108,97,121,12,98,108,101,110,100,95,100,97,114,107,101,110,13,98,108,101,110,100,95,108,105,103,104,116,101,110,1,110,15,95,103,117,97,114,100,101,100,95,100,105,118,105,100,101,22,95,99,111,108,111,114,95,100,111,100,103,101,95,99,111,109,112,111,110,101,110,116,17,98,108,101,110,100,95,99,111,108,111,114,95,100,111,100,103,101,21,95,99,111,108,111,114,95,98,117,114,110,95,99,111,109,112,111,110,101,110,116,16,98,108,101,110,100,95,99,111,108,111,114,95,98,117,114,110,16,98,108,101,110,100,95,104,97,114,100,95,108,105,103,104,116,21,95,115,111,102,116,95,108,105,103,104,116,95,99,111,109,112,111,110,101,110,116,16,98,108,101,110,100,95,115,111,102,116,95,108,105,103,104,116,16,98,108,101,110,100,95,100,105,102,102,101,114,101,110,99,101,15,98,108,101,110,100,95,101,120,99,108,117,115,105,111,110,14,98,108,101,110,100,95,109,117,108,116,105,112,108,121,5,99,111,108,111,114,22,95,98,108,101,110,100,95,99,111,108,111,114,95,108,117,109,105,110,97,110,99,101,11,104,117,101,83,97,116,67,111,108,111,114,5,97,108,112,104,97,8,108,117,109,67,111,108,111,114,26,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,108,117,109,105,110,97,110,99,101,23,95,98,108,101,110,100,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,9,109,105,110,77,105,100,77,97,120,3,115,97,116,34,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,95,104,101,108,112,101,114,11,104,117,101,76,117,109,67,111,108,111,114,8,115,97,116,67,111,108,111,114,27,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,9,98,108,101,110,100,95,104,117,101,16,98,108,101,110,100,95,115,97,116,117,114,97,116,105,111,110,11,98,108,101,110,100,95,99,111,108,111,114,16,98,108,101,110,100,95,108,117,109,105,110,111,115,105,116,121,4,109,111,100,101,5,98,108,101,110,100,8,117,110,112,114,101,109,117,108,14,117,110,112,114,101,109,117,108,95,102,108,111,97,116,4,112,114,111,106,45,115,107,95,67,97,112,115,46,105,110,66,108,101,110,100,77,111,100,101,115,70,97,105,108,82,97,110,100,111,109,108,121,70,111,114,65,108,108,90,101,114,111,86,101,99,6,114,101,115,117,108,116,51,115,107,95,67,97,112,115,46,109,117,115,116,71,117,97,114,100,68,105,118,105,115,105,111,110,69,118,101,110,65,102,116,101,114,69,120,112,108,105,99,105,116,90,101,114,111,67,104,101,99,107,5,100,101,108,116,97,4,68,83,113,100,4,68,67,117,98,5,68,97,83,113,100,5,68,97,67,117,98,3,108,117,109,7,109,105,110,67,111,109,112,7,109,97,120,67,111,109,112,3,115,100,97,3,100,115,97,6,107,67,108,101,97,114,4,107,83,114,99,4,107,68,115,116,8,107,83,114,99,79,118,101,114,8,107,68,115,116,79,118,101,114,6,107,83,114,99,73,110,6,107,68,115,116,73,110,7,107,83,114,99,79,117,116,7,107,68,115,116,79,117,116,8,107,83,114,99,65,84,111,112,8,107,68,115,116,65,84,111,112,4,107,88,111,114,5,107,80,108,117,115,9,107,77,111,100,117,108,97,116,101,7,107,83,99,114,101,101,110,8,107,79,118,101,114,108,97,121,7,107,68,97,114,107,101,110,8,107,76,105,103,104,116,101,110,11,107,67,111,108,111,114,68,111,100,103,101,10,107,67,111,108,111,114,66,117,114,110,10,107,72,97,114,100,76,105,103,104,116,10,107,83,111,102,116,76,105,103,104,116,11,107,68,105,102,102,101,114,101,110,99,101,10,107,69,120,99,108,117,115,105,111,110,9,107,77,117,108,116,105,112,108,121,4,107,72,117,101,11,107,83,97,116,117,114,97,116,105,111,110,6,107,67,111,108,111,114,11,107,76,117,109,105,110,111,115,105,116,121,42,231,3,14,1,0,2,0,46,2,0,9,14,0,43,3,0,22,0,3,22,4,0,9,31,0,1,2,0,40,3,0,46,5,0,9,39,0,40,3,0,3,22,6,0,9,45,0,1,5,0,40,3,0,46,7,0,9,39,0,40,3,0,3,22,8,0,9,49,0,1,7,0,40,3,0,46,9,0,9,39,0,40,3,0,3,22,10,0,9,53,0,1,9,0,40,3,0,46,11,0,9,57,0,40,3,0,3,22,12,0,9,59,0,1,11,0,40,3,0,46,13,0,9,57,0,40,3,0,3,22,14,0,9,64,0,1,13,0,40,3,0,46,15,0,9,69,0,40,3,0,3,46,16,0,9,57,0,40,3,0,3,22,17,0,9,71,0,2,15,0,16,0,40,3,0,46,18,0,9,76,0,40,3,0,3,45,19,0,2,40,17,0,22,20,0,9,71,0,1,18,0,40,3,0,40,20,0,46,21,0,9,57,0,40,3,0,3,22,22,0,9,85,0,1,21,0,40,3,0,46,23,0,9,57,0,40,3,0,3,22,24,0,9,90,0,1,23,0,40,3,0,46,25,0,9,57,0,40,3,0,3,22,26,0,9,95,0,1,25,0,40,3,0,46,27,0,9,57,0,40,3,0,3,22,28,0,9,100,0,1,27,0,40,3,0,46,29,0,9,57,0,40,3,0,3,22,30,0,9,106,0,1,29,0,40,3,0,46,31,0,9,57,0,40,3,0,3,22,32,0,9,112,0,1,31,0,40,3,0,46,33,0,9,57,0,40,3,0,3,46,34,0,9,69,0,40,3,0,3,22,35,0,9,118,0,2,33,0,34,0,40,3,0,46,36,0,9,57,0,40,3,0,3,22,37,0,9,122,0,1,36,0,40,3,0,46,38,0,9,57,0,40,3,0,3,22,39,0,9,126,0,1,38,0,40,3,0,46,40,0,9,57,0,40,3,0,3,22,41,0,9,130,0,1,40,0,40,3,0,46,42,0,9,57,0,40,3,0,3,22,43,0,9,135,0,1,42,0,40,3,0,46,44,0,9,57,0,40,3,0,3,22,45,0,9,140,0,1,44,0,40,3,0,46,46,0,9,14,0,43,47,0,145,0,3,45,48,0,2,40,4,0,22,49,0,9,31,0,1,46,0,40,47,0,40,49,0,46,50,0,9,39,0,40,47,0,3,45,51,0,2,40,6,0,22,52,0,9,45,0,1,50,0,40,47,0,40,52,0,46,53,0,9,39,0,40,47,0,3,45,54,0,2,40,8,0,22,55,0,9,49,0,1,53,0,40,47,0,40,55,0,46,56,0,9,39,0,40,47,0,3,45,57,0,2,40,10,0,22,58,0,9,53,0,1,56,0,40,47,0,40,58,0,46,59,0,9,57,0,40,47,0,3,45,60,0,2,40,12,0,22,61,0,9,59,0,1,59,0,40,47,0,40,61,0,46,62,0,9,57,0,40,47,0,3,45,63,0,2,40,14,0,22,64,0,9,64,0,1,62,0,40,47,0,40,64,0,46,65,0,9,69,0,40,47,0,3,46,66,0,9,57,0,40,47,0,3,45,67,0,3,40,17,0,40,20,0,22,68,0,9,71,0,2,65,0,66,0,40,47,0,40,68,0,46,69,0,9,76,0,40,47,0,3,45,70,0,4,40,17,0,40,20,0,40,68,0,22,71,0,9,71,0,1,69,0,40,47,0,40,71,0,46,72,0,9,57,0,40,47,0,3,45,73,0,2,40,22,0,22,74,0,9,85,0,1,72,0,40,47,0,40,74,0,46,75,0,9,57,0,40,47,0,3,45,76,0,2,40,24,0,22,77,0,9,90,0,1,75,0,40,47,0,40,77,0,46,78,0,9,57,0,40,47,0,3,45,79,0,2,40,26,0,22,80,0,9,95,0,1,78,0,40,47,0,40,80,0,46,81,0,9,57,0,40,47,0,3,45,82,0,2,40,28,0,22,83,0,9,100,0,1,81,0,40,47,0,40,83,0,46,84,0,9,57,0,40,47,0,3,45,85,0,2,40,30,0,22,86,0,9,106,0,1,84,0,40,47,0,40,86,0,46,87,0,9,57,0,40,47,0,3,45,88,0,2,40,32,0,22,89,0,9,112,0,1,87,0,40,47,0,40,89,0,46,90,0,9,57,0,40,47,0,3,46,91,0,9,69,0,40,47,0,3,45,92,0,2,40,35,0,22,93,0,9,118,0,2,90,0,91,0,40,47,0,40,93,0,46,94,0,9,57,0,40,47,0,3,45,95,0,2,40,37,0,22,96,0,9,122,0,1,94,0,40,47,0,40,96,0,46,97,0,9,57,0,40,47,0,3,45,98,0,2,40,39,0,22,99,0,9,126,0,1,97,0,40,47,0,40,99,0,46,100,0,9,57,0,40,47,0,3,45,101,0,2,40,41,0,22,102,0,9,130,0,1,100,0,40,47,0,40,102,0,46,103,0,9,57,0,40,47,0,3,45,104,0,2,40,43,0,22,105,0,9,135,0,1,103,0,40,47,0,40,105,0,46,106,0,9,57,0,40,47,0,3,45,107,0,2,40,45,0,22,108,0,9,140,0,1,106,0,40,47,0,40,108,0,46,109,0,9,57,0,40,3,0,3,22,110,0,9,155,0,1,109,0,40,3,0,46,111,0,9,57,0,40,3,0,3,22,112,0,9,167,0,1,111,0,40,3,0,46,113,0,9,57,0,40,47,0,3,45,114,0,2,40,112,0,22,115,0,9,167,0,1,113,0,40,47,0,40,115,0,46,116,0,9,57,0,43,117,0,171,0,3,45,118,0,3,40,112,0,40,115,0,22,119,0,9,167,0,1,116,0,40,117,0,40,119,0,46,120,0,9,57,0,40,3,0,3,22,121,0,9,181,0,1,120,0,40,3,0,46,122,0,9,57,0,40,47,0,3,45,123,0,2,40,121,0,22,124,0,9,181,0,1,122,0,40,47,0,40,124,0,46,125,0,9,57,0,40,117,0,3,45,126,0,3,40,121,0,40,124,0,22,127,0,9,181,0,1,125,0,40,117,0,40,127,0,46,128,0,9,57,0,40,3,0,3,22,129,0,9,186,0,1,128,0,40,3,0,46,130,0,9,57,0,40,47,0,3,45,131,0,2,40,129,0,22,132,0,9,186,0,1,130,0,40,47,0,40,132,0,46,133,0,9,57,0,40,3,0,3,22,134,0,9,192,0,1,133,0,40,3,0,46,135,0,9,57,0,40,47,0,3,45,136,0,2,40,134,0,22,137,0,9,192,0,1,135,0,40,47,0,40,137,0,46,138,0,9,57,0,40,3,0,3,22,139,0,9,198,0,1,138,0,40,3,0,46,140,0,9,57,0,40,47,0,3,45,141,0,2,40,139,0,22,142,0,9,198,0,1,140,0,40,47,0,40,142,0,46,143,0,9,57,0,40,3,0,3,22,144,0,9,204,0,1,143,0,40,3,0,46,145,0,9,57,0,40,47,0,3,45,146,0,2,40,144,0,22,147,0,9,204,0,1,145,0,40,47,0,40,147,0,46,148,0,9,57,0,40,3,0,3,22,149,0,9,214,0,1,148,0,40,3,0,46,150,0,9,57,0,40,47,0,3,45,151,0,2,40,149,0,22,152,0,9,214,0,1,150,0,40,47,0,40,152,0,46,153,0,9,57,0,40,3,0,3,22,154,0,9,219,0,1,153,0,40,3,0,46,155,0,9,57,0,40,47,0,3,45,156,0,2,40,154,0,22,157,0,9,219,0,1,155,0,40,47,0,40,157,0,46,158,0,9,57,0,40,3,0,3,46,159,0,9,69,0,43,160,0,225,0,3,22,161,0,9,231,0,2,158,0,159,0,40,3,0,46,162,0,9,57,0,40,3,0,3,46,163,0,9,69,0,40,3,0,3,45,164,0,2,40,161,0,22,165,0,9,231,0,2,162,0,163,0,40,3,0,40,165,0,46,166,0,9,57,0,40,47,0,3,46,167,0,9,69,0,43,168,0,235,0,3,45,169,0,3,40,161,0,40,165,0,22,170,0,9,231,0,2,166,0,167,0,40,47,0,40,170,0,46,171,0,9,57,0,40,47,0,3,46,172,0,9,69,0,40,47,0,3,45,173,0,4,40,161,0,40,165,0,40,170,0,22,174,0,9,231,0,2,171,0,172,0,40,47,0,40,174,0,46,175,0,9,57,0,40,3,0,3,46,176,0,29,8,4,240,0,40,3,0,3,22,177,0,9,242,0,2,175,0,176,0,40,3,0,46,178,0,9,57,0,40,47,0,3,46,179,0,29,8,4,240,0,40,47,0,3,45,180,0,2,40,177,0,22,181,0,9,242,0,2,178,0,179,0,40,47,0,40,181,0,46,182,0,9,57,0,40,3,0,3,46,183,0,9,69,0,40,3,0,3,22,184,0,9,247,0,2,182,0,183,0,40,3,0,46,185,0,9,57,0,40,3,0,3,46,186,0,9,69,0,40,160,0,3,45,187,0,2,40,184,0,22,188,0,9,247,0,2,185,0,186,0,40,3,0,40,188,0,46,189,0,9,57,0,40,47,0,3,46,190,0,9,69,0,40,47,0,3,45,191,0,3,40,184,0,40,188,0,22,192,0,9,247,0,2,189,0,190,0,40,47,0,40,192,0,46,193,0,9,57,0,40,47,0,3,46,194,0,9,69,0,40,168,0,3,45,195,0,4,40,184,0,40,188,0,40,192,0,22,196,0,9,247,0,2,193,0,194,0,40,47,0,40,196,0,46,197,0,9,57,0,40,117,0,3,46,198,0,9,69,0,40,117,0,3,45,199,0,5,40,184,0,40,188,0,40,192,0,40,196,0,22,200,0,9,247,0,2,197,0,198,0,40,117,0,40,200,0,46,201,0,9,57,0,40,117,0,3,46,202,0,9,69,0,43,203,0,251,0,3,45,204,0,6,40,184,0,40,188,0,40,192,0,40,196,0,40,200,0,22,205,0,9,247,0,2,201,0,202,0,40,117,0,40,205,0,46,206,0,9,57,0,40,3,0,3,46,207,0,9,69,0,40,3,0,3,22,208,0,9,255,0,2,206,0,207,0,40,3,0,46,209,0,9,57,0,40,3,0,3,46,210,0,9,69,0,40,160,0,3,45,211,0,2,40,208,0,22,212,0,9,255,0,2,209,0,210,0,40,3,0,40,212,0,46,213,0,9,57,0,40,47,0,3,46,214,0,9,69,0,40,47,0,3,45,215,0,3,40,208,0,40,212,0,22,216,0,9,255,0,2,213,0,214,0,40,47,0,40,216,0,46,217,0,9,57,0,40,47,0,3,46,218,0,9,69,0,40,168,0,3,45,219,0,4,40,208,0,40,212,0,40,216,0,22,220,0,9,255,0,2,217,0,218,0,40,47,0,40,220,0,46,221,0,9,57,0,40,117,0,3,46,222,0,9,69,0,40,117,0,3,45,223,0,5,40,208,0,40,212,0,40,216,0,40,220,0,22,224,0,9,255,0,2,221,0,222,0,40,117,0,40,224,0,46,225,0,9,57,0,40,117,0,3,46,226,0,9,69,0,40,203,0,3,45,227,0,6,40,208,0,40,212,0,40,216,0,40,220,0,40,224,0,22,228,0,9,255,0,2,225,0,226,0,40,117,0,40,228,0,46,229,0,9,57,0,40,3,0,3,46,230,0,9,3,1,40,3,0,3,46,231,0,9,10,1,40,3,0,3,22,232,0,9,17,1,3,229,0,230,0,231,0,40,3,0,46,233,0,9,57,0,40,3,0,3,46,234,0,9,3,1,40,160,0,3,46,235,0,9,10,1,40,160,0,3,45,236,0,2,40,232,0,22,237,0,9,17,1,3,233,0,234,0,235,0,40,3,0,40,237,0,46,238,0,9,57,0,40,47,0,3,46,239,0,9,3,1,40,47,0,3,46,240,0,9,10,1,40,47,0,3,45,241,0,3,40,232,0,40,237,0,22,242,0,9,17,1,3,238,0,239,0,240,0,40,47,0,40,242,0,46,243,0,9,57,0,40,47,0,3,46,244,0,9,3,1,40,168,0,3,46,245,0,9,10,1,40,168,0,3,45,246,0,4,40,232,0,40,237,0,40,242,0,22,247,0,9,17,1,3,243,0,244,0,245,0,40,47,0,40,247,0,46,248,0,9,57,0,40,117,0,3,46,249,0,9,3,1,40,117,0,3,46,250,0,9,10,1,40,117,0,3,45,251,0,5,40,232,0,40,237,0,40,242,0,40,247,0,22,252,0,9,17,1,3,248,0,249,0,250,0,40,117,0,40,252,0,46,253,0,9,57,0,40,117,0,3,46,254,0,9,3,1,40,203,0,3,46,255,0,9,10,1,40,203,0,3,45,0,1,6,40,232,0,40,237,0,40,242,0,40,247,0,40,252,0,22,1,1,9,17,1,3,253,0,254,0,255,0,40,117,0,40,1,1,46,2,1,9,57,0,40,3,0,3,22,3,1,9,23,1,1,2,1,40,3,0,46,4,1,9,57,0,40,47,0,3,45,5,1,2,40,3,1,22,6,1,9,23,1,1,4,1,40,47,0,40,6,1,46,7,1,9,57,0,40,3,0,3,46,8,1,9,69,0,40,3,0,3,46,9,1,9,32,1,40,3,0,3,22,10,1,9,34,1,3,7,1,8,1,9,1,40,3,0,46,11,1,9,57,0,40,3,0,3,46,12,1,9,69,0,40,3,0,3,46,13,1,9,32,1,40,160,0,3,45,14,1,2,40,10,1,22,15,1,9,34,1,3,11,1,12,1,13,1,40,3,0,40,15,1,46,16,1,9,57,0,40,47,0,3,46,17,1,9,69,0,40,47,0,3,46,18,1,9,32,1,40,47,0,3,45,19,1,3,40,10,1,40,15,1,22,20,1,9,34,1,3,16,1,17,1,18,1,40,47,0,40,20,1,46,21,1,9,57,0,40,47,0,3,46,22,1,9,69,0,40,47,0,3,46,23,1,9,32,1,40,168,0,3,45,24,1,4,40,10,1,40,15,1,40,20,1,22,25,1,9,34,1,3,21,1,22,1,23,1,40,47,0,40,25,1,46,26,1,9,57,0,40,3,0,3,46,27,1,9,69,0,40,3,0,3,46,28,1,9,32,1,43,29,1,38,1,3,45,30,1,5,40,10,1,40,15,1,40,20,1,40,25,1,22,31,1,9,34,1,3,26,1,27,1,28,1,40,3,0,40,31,1,46,32,1,9,57,0,40,47,0,3,46,33,1,9,69,0,40,47,0,3,46,34,1,9,32,1,40,29,1,3,45,35,1,6,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,22,36,1,9,34,1,3,32,1,33,1,34,1,40,47,0,40,36,1,46,37,1,9,57,0,40,117,0,3,46,38,1,9,69,0,40,117,0,3,46,39,1,9,32,1,40,29,1,3,45,40,1,7,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,40,36,1,22,41,1,9,34,1,3,37,1,38,1,39,1,40,117,0,40,41,1,46,42,1,9,57,0,40,29,1,3,46,43,1,9,69,0,40,29,1,3,46,44,1,9,32,1,40,29,1,3,45,45,1,8,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,40,36,1,40,41,1,22,46,1,9,34,1,3,42,1,43,1,44,1,40,29,1,40,46,1,46,47,1,9,48,1,40,3,0,3,46,48,1,9,57,0,40,3,0,3,22,49,1,9,53,1,2,47,1,48,1,40,3,0,46,50,1,9,48,1,40,160,0,3,46,51,1,9,57,0,40,3,0,3,45,52,1,2,40,49,1,22,53,1,9,53,1,2,50,1,51,1,40,3,0,40,53,1,46,54,1,9,48,1,40,47,0,3,46,55,1,9,57,0,40,47,0,3,45,56,1,3,40,49,1,40,53,1,22,57,1,9,53,1,2,54,1,55,1,40,47,0,40,57,1,46,58,1,9,48,1,40,168,0,3,46,59,1,9,57,0,40,47,0,3,45,60,1,4,40,49,1,40,53,1,40,57,1,22,61,1,9,53,1,2,58,1,59,1,40,47,0,40,61,1,46,62,1,9,58,1,40,3,0,3,46,63,1,9,64,1,40,3,0,3,46,64,1,9,57,0,40,3,0,3,22,65,1,9,70,1,3,62,1,63,1,64,1,40,3,0,46,66,1,9,58,1,40,160,0,3,46,67,1,9,64,1,40,160,0,3,46,68,1,9,57,0,40,3,0,3,45,69,1,2,40,65,1,22,70,1,9,70,1,3,66,1,67,1,68,1,40,3,0,40,70,1,46,71,1,9,58,1,40,47,0,3,46,72,1,9,64,1,40,47,0,3,46,73,1,9,57,0,40,47,0,3,45,74,1,3,40,65,1,40,70,1,22,75,1,9,70,1,3,71,1,72,1,73,1,40,47,0,40,75,1,46,76,1,9,58,1,40,168,0,3,46,77,1,9,64,1,40,168,0,3,46,78,1,9,57,0,40,47,0,3,45,79,1,4,40,65,1,40,70,1,40,75,1,22,80,1,9,70,1,3,76,1,77,1,78,1,40,47,0,40,80,1,46,81,1,9,57,0,40,3,0,3,22,82,1,9,81,1,1,81,1,40,29,1,46,83,1,9,57,0,40,3,0,3,22,84,1,9,87,1,1,83,1,40,29,1,46,85,1,9,93,1,40,3,0,3,22,86,1,9,99,1,1,85,1,40,117,0,46,87,1,9,93,1,40,117,0,3,22,88,1,9,114,1,1,87,1,40,3,0,46,89,1,9,93,1,43,90,1,129,1,3,22,91,1,9,139,1,1,89,1,40,3,0,46,92,1,9,32,1,40,3,0,3,46,93,1,9,155,1,40,3,0,3,46,94,1,9,157,1,40,3,0,3,22,95,1,9,159,1,3,92,1,93,1,94,1,40,3,0,46,96,1,9,32,1,40,47,0,3,46,97,1,9,155,1,40,47,0,3,46,98,1,9,157,1,40,47,0,3,45,99,1,2,40,95,1,22,100,1,9,159,1,3,96,1,97,1,98,1,40,47,0,40,100,1,46,101,1,9,57,0,40,3,0,3,46,102,1,29,8,4,122,0,40,117,0,3,22,103,1,30,8,0,16,0,0,163,1,2,101,1,102,1,40,3,0,46,104,1,9,57,0,40,3,0,3,46,105,1,29,8,2,122,0,40,117,0,3,22,106,1,9,169,1,2,104,1,105,1,40,3,0,46,107,1,9,175,1,43,108,1,177,1,3,22,109,1,9,184,1,1,107,1,43,110,1,198,1,46,111,1,9,175,1,40,108,1,3,22,112,1,9,203,1,1,111,1,40,110,1,46,113,1,9,175,1,43,114,1,217,1,3,22,115,1,9,224,1,1,113,1,40,110,1,46,116,1,9,175,1,40,114,1,3,22,117,1,9,237,1,1,116,1,40,110,1,46,118,1,9,250,1,40,110,1,3,22,119,1,9,252,1,1,118,1,40,108,1,46,120,1,9,250,1,40,110,1,3,22,121,1,9,12,2,1,120,1,40,108,1,46,122,1,9,250,1,40,110,1,3,22,123,1,9,28,2,1,122,1,40,114,1,46,124,1,9,250,1,40,110,1,3,22,125,1,9,43,2,1,124,1,40,114,1,46,126,1,9,175,1,40,108,1,3,22,127,1,9,58,2,1,126,1,40,110,1,46,128,1,9,175,1,40,110,1,3,22,129,1,9,71,2,1,128,1,40,108,1,46,130,1,9,57,0,40,3,0,3,22,131,1,9,86,2,1,130,1,40,160,0,46,132,1,9,57,0,40,47,0,3,45,133,1,2,40,131,1,22,134,1,9,86,2,1,132,1,40,168,0,40,134,1,46,135,1,9,93,2,40,3,0,3,46,136,1,9,96,2,40,3,0,3,22,137,1,9,99,2,2,135,1,136,1,40,160,0,46,138,1,9,93,2,40,47,0,3,46,139,1,9,96,2,40,47,0,3,45,140,1,2,40,137,1,22,141,1,9,99,2,2,138,1,139,1,40,168,0,40,141,1,46,142,1,9,57,0,40,3,0,3,46,143,1,9,69,0,40,3,0,3,22,144,1,9,108,2,2,142,1,143,1,40,160,0,46,145,1,9,57,0,40,47,0,3,46,146,1,9,69,0,40,47,0,3,45,147,1,2,40,144,1,22,148,1,9,108,2,2,145,1,146,1,40,168,0,40,148,1,46,149,1,9,57,0,43,150,1,112,2,3,46,151,1,9,69,0,40,150,1,3,22,152,1,9,119,2,2,149,1,151,1,40,150,1,46,153,1,9,57,0,43,154,1,125,2,3,46,155,1,9,69,0,40,154,1,3,45,156,1,2,40,152,1,22,157,1,9,119,2,2,153,1,155,1,40,154,1,40,157,1,46,158,1,9,57,0,40,3,0,3,22,159,1,9,131,2,1,158,1,40,3,0,46,160,1,9,57,0,40,47,0,3,45,161,1,2,40,159,1,22,162,1,9,131,2,1,160,1,40,47,0,40,162,1,22,163,1,9,141,2,0,40,114,1,46,164,1,9,152,2,40,3,0,3,46,165,1,9,154,2,40,3,0,3,46,166,1,9,156,2,40,3,0,3,22,167,1,9,161,2,3,164,1,165,1,166,1,40,3,0,46,168,1,9,152,2,40,47,0,3,46,169,1,9,154,2,40,47,0,3,46,170,1,9,156,2,40,47,0,3,45,171,1,2,40,167,1,22,172,1,9,161,2,3,168,1,169,1,170,1,40,47,0,40,172,1,46,173,1,9,154,2,40,3,0,3,46,174,1,9,152,2,40,3,0,3,22,175,1,9,173,2,2,173,1,174,1,40,3,0,46,176,1,9,154,2,40,47,0,3,46,177,1,9,152,2,40,47,0,3,45,178,1,2,40,175,1,22,179,1,9,173,2,2,176,1,177,1,40,47,0,40,179,1,46,180,1,9,154,2,40,3,0,3,46,181,1,9,152,2,40,3,0,3,46,182,1,9,181,2,40,160,0,3,22,183,1,9,185,2,3,180,1,181,1,182,1,40,3,0,46,184,1,9,154,2,40,47,0,3,46,185,1,9,152,2,40,47,0,3,46,186,1,9,181,2,40,160,0,3,45,187,1,2,40,183,1,22,188,1,9,185,2,3,184,1,185,1,186,1,40,47,0,40,188,1,46,189,1,9,57,0,43,190,1,193,2,3,46,191,1,9,69,0,40,190,1,3,22,192,1,9,198,2,2,189,1,191,1,40,190,1,46,193,1,9,157,1,40,108,1,3,46,194,1,9,213,2,40,108,1,3,22,195,1,9,215,2,2,193,1,194,1,43,196,1,228,2,46,197,1,9,157,1,40,150,1,3,46,198,1,9,213,2,40,150,1,3,45,199,1,2,40,195,1,22,200,1,9,215,2,2,197,1,198,1,43,201,1,237,2,40,200,1,46,202,1,9,157,1,40,114,1,3,46,203,1,9,213,2,40,114,1,3,45,204,1,3,40,195,1,40,200,1,22,205,1,9,215,2,2,202,1,203,1,43,206,1,246,2,40,205,1,46,207,1,9,157,1,40,150,1,3,46,208,1,9,213,2,40,108,1,3,45,209,1,4,40,195,1,40,200,1,40,205,1,22,210,1,9,215,2,2,207,1,208,1,43,211,1,255,2,40,210,1,46,212,1,9,157,1,40,108,1,3,46,213,1,9,213,2,40,150,1,3,45,214,1,5,40,195,1,40,200,1,40,205,1,40,210,1,22,215,1,9,215,2,2,212,1,213,1,43,216,1,8,3,40,215,1,46,217,1,9,157,1,40,114,1,3,46,218,1,9,213,2,40,108,1,3,45,219,1,6,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,22,220,1,9,215,2,2,217,1,218,1,43,221,1,17,3,40,220,1,46,222,1,9,157,1,40,108,1,3,46,223,1,9,213,2,40,114,1,3,45,224,1,7,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,22,225,1,9,215,2,2,222,1,223,1,43,226,1,26,3,40,225,1,46,227,1,9,157,1,40,114,1,3,46,228,1,9,213,2,40,150,1,3,45,229,1,8,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,22,230,1,9,215,2,2,227,1,228,1,43,231,1,35,3,40,230,1,46,232,1,9,157,1,40,150,1,3,46,233,1,9,213,2,40,114,1,3,45,234,1,9,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,22,235,1,9,215,2,2,232,1,233,1,40,206,1,40,235,1,46,236,1,9,157,1,43,237,1,44,3,3,46,238,1,9,213,2,40,237,1,3,45,239,1,10,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,22,240,1,9,215,2,2,236,1,238,1,43,241,1,50,3,40,240,1,46,242,1,9,157,1,40,154,1,3,46,243,1,9,213,2,40,154,1,3,45,244,1,11,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,22,245,1,9,215,2,2,242,1,243,1,43,246,1,58,3,40,245,1,46,247,1,9,157,1,43,248,1,66,3,3,46,249,1,9,213,2,40,248,1,3,45,250,1,12,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,22,251,1,9,215,2,2,247,1,249,1,43,252,1,72,3,40,251,1,46,253,1,9,157,1,40,154,1,3,46,254,1,9,213,2,40,237,1,3,45,255,1,13,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,22,0,2,9,215,2,2,253,1,254,1,43,1,2,80,3,40,0,2,46,2,2,9,157,1,40,237,1,3,46,3,2,9,213,2,40,154,1,3,45,4,2,14,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,22,5,2,9,215,2,2,2,2,3,2,43,6,2,88,3,40,5,2,46,7,2,9,157,1,40,248,1,3,46,8,2,9,213,2,40,237,1,3,45,9,2,15,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,22,10,2,9,215,2,2,7,2,8,2,43,11,2,96,3,40,10,2,46,12,2,9,157,1,40,237,1,3,46,13,2,9,213,2,40,248,1,3,45,14,2,16,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,22,15,2,9,215,2,2,12,2,13,2,43,16,2,104,3,40,15,2,46,17,2,9,157,1,40,248,1,3,46,18,2,9,213,2,40,154,1,3,45,19,2,17,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,40,15,2,22,20,2,9,215,2,2,17,2,18,2,43,21,2,112,3,40,20,2,46,22,2,9,157,1,40,154,1,3,46,23,2,9,213,2,40,248,1,3,45,24,2,18,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,40,15,2,40,20,2,22,25,2,9,215,2,2,22,2,23,2,40,252,1,40,25,2,46,26,2,9,120,3,40,196,1,3,22,27,2,9,122,3,1,26,2,40,196,1,46,28,2,9,120,3,40,201,1,3,45,29,2,2,40,27,2,22,30,2,9,122,3,1,28,2,40,201,1,40,30,2,46,31,2,9,120,3,43,32,2,132,3,3,45,33,2,3,40,27,2,40,30,2,22,34,2,9,122,3,1,31,2,40,32,2,40,34,2,46,35,2,9,120,3,40,216,1,3,45,36,2,4,40,27,2,40,30,2,40,34,2,22,37,2,9,122,3,1,35,2,40,211,1,40,37,2,46,38,2,9,120,3,40,211,1,3,45,39,2,5,40,27,2,40,30,2,40,34,2,40,37,2,22,40,2,9,122,3,1,38,2,40,216,1,40,40,2,46,41,2,9,120,3,40,226,1,3,45,42,2,6,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,22,43,2,9,122,3,1,41,2,40,221,1,40,43,2,46,44,2,9,120,3,40,221,1,3,45,45,2,7,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,22,46,2,9,122,3,1,44,2,40,226,1,40,46,2,46,47,2,9,120,3,40,206,1,3,45,48,2,8,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,22,49,2,9,122,3,1,47,2,40,231,1,40,49,2,46,50,2,9,120,3,40,231,1,3,45,51,2,9,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,22,52,2,9,122,3,1,50,2,40,206,1,40,52,2,46,53,2,9,120,3,40,241,1,3,45,54,2,10,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,22,55,2,9,122,3,1,53,2,40,241,1,40,55,2,46,56,2,9,120,3,40,246,1,3,45,57,2,11,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,22,58,2,9,122,3,1,56,2,40,246,1,40,58,2,46,59,2,9,120,3,43,60,2,141,3,3,45,61,2,12,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,22,62,2,9,122,3,1,59,2,40,60,2,40,62,2,46,63,2,9,120,3,40,6,2,3,45,64,2,13,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,22,65,2,9,122,3,1,63,2,40,1,2,40,65,2,46,66,2,9,120,3,40,1,2,3,45,67,2,14,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,22,68,2,9,122,3,1,66,2,40,6,2,40,68,2,46,69,2,9,120,3,40,16,2,3,45,70,2,15,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,22,71,2,9,122,3,1,69,2,40,11,2,40,71,2,46,72,2,9,120,3,40,11,2,3,45,73,2,16,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,22,74,2,9,122,3,1,72,2,40,16,2,40,74,2,46,75,2,9,120,3,40,252,1,3,45,76,2,17,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,40,74,2,22,77,2,9,122,3,1,75,2,40,21,2,40,77,2,46,78,2,9,120,3,40,21,2,3,45,79,2,18,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,40,74,2,40,77,2,22,80,2,9,122,3,1,78,2,40,252,1,40,80,2,46,81,2,9,120,3,40,196,1,3,22,82,2,9,149,3,1,81,2,40,160,0,46,83,2,9,120,3,40,201,1,3,45,84,2,2,40,82,2,22,85,2,9,149,3,1,83,2,40,160,0,40,85,2,46,86,2,9,120,3,40,32,2,3,45,87,2,3,40,82,2,40,85,2,22,88,2,9,149,3,1,86,2,40,160,0,40,88,2,46,89,2,9,120,3,40,241,1,3,45,90,2,4,40,82,2,40,85,2,40,88,2,22,91,2,9,149,3,1,89,2,40,168,0,40,91,2,46,92,2,9,120,3,40,246,1,3,45,93,2,5,40,82,2,40,85,2,40,88,2,40,91,2,22,94,2,9,149,3,1,92,2,40,168,0,40,94,2,46,95,2,9,120,3,40,60,2,3,45,96,2,6,40,82,2,40,85,2,40,88,2,40,91,2,40,94,2,22,97,2,9,149,3,1,95,2,40,168,0,40,97,2,46,98,2,9,120,3,40,196,1,3,22,99,2,9,161,3,1,98,2,40,196,1,46,100,2,9,120,3,40,201,1,3,45,101,2,2,40,99,2,22,102,2,9,161,3,1,100,2,40,201,1,40,102,2,46,103,2,9,120,3,40,32,2,3,45,104,2,3,40,99,2,40,102,2,22,105,2,9,161,3,1,103,2,40,32,2,40,105,2,46,106,2,9,120,3,40,241,1,3,45,107,2,4,40,99,2,40,102,2,40,105,2,22,108,2,9,161,3,1,106,2,40,241,1,40,108,2,46,109,2,9,120,3,40,246,1,3,45,110,2,5,40,99,2,40,102,2,40,105,2,40,108,2,22,111,2,9,161,3,1,109,2,40,246,1,40,111,2,46,112,2,9,120,3,40,60,2,3,45,113,2,6,40,99,2,40,102,2,40,105,2,40,108,2,40,111,2,22,114,2,9,161,3,1,112,2,40,60,2,40,114,2,46,115,2,9,57,0,43,116,2,169,3,3,46,117,2,9,69,0,40,116,2,3,22,118,2,9,174,3,2,115,2,117,2,43,119,2,183,3,46,120,2,9,57,0,43,121,2,189,3,3,46,122,2,9,69,0,40,121,2,3,45,123,2,2,40,118,2,22,124,2,9,174,3,2,120,2,122,2,40,119,2,40,124,2,46,125,2,9,57,0,43,126,2,195,3,3,46,127,2,9,69,0,40,126,2,3,45,128,2,3,40,118,2,40,124,2,22,129,2,9,174,3,2,125,2,127,2,40,119,2,40,129,2,46,130,2,9,57,0,43,131,2,201,3,3,46,132,2,9,69,0,40,131,2,3,45,133,2,4,40,118,2,40,124,2,40,129,2,22,134,2,9,174,3,2,130,2,132,2,40,119,2,40,134,2,46,135,2,9,57,0,43,136,2,207,3,3,46,137,2,9,69,0,40,136,2,3,45,138,2,5,40,118,2,40,124,2,40,129,2,40,134,2,22,139,2,9,174,3,2,135,2,137,2,40,119,2,40,139,2,46,140,2,9,57,0,43,141,2,214,3,3,46,142,2,9,69,0,40,141,2,3,45,143,2,6,40,118,2,40,124,2,40,129,2,40,134,2,40,139,2,22,144,2,9,174,3,2,140,2,142,2,40,119,2,40,144,2,46,145,2,9,57,0,40,116,2,3,46,146,2,9,69,0,40,116,2,3,22,147,2,9,220,3,2,145,2,146,2,40,119,2,46,148,2,9,57,0,40,121,2,3,46,149,2,9,69,0,40,121,2,3,45,150,2,2,40,147,2,22,151,2,9,220,3,2,148,2,149,2,40,119,2,40,151,2,46,152,2,9,57,0,40,126,2,3,46,153,2,9,69,0,40,126,2,3,45,154,2,3,40,147,2,40,151,2,22,155,2,9,220,3,2,152,2,153,2,40,119,2,40,155,2,46,156,2,9,57,0,40,141,2,3,46,157,2,9,69,0,40,141,2,3,45,158,2,4,40,147,2,40,151,2,40,155,2,22,159,2,9,220,3,2,156,2,157,2,40,119,2,40,159,2,46,160,2,9,57,0,40,131,2,3,46,161,2,9,69,0,40,131,2,3,45,162,2,5,40,147,2,40,151,2,40,155,2,40,159,2,22,163,2,9,220,3,2,160,2,161,2,40,119,2,40,163,2,46,164,2,9,57,0,40,136,2,3,46,165,2,9,69,0,40,136,2,3,45,166,2,6,40,147,2,40,151,2,40,155,2,40,159,2,40,163,2,22,167,2,9,220,3,2,164,2,165,2,40,119,2,40,167,2,46,168,2,9,57,0,40,116,2,3,46,169,2,9,69,0,40,116,2,3,22,170,2,9,234,3,2,168,2,169,2,40,119,2,46,171,2,9,57,0,40,121,2,3,46,172,2,9,69,0,40,121,2,3,45,173,2,2,40,170,2,22,174,2,9,234,3,2,171,2,172,2,40,119,2,40,174,2,46,175,2,9,57,0,40,126,2,3,46,176,2,9,69,0,40,126,2,3,45,177,2,3,40,170,2,40,174,2,22,178,2,9,234,3,2,175,2,176,2,40,119,2,40,178,2,46,179,2,9,57,0,40,141,2,3,46,180,2,9,69,0,40,141,2,3,45,181,2,4,40,170,2,40,174,2,40,178,2,22,182,2,9,234,3,2,179,2,180,2,40,119,2,40,182,2,46,183,2,9,57,0,40,131,2,3,46,184,2,9,69,0,40,131,2,3,45,185,2,5,40,170,2,40,174,2,40,178,2,40,182,2,22,186,2,9,234,3,2,183,2,184,2,40,119,2,40,186,2,46,187,2,9,57,0,40,136,2,3,46,188,2,9,69,0,40,136,2,3,45,189,2,6,40,170,2,40,174,2,40,178,2,40,182,2,40,186,2,22,190,2,9,234,3,2,187,2,188,2,40,119,2,40,190,2,46,191,2,9,57,0,40,116,2,3,46,192,2,9,69,0,40,116,2,3,22,193,2,9,246,3,2,191,2,192,2,40,119,2,46,194,2,9,57,0,40,121,2,3,46,195,2,9,69,0,40,121,2,3,45,196,2,2,40,193,2,22,197,2,9,246,3,2,194,2,195,2,40,119,2,40,197,2,46,198,2,9,57,0,40,126,2,3,46,199,2,9,69,0,40,126,2,3,45,200,2,3,40,193,2,40,197,2,22,201,2,9,246,3,2,198,2,199,2,40,119,2,40,201,2,46,202,2,9,57,0,40,141,2,3,46,203,2,9,69,0,40,141,2,3,45,204,2,4,40,193,2,40,197,2,40,201,2,22,205,2,9,246,3,2,202,2,203,2,40,119,2,40,205,2,46,206,2,9,57,0,40,131,2,3,46,207,2,9,69,0,40,131,2,3,45,208,2,5,40,193,2,40,197,2,40,201,2,40,205,2,22,209,2,9,246,3,2,206,2,207,2,40,119,2,40,209,2,46,210,2,9,57,0,40,136,2,3,46,211,2,9,69,0,40,136,2,3,45,212,2,6,40,193,2,40,197,2,40,201,2,40,205,2,40,209,2,22,213,2,9,246,3,2,210,2,211,2,40,119,2,40,213,2,46,214,2,9,57,0,40,116,2,3,46,215,2,9,69,0,40,116,2,3,22,216,2,9,7,4,2,214,2,215,2,40,119,2,46,217,2,9,57,0,40,121,2,3,46,218,2,9,69,0,40,121,2,3,45,219,2,2,40,216,2,22,220,2,9,7,4,2,217,2,218,2,40,119,2,40,220,2,46,221,2,9,57,0,40,126,2,3,46,222,2,9,69,0,40,126,2,3,45,223,2,3,40,216,2,40,220,2,22,224,2,9,7,4,2,221,2,222,2,40,119,2,40,224,2,46,225,2,9,57,0,40,141,2,3,46,226,2,9,69,0,40,141,2,3,45,227,2,4,40,216,2,40,220,2,40,224,2,22,228,2,9,7,4,2,225,2,226,2,40,119,2,40,228,2,46,229,2,9,57,0,40,131,2,3,46,230,2,9,69,0,40,131,2,3,45,231,2,5,40,216,2,40,220,2,40,224,2,40,228,2,22,232,2,9,7,4,2,229,2,230,2,40,119,2,40,232,2,46,233,2,9,57,0,40,136,2,3,46,234,2,9,69,0,40,136,2,3,45,235,2,6,40,216,2,40,220,2,40,224,2,40,228,2,40,232,2,22,236,2,9,7,4,2,233,2,234,2,40,119,2,40,236,2,46,237,2,9,57,0,40,119,2,3,46,238,2,9,69,0,40,119,2,3,45,239,2,7,40,216,2,40,220,2,40,224,2,40,228,2,40,232,2,40,236,2,22,240,2,9,7,4,2,237,2,238,2,40,119,2,40,240,2,46,241,2,9,57,0,40,116,2,3,46,242,2,9,69,0,40,116,2,3,22,243,2,9,13,4,2,241,2,242,2,40,119,2,46,244,2,9,57,0,40,121,2,3,46,245,2,9,69,0,40,121,2,3,45,246,2,2,40,243,2,22,247,2,9,13,4,2,244,2,245,2,40,119,2,40,247,2,46,248,2,9,57,0,40,126,2,3,46,249,2,9,69,0,40,126,2,3,45,250,2,3,40,243,2,40,247,2,22,251,2,9,13,4,2,248,2,249,2,40,119,2,40,251,2,46,252,2,9,57,0,40,141,2,3,46,253,2,9,69,0,40,141,2,3,45,254,2,4,40,243,2,40,247,2,40,251,2,22,255,2,9,13,4,2,252,2,253,2,40,119,2,40,255,2,46,0,3,9,57,0,40,131,2,3,46,1,3,9,69,0,40,131,2,3,45,2,3,5,40,243,2,40,247,2,40,251,2,40,255,2,22,3,3,9,13,4,2,0,3,1,3,40,119,2,40,3,3,46,4,3,9,57,0,40,136,2,3,46,5,3,9,69,0,40,136,2,3,45,6,3,6,40,243,2,40,247,2,40,251,2,40,255,2,40,3,3,22,7,3,9,13,4,2,4,3,5,3,40,119,2,40,7,3,46,8,3,9,57,0,40,119,2,3,46,9,3,9,69,0,40,119,2,3,45,10,3,7,40,243,2,40,247,2,40,251,2,40,255,2,40,3,3,40,7,3,22,11,3,9,13,4,2,8,3,9,3,40,119,2,40,11,3,46,12,3,9,57,0,40,119,2,3,22,13,3,9,22,4,1,12,3,43,14,3,26,4,46,15,3,9,57,0,40,119,2,3,22,16,3,9,31,4,1,15,3,40,14,3,46,17,3,9,57,0,40,119,2,3,22,18,3,9,35,4,1,17,3,40,119,2,46,19,3,9,93,1,40,117,0,3,22,20,3,9,39,4,1,19,3,40,117,0,46,21,3,9,93,1,40,90,1,3,45,22,3,2,40,20,3,22,23,3,9,39,4,1,21,3,40,117,0,40,23,3,46,24,3,9,93,1,40,117,0,3,22,25,3,9,48,4,1,24,3,40,117,0,46,26,3,9,93,1,40,90,1,3,45,27,3,2,40,25,3,22,28,3,9,48,4,1,26,3,40,117,0,40,28,3,46,29,3,9,93,1,40,117,0,3,22,30,3,9,56,4,1,29,3,40,117,0,46,31,3,9,93,1,40,90,1,3,45,32,3,2,40,30,3,22,33,3,9,56,4,1,31,3,40,117,0,40,33,3,46,34,3,9,64,4,43,35,3,72,4,3,46,36,3,9,82,4,43,37,3,82,4,3,22,38,3,9,90,4,2,34,3,36,3,43,39,3,104,4,46,40,3,9,82,4,43,41,3,114,4,3,22,42,3,9,130,4,1,40,3,43,43,3,142,4,46,44,3,9,82,4,43,45,3,147,4,3,46,46,3,9,159,4,40,160,0,3,22,47,3,9,161,4,2,44,3,46,3,40,248,1,46,48,3,9,82,4,40,45,3,3,46,49,3,9,159,4,40,160,0,3,46,50,3,9,168,4,40,160,0,3,45,51,3,2,40,47,3,22,52,3,9,161,4,3,48,3,49,3,50,3,40,248,1,40,52,3,46,53,3,9,82,4,43,54,3,173,4,3,46,55,3,9,159,4,40,108,1,3,45,56,3,3,40,47,3,40,52,3,22,57,3,9,161,4,2,53,3,55,3,40,248,1,40,57,3,46,58,3,9,82,4,43,59,3,185,4,3,46,60,3,9,159,4,40,108,1,3,45,61,3,4,40,47,3,40,52,3,40,57,3,22,62,3,9,161,4,2,58,3,60,3,43,63,3,196,4,40,62,3,46,64,3,9,82,4,43,65,3,201,4,3,46,66,3,9,159,4,40,108,1,3,46,67,3,9,168,4,40,160,0,3,45,68,3,5,40,47,3,40,52,3,40,57,3,40,62,3,22,69,3,9,161,4,3,64,3,66,3,67,3,40,248,1,40,69,3,46,70,3,9,82,4,40,65,3,3,46,71,3,9,159,4,40,108,1,3,45,72,3,6,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,22,73,3,9,161,4,2,70,3,71,3,40,248,1,40,73,3,46,74,3,9,82,4,40,41,3,3,46,75,3,9,159,4,40,108,1,3,45,76,3,7,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,22,77,3,9,161,4,2,74,3,75,3,40,248,1,40,77,3,46,78,3,9,82,4,40,41,3,3,46,79,3,9,159,4,40,150,1,3,45,80,3,8,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,22,81,3,9,161,4,2,78,3,79,3,40,248,1,40,81,3,46,82,3,9,220,4,43,83,3,228,4,3,22,84,3,9,241,4,1,82,3,40,248,1,46,85,3,9,220,4,43,86,3,253,4,3,46,87,3,9,161,4,40,203,0,3,45,88,3,2,40,84,3,22,89,3,9,241,4,2,85,3,87,3,40,248,1,40,89,3,46,90,3,9,82,4,40,45,3,3,46,91,3,9,159,4,40,108,1,3,45,92,3,9,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,22,93,3,9,161,4,2,90,3,91,3,40,248,1,40,93,3,46,94,3,9,82,4,40,45,3,3,46,95,3,9,159,4,40,108,1,3,46,96,3,9,168,4,40,160,0,3,45,97,3,10,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,22,98,3,9,161,4,3,94,3,95,3,96,3,40,248,1,40,98,3,46,99,3,9,82,4,40,54,3,3,46,100,3,9,159,4,40,150,1,3,45,101,3,11,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,40,98,3,22,102,3,9,161,4,2,99,3,100,3,40,248,1,40,102,3,46,103,3,9,82,4,40,54,3,3,46,104,3,9,159,4,40,150,1,3,46,105,3,9,168,4,40,160,0,3,45,106,3,12,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,40,98,3,40,102,3,22,107,3,9,161,4,3,103,3,104,3,105,3,40,248,1,40,107,3,46,108,3,9,12,5,43,109,3,18,5,3,46,110,3,9,159,4,40,43,3,3,22,111,3,9,26,5,2,108,3,110,3,40,114,1,46,112,3,9,12,5,43,113,3,36,5,3,46,114,3,9,159,4,40,43,3,3,45,115,3,2,40,111,3,22,116,3,9,26,5,2,112,3,114,3,40,63,3,40,116,3,46,117,3,9,250,1,40,3,0,3,22,118,3,9,45,5,1,117,3,40,3,0,46,119,3,9,250,1,40,3,0,3,22,120,3,9,50,5,1,119,3,40,3,0,46,121,3,9,250,1,40,47,0,3,45,122,3,2,40,118,3,22,123,3,9,45,5,1,121,3,40,47,0,40,123,3,46,124,3,9,250,1,40,47,0,3,45,125,3,2,40,120,3,22,126,3,9,50,5,1,124,3,40,47,0,40,126,3,46,127,3,9,250,1,40,3,0,3,22,128,3,9,55,5,1,127,3,40,3,0,46,129,3,9,250,1,40,47,0,3,45,130,3,2,40,128,3,22,131,3,9,55,5,1,129,3,40,47,0,40,131,3,46,132,3,9,62,5,40,160,0,3,46,133,3,9,161,4,40,203,0,3,22,134,3,9,74,5,2,132,3,133,3,40,160,0,46,135,3,9,62,5,40,108,1,3,46,136,3,9,161,4,40,203,0,3,45,137,3,2,40,134,3,22,138,3,9,74,5,2,135,3,136,3,40,108,1,40,138,3,46,139,3,9,62,5,40,150,1,3,46,140,3,9,161,4,40,203,0,3,45,141,3,3,40,134,3,40,138,3,22,142,3,9,74,5,2,139,3,140,3,40,150,1,40,142,3,46,143,3,9,62,5,40,114,1,3,46,144,3,9,161,4,40,203,0,3,45,145,3,4,40,134,3,40,138,3,40,142,3,22,146,3,9,74,5,2,143,3,144,3,40,114,1,40,146,3,46,147,3,9,62,5,40,160,0,3,46,148,3,9,94,5,40,108,1,3,22,149,3,9,101,5,2,147,3,148,3,40,160,0,46,150,3,9,62,5,40,108,1,3,46,151,3,9,94,5,40,108,1,3,45,152,3,2,40,149,3,22,153,3,9,101,5,2,150,3,151,3,40,108,1,40,153,3,46,154,3,9,62,5,40,150,1,3,46,155,3,9,94,5,40,108,1,3,45,156,3,3,40,149,3,40,153,3,22,157,3,9,101,5,2,154,3,155,3,40,150,1,40,157,3,46,158,3,9,62,5,40,114,1,3,46,159,3,9,94,5,40,108,1,3,45,160,3,4,40,149,3,40,153,3,40,157,3,22,161,3,9,101,5,2,158,3,159,3,40,114,1,40,161,3,46,162,3,9,121,5,40,248,1,3,46,163,3,9,125,5,40,248,1,3,22,164,3,9,129,5,2,162,3,163,3,40,248,1,46,165,3,9,121,5,40,248,1,3,46,166,3,9,125,5,40,248,1,3,22,167,3,9,141,5,2,165,3,166,3,40,248,1,46,168,3,9,121,5,40,248,1,3,46,169,3,9,125,5,40,248,1,3,22,170,3,9,151,5,2,168,3,169,3,40,248,1,46,171,3,9,121,5,40,248,1,3,46,172,3,9,125,5,40,248,1,3,22,173,3,9,161,5,2,171,3,172,3,40,248,1,46,174,3,9,121,5,40,248,1,3,46,175,3,9,125,5,40,248,1,3,22,176,3,9,176,5,2,174,3,175,3,40,248,1,46,177,3,9,121,5,40,248,1,3,46,178,3,9,125,5,40,248,1,3,22,179,3,9,191,5,2,177,3,178,3,40,248,1,46,180,3,9,121,5,40,248,1,3,46,181,3,9,125,5,40,248,1,3,22,182,3,9,204,5,2,180,3,181,3,40,248,1,46,183,3,9,121,5,40,248,1,3,46,184,3,9,125,5,40,248,1,3,22,185,3,9,217,5,2,183,3,184,3,40,248,1,46,186,3,9,121,5,40,248,1,3,46,187,3,9,125,5,40,248,1,3,22,188,3,9,231,5,2,186,3,187,3,40,248,1,46,189,3,9,121,5,40,248,1,3,46,190,3,9,125,5,40,248,1,3,22,191,3,9,245,5,2,189,3,190,3,40,248,1,46,192,3,9,121,5,40,248,1,3,46,193,3,9,125,5,40,248,1,3,22,194,3,9,4,6,2,192,3,193,3,40,248,1,46,195,3,9,121,5,40,248,1,3,46,196,3,9,125,5,40,248,1,3,22,197,3,9,19,6,2,195,3,196,3,40,248,1,46,198,3,9,121,5,40,248,1,3,46,199,3,9,125,5,40,248,1,3,22,200,3,9,29,6,2,198,3,199,3,40,248,1,46,201,3,9,121,5,40,248,1,3,46,202,3,9,125,5,40,248,1,3,22,203,3,9,40,6,2,201,3,202,3,40,248,1,46,204,3,9,121,5,40,248,1,3,46,205,3,9,125,5,40,248,1,3,22,206,3,9,55,6,2,204,3,205,3,40,248,1,46,207,3,9,68,6,40,237,1,3,46,208,3,9,70,6,40,237,1,3,22,209,3,9,72,6,2,207,3,208,3,40,168,0,46,210,3,9,121,5,40,248,1,3,46,211,3,9,125,5,40,248,1,3,22,212,3,9,97,6,2,210,3,211,3,40,248,1,46,213,3,9,121,5,40,248,1,3,46,214,3,9,125,5,40,248,1,3,22,215,3,9,111,6,2,213,3,214,3,40,248,1,46,216,3,9,121,5,40,248,1,3,46,217,3,9,125,5,40,248,1,3,22,218,3,9,124,6,2,216,3,217,3,40,248,1,46,219,3,9,138,6,40,168,0,3,46,220,3,9,70,6,40,168,0,3,22,221,3,9,140,6,2,219,3,220,3,40,168,0,46,222,3,9,68,6,40,237,1,3,46,223,3,9,70,6,40,237,1,3,22,224,3,9,156,6,2,222,3,223,3,40,168,0,46,225,3,9,121,5,40,248,1,3,46,226,3,9,125,5,40,248,1,3,22,227,3,9,179,6,2,225,3,226,3,40,248,1,46,228,3,9,68,6,40,237,1,3,46,229,3,9,70,6,40,237,1,3,22,230,3,9,197,6,2,228,3,229,3,40,168,0,46,231,3,9,121,5,40,248,1,3,46,232,3,9,125,5,40,248,1,3,22,233,3,9,219,6,2,231,3,232,3,40,248,1,46,234,3,9,121,5,40,248,1,3,46,235,3,9,125,5,40,248,1,3,22,236,3,9,236,6,2,234,3,235,3,40,248,1,46,237,3,9,68,6,40,237,1,3,46,238,3,9,70,6,40,237,1,3,22,239,3,9,253,6,2,237,3,238,3,40,168,0,46,240,3,9,121,5,40,248,1,3,46,241,3,9,125,5,40,248,1,3,22,242,3,9,19,7,2,240,3,241,3,40,248,1,46,243,3,9,121,5,40,248,1,3,46,244,3,9,125,5,40,248,1,3,22,245,3,9,36,7,2,243,3,244,3,40,248,1,46,246,3,9,121,5,40,248,1,3,46,247,3,9,125,5,40,248,1,3,22,248,3,9,53,7,2,246,3,247,3,40,248,1,46,249,3,9,121,5,40,248,1,3,46,250,3,9,125,5,40,248,1,3,22,251,3,9,69,7,2,249,3,250,3,40,248,1,46,252,3,9,84,7,40,154,1,3,22,253,3,9,90,7,1,252,3,40,168,0,46,254,3,9,113,7,40,154,1,3,46,255,3,9,125,7,40,168,0,3,46,0,4,9,131,7,40,154,1,3,22,1,4,9,140,7,3,254,3,255,3,0,4,40,154,1,46,2,4,9,84,7,40,154,1,3,22,3,4,9,167,7,1,2,4,40,168,0,46,4,4,9,191,7,40,154,1,3,46,5,4,9,201,7,40,168,0,3,22,6,4,9,205,7,2,4,4,5,4,40,154,1,46,7,4,9,240,7,40,154,1,3,46,8,4,9,252,7,40,154,1,3,22,9,4,9,5,8,2,7,4,8,4,40,154,1,46,10,4,9,121,5,40,248,1,3,46,11,4,9,125,5,40,248,1,3,22,12,4,9,33,8,2,10,4,11,4,40,248,1,46,13,4,9,121,5,40,248,1,3,46,14,4,9,125,5,40,248,1,3,22,15,4,9,43,8,2,13,4,14,4,40,248,1,46,16,4,9,121,5,40,248,1,3,46,17,4,9,125,5,40,248,1,3,22,18,4,9,60,8,2,16,4,17,4,40,248,1,46,19,4,9,121,5,40,248,1,3,46,20,4,9,125,5,40,248,1,3,22,21,4,9,72,8,2,19,4,20,4,40,248,1,46,22,4,9,89,8,40,1,0,3,46,23,4,9,121,5,40,248,1,3,46,24,4,9,125,5,40,248,1,3,22,25,4,9,94,8,3,22,4,23,4,24,4,40,248,1,46,26,4,9,84,7,40,248,1,3,22,27,4,9,100,8,1,26,4,40,248,1,46,28,4,9,84,7,40,114,1,3,22,29,4,9,109,8,1,28,4,40,114,1,46,30,4,9,250,1,40,150,1,3,22,31,4,9,124,8,1,30,4,40,108,1,135,0,2,0,0,0,90,7,196,3,167,7,202,3,72,6,152,3,140,7,200,3,5,8,208,3,205,7,205,3,197,6,173,3,156,6,167,3,140,6,164,3,253,6,182,3,167,0,114,0,64,0,60,0,106,0,82,0,31,4,229,2,22,4,227,2,59,0,57,0,100,0,79,0,71,0,67,0,112,0,85,0,39,4,235,2,94,8,224,3,129,5,107,3,60,8,217,3,219,6,176,3,179,6,170,3,111,6,158,3,36,7,188,3,151,5,113,3,4,6,137,3,204,5,125,3,231,5,131,3,176,5,119,3,53,7,191,3,236,6,179,3,33,8,211,3,124,6,161,3,72,8,220,3,40,6,146,3,69,7,194,3,97,6,155,3,29,6,143,3,43,8,214,3,55,6,149,3,19,7,185,3,141,5,110,3,245,5,134,3,191,5,122,3,217,5,128,3,161,5,116,3,19,6,140,3,214,0,147,0,17,1,249,0,49,0,51,0,90,0,73,0,119,2,142,1,45,5,65,3,50,5,68,3,149,3,61,2,99,2,128,1,108,2,135,1,7,4,197,2,122,0,92,0,130,0,98,0,161,2,157,1,48,4,240,2,56,4,245,2,99,1,78,1,186,0,127,0,159,1,90,1,219,0,152,0,163,1,94,1,141,2,149,1,55,5,73,3,234,3,147,2,246,3,170,2,26,5,58,3,114,1,80,1,101,5,103,3,74,5,88,3,161,3,78,2,155,0,107,0,87,1,76,1,81,1,74,1,169,1,97,1,86,2,121,1,174,3,101,2,220,3,124,2,126,0,95,0,135,0,101,0,90,4,249,2,198,2,177,1,255,0,220,0,247,0,197,0,34,1,37,1,231,0,167,0,242,0,174,0,131,2,147,1,35,4,231,2,13,4,224,2,215,2,247,1,58,2,115,1,203,1,101,1,237,1,105,1,184,1,99,1,224,1,103,1,118,0,89,0,124,8,230,3,31,0,45,0,173,2,164,1,185,2,173,1,198,0,137,0,204,0,142,0,161,4,51,3,23,1,254,0,181,0,122,0,45,0,48,0,85,0,70,0,70,1,71,1,140,0,104,0,53,1,52,1,241,4,33,3,53,0,54,0,95,0,76,0,130,4,251,2,122,3,44,2,192,0,132,0,139,1,82,1,71,2,117,1,12,2,109,1,43,2,113,1,252,1,107,1,28,2,111,1,100,8,226,3,109,8,228,3,12,44,21,164,3,2,42,0,0,0,0,1,35,6,40,248,1,1,18,0,0,0,0,1,0,21,167,3,2,42,0,0,0,0,1,35,49,165,3,0,1,0,21,170,3,2,42,0,0,0,0,1,35,49,169,3,0,1,0,21,173,3,2,42,0,0,0,0,1,35,1,49,171,3,0,57,1,1,18,0,0,128,63,58,39,49,171,3,0,1,3,40,168,0,59,49,172,3,0,40,248,1,40,248,1,1,0,21,176,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,175,3,0,1,3,40,168,0,59,49,174,3,0,40,248,1,57,49,175,3,0,40,248,1,1,0,21,179,3,2,42,0,0,0,0,1,35,44,36,129,8,3,0,44,1,49,177,3,0,76,6,40,248,1,1,18,0,0,0,0,40,14,3,6,40,248,1,1,18,0,0,0,0,1,49,177,3,0,59,39,49,178,3,0,1,3,40,248,1,1,49,177,3,0,59,39,49,178,3,0,1,3,40,248,1,1,0,21,182,3,2,42,0,0,0,0,1,35,20,40,248,1,179,3,2,49,181,3,0,49,180,3,0,1,1,179,3,21,185,3,2,42,0,0,0,0,1,35,1,1,18,0,0,128,63,58,39,49,184,3,0,1,3,40,168,0,59,49,183,3,0,40,248,1,1,0,21,188,3,2,42,0,0,0,0,1,35,1,1,18,0,0,128,63,58,39,49,186,3,0,1,3,40,168,0,59,49,187,3,0,40,248,1,1,0,21,191,3,2,42,0,0,0,0,1,35,1,1,39,49,190,3,0,1,3,59,49,189,3,0,40,248,1,57,1,1,18,0,0,128,63,58,39,49,189,3,0,1,3,40,168,0,59,49,190,3,0,40,248,1,40,248,1,1,0,21,194,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,193,3,0,1,3,40,168,0,59,49,192,3,0,40,248,1,57,1,39,49,192,3,0,1,3,59,49,193,3,0,40,248,1,40,248,1,1,0,21,197,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,196,3,0,1,3,40,168,0,59,49,195,3,0,40,248,1,57,1,1,18,0,0,128,63,58,39,49,195,3,0,1,3,40,168,0,59,49,196,3,0,40,248,1,40,248,1,1,0,21,200,3,2,42,0,0,0,0,1,35,20,40,248,1,196,0,2,1,49,198,3,0,57,49,199,3,0,40,248,1,18,0,0,128,63,1,0,21,203,3,2,42,0,0,0,0,1,35,1,49,201,3,0,59,49,202,3,0,40,248,1,1,0,21,206,3,2,42,0,0,0,0,1,35,1,49,204,3,0,57,1,1,18,0,0,128,63,58,49,204,3,0,40,248,1,59,49,205,3,0,40,248,1,40,248,1,1,0,21,209,3,2,42,0,0,0,0,1,35,44,1,1,18,0,0,0,64,59,39,49,208,3,0,1,0,40,168,0,81,39,49,208,3,0,1,1,40,14,3,1,1,18,0,0,0,64,59,39,49,207,3,0,1,0,40,168,0,59,39,49,208,3,0,1,0,40,168,0,1,1,39,49,207,3,0,1,1,59,39,49,208,3,0,1,1,40,168,0,58,1,1,18,0,0,0,64,59,1,39,49,208,3,0,1,1,58,39,49,208,3,0,1,0,40,168,0,40,168,0,59,1,39,49,207,3,0,1,1,58,39,49,207,3,0,1,0,40,168,0,40,168,0,40,168,0,1,0,21,212,3,2,42,1,0,46,32,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,48,40,248,1,1,47,32,4,0,6,40,248,1,4,20,40,168,0,209,3,2,39,49,210,3,0,2,0,3,39,49,211,3,0,2,0,3,20,40,168,0,209,3,2,39,49,210,3,0,2,1,3,39,49,211,3,0,2,1,3,20,40,168,0,209,3,2,39,49,210,3,0,2,2,3,39,49,211,3,0,2,2,3,1,39,49,210,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,210,3,0,1,3,40,168,0,59,39,49,211,3,0,1,3,40,168,0,40,168,0,15,1,39,49,32,4,2,3,0,1,2,82,1,1,39,49,211,3,0,3,0,1,2,59,1,18,0,0,128,63,58,39,49,210,3,0,1,3,40,168,0,40,154,1,57,1,39,49,210,3,0,3,0,1,2,59,1,18,0,0,128,63,58,39,49,211,3,0,1,3,40,168,0,40,154,1,40,154,1,40,154,1,35,49,32,4,0,1,1,209,3,21,215,3,2,42,1,0,46,33,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,48,40,248,1,1,47,33,4,0,20,40,248,1,173,3,2,49,213,3,0,49,214,3,0,15,1,39,49,33,4,1,3,0,1,2,75,20,40,154,1,192,0,2,39,49,33,4,0,3,0,1,2,1,1,1,18,0,0,128,63,58,39,49,214,3,0,1,3,40,168,0,59,39,49,213,3,0,3,0,1,2,40,154,1,57,39,49,214,3,0,3,0,1,2,40,154,1,40,154,1,35,49,33,4,0,1,1,173,3,21,218,3,2,42,1,0,46,34,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,48,40,248,1,1,47,34,4,0,20,40,248,1,173,3,2,49,216,3,0,49,217,3,0,15,1,39,49,34,4,1,3,0,1,2,75,20,40,154,1,216,0,2,39,49,34,4,0,3,0,1,2,1,1,1,18,0,0,128,63,58,39,49,217,3,0,1,3,40,168,0,59,39,49,216,3,0,3,0,1,2,40,154,1,57,39,49,217,3,0,3,0,1,2,40,154,1,40,154,1,35,49,34,4,0,1,1,173,3,21,221,3,2,42,0,0,0,0,1,35,44,36,182,8,3,0,1,49,219,3,0,60,1,49,220,3,0,57,18,119,204,43,50,40,168,0,40,168,0,1,49,219,3,0,60,49,220,3,0,40,168,0,1,0,21,224,3,2,42,0,0,0,0,1,23,0,1,39,49,223,3,0,1,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,1,2,42,1,0,46,35,4,9,234,8,40,168,0,2,1,0,234,8,0,0,2,48,40,168,0,1,47,35,4,0,1,39,49,222,3,0,1,1,58,39,49,222,3,0,1,0,40,168,0,23,0,1,49,35,4,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,1,1,39,49,222,3,0,1,1,59,39,49,223,3,0,1,1,40,168,0,57,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,223,3,0,1,0,59,1,18,0,0,128,63,58,39,49,222,3,0,1,1,40,168,0,40,168,0,40,168,0,1,2,42,0,0,0,0,2,15,1,49,35,4,1,75,20,40,168,0,192,0,2,39,49,223,3,0,1,1,20,40,168,0,221,3,2,1,39,49,223,3,0,1,0,59,39,49,222,3,0,1,1,40,168,0,49,35,4,0,40,168,0,35,1,1,1,49,35,4,0,59,39,49,222,3,0,1,1,40,168,0,57,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,223,3,0,1,0,59,1,18,0,0,128,63,58,39,49,222,3,0,1,1,40,168,0,40,168,0,40,168,0,1,1,1,1,221,3,21,227,3,2,42,0,0,0,0,1,35,6,40,248,1,4,20,40,168,0,224,3,2,39,49,225,3,0,2,0,3,39,49,226,3,0,2,0,3,20,40,168,0,224,3,2,39,49,225,3,0,2,1,3,39,49,226,3,0,2,1,3,20,40,168,0,224,3,2,39,49,225,3,0,2,2,3,39,49,226,3,0,2,2,3,1,39,49,225,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,225,3,0,1,3,40,168,0,59,39,49,226,3,0,1,3,40,168,0,40,168,0,1,1,224,3,21,230,3,2,42,0,0,0,0,1,23,0,1,39,49,229,3,0,1,1,76,39,49,229,3,0,1,0,40,14,3,2,42,0,0,0,0,1,35,1,1,1,39,49,228,3,0,1,1,59,39,49,229,3,0,1,1,40,168,0,57,1,39,49,228,3,0,1,0,59,1,18,0,0,128,63,58,39,49,229,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,40,168,0,1,23,0,1,39,49,228,3,0,1,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,1,2,42,1,0,46,36,4,9,234,8,40,168,0,2,1,0,234,8,0,0,2,48,40,168,0,1,47,36,4,0,20,40,168,0,216,0,2,18,0,0,0,0,1,39,49,229,3,0,1,1,58,20,40,168,0,221,3,2,1,1,39,49,229,3,0,1,1,58,39,49,229,3,0,1,0,40,168,0,59,39,49,228,3,0,1,1,40,168,0,39,49,228,3,0,1,0,40,168,0,35,1,1,1,49,36,4,0,59,39,49,228,3,0,1,1,40,168,0,57,1,39,49,228,3,0,1,0,59,1,18,0,0,128,63,58,39,49,229,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,40,168,0,1,1,1,221,3,21,233,3,2,42,0,0,0,0,1,35,6,40,248,1,4,20,40,168,0,230,3,2,39,49,231,3,0,2,0,3,39,49,232,3,0,2,0,3,20,40,168,0,230,3,2,39,49,231,3,0,2,1,3,39,49,232,3,0,2,1,3,20,40,168,0,230,3,2,39,49,231,3,0,2,2,3,39,49,232,3,0,2,2,3,1,39,49,231,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,231,3,0,1,3,40,168,0,59,39,49,232,3,0,1,3,40,168,0,40,168,0,1,1,230,3,21,236,3,2,42,0,0,0,0,1,35,20,40,248,1,212,3,2,49,235,3,0,49,234,3,0,1,1,212,3,21,239,3,2,42,0,0,0,0,1,23,0,1,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,81,39,49,237,3,0,1,1,40,14,3,2,42,0,0,0,0,1,35,1,1,20,40,168,0,221,3,2,1,1,39,49,238,3,0,1,0,59,39,49,238,3,0,1,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,39,49,238,3,0,1,1,57,1,1,18,0,0,128,63,58,39,49,238,3,0,1,1,40,168,0,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,1,39,49,238,3,0,1,0,59,1,1,34,58,39,49,237,3,0,1,1,57,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,18,0,0,128,63,40,168,0,40,168,0,40,168,0,1,23,0,1,1,18,0,0,128,64,59,39,49,238,3,0,1,0,40,168,0,81,39,49,238,3,0,1,1,40,14,3,2,42,4,0,46,37,4,9,240,8,40,168,0,2,46,38,4,9,245,8,40,168,0,2,46,39,4,9,250,8,40,168,0,2,46,40,4,9,0,9,40,168,0,2,4,0,245,8,1,0,240,8,0,0,0,9,3,0,250,8,2,0,5,48,40,168,0,1,47,37,4,0,1,39,49,238,3,0,1,0,59,39,49,238,3,0,1,0,40,168,0,48,40,168,0,1,47,38,4,0,1,49,37,4,0,59,39,49,238,3,0,1,0,40,168,0,48,40,168,0,1,47,39,4,0,1,39,49,238,3,0,1,1,59,39,49,238,3,0,1,1,40,168,0,48,40,168,0,1,47,40,4,0,1,49,39,4,0,59,39,49,238,3,0,1,1,40,168,0,35,20,40,168,0,221,3,2,1,1,1,1,49,39,4,0,59,1,39,49,237,3,0,1,0,58,1,39,49,238,3,0,1,0,59,1,1,1,18,0,0,64,64,59,39,49,237,3,0,1,1,40,168,0,58,1,18,0,0,192,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,58,18,0,0,128,63,40,168,0,40,168,0,40,168,0,40,168,0,57,1,1,1,18,0,0,64,65,59,39,49,238,3,0,1,1,40,168,0,59,49,37,4,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,1,18,0,0,128,65,59,49,38,4,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,49,40,4,0,59,39,49,237,3,0,1,0,40,168,0,40,168,0,49,39,4,0,1,2,42,0,0,0,0,1,35,1,1,1,1,39,49,238,3,0,1,0,59,1,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,18,0,0,128,63,40,168,0,40,168,0,57,39,49,237,3,0,1,0,40,168,0,58,1,20,40,168,0,108,0,1,1,39,49,238,3,0,1,1,59,39,49,238,3,0,1,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,39,49,238,3,0,1,1,59,39,49,237,3,0,1,0,40,168,0,40,168,0,1,1,1,221,3,21,242,3,2,42,0,0,0,0,1,35,44,1,39,49,241,3,0,1,3,76,18,0,0,0,0,40,14,3,49,240,3,0,6,40,248,1,4,20,40,168,0,239,3,2,39,49,240,3,0,2,0,3,39,49,241,3,0,2,0,3,20,40,168,0,239,3,2,39,49,240,3,0,2,1,3,39,49,241,3,0,2,1,3,20,40,168,0,239,3,2,39,49,240,3,0,2,2,3,39,49,241,3,0,2,2,3,1,39,49,240,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,240,3,0,1,3,40,168,0,59,39,49,241,3,0,1,3,40,168,0,40,168,0,1,1,239,3,21,245,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,39,49,243,3,0,3,0,1,2,57,39,49,244,3,0,3,0,1,2,40,154,1,58,1,18,0,0,0,64,59,20,40,154,1,192,0,2,1,39,49,243,3,0,3,0,1,2,59,39,49,244,3,0,1,3,40,154,1,1,39,49,244,3,0,3,0,1,2,59,39,49,243,3,0,1,3,40,154,1,40,154,1,40,154,1,1,39,49,243,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,243,3,0,1,3,40,168,0,59,39,49,244,3,0,1,3,40,168,0,40,168,0,1,0,21,248,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,39,49,247,3,0,3,0,1,2,57,39,49,246,3,0,3,0,1,2,40,154,1,58,1,1,18,0,0,0,64,59,39,49,247,3,0,3,0,1,2,40,154,1,59,39,49,246,3,0,3,0,1,2,40,154,1,40,154,1,1,39,49,246,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,246,3,0,1,3,40,168,0,59,39,49,247,3,0,1,3,40,168,0,40,168,0,1,0,21,251,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,1,1,18,0,0,128,63,58,39,49,249,3,0,1,3,40,168,0,59,39,49,250,3,0,3,0,1,2,40,154,1,57,1,1,18,0,0,128,63,58,39,49,250,3,0,1,3,40,168,0,59,39,49,249,3,0,3,0,1,2,40,154,1,40,154,1,57,1,39,49,249,3,0,3,0,1,2,59,39,49,250,3,0,3,0,1,2,40,154,1,40,154,1,1,39,49,249,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,249,3,0,1,3,40,168,0,59,39,49,250,3,0,1,3,40,168,0,40,168,0,1,0,21,253,3,2,42,0,0,0,0,1,35,20,40,168,0,148,1,2,6,40,154,1,3,18,154,153,153,62,18,61,10,23,63,18,174,71,225,61,49,252,3,0,1,0,21,1,4,2,42,4,0,46,41,4,9,6,9,40,168,0,2,46,42,4,9,175,8,40,154,1,2,46,43,4,9,10,9,40,168,0,2,46,44,4,9,18,9,40,168,0,2,4,0,6,9,0,0,18,9,3,0,10,9,2,0,175,8,1,0,6,48,40,168,0,1,47,41,4,0,20,40,168,0,253,3,1,49,0,4,0,48,40,154,1,1,47,42,4,0,1,1,49,41,4,0,58,20,40,168,0,253,3,1,49,254,3,0,40,168,0,57,49,254,3,0,40,154,1,48,40,168,0,1,47,43,4,0,20,40,168,0,192,0,2,20,40,168,0,192,0,2,39,49,42,4,0,1,0,39,49,42,4,0,1,1,39,49,42,4,0,1,2,48,40,168,0,1,47,44,4,0,20,40,168,0,216,0,2,20,40,168,0,216,0,2,39,49,42,4,0,1,0,39,49,42,4,0,1,1,39,49,42,4,0,1,2,23,0,1,1,49,43,4,0,79,18,0,0,0,0,40,14,3,70,1,49,41,4,0,77,49,43,4,0,40,14,3,40,14,3,2,42,0,0,0,0,1,15,1,49,42,4,1,75,1,49,41,4,0,57,1,1,1,49,42,4,0,58,49,41,4,0,40,154,1,59,49,41,4,0,40,154,1,60,1,49,41,4,0,58,49,43,4,0,40,168,0,40,154,1,40,154,1,40,154,1,1,50,35,44,1,1,49,44,4,0,78,49,255,3,0,40,14,3,70,1,49,44,4,0,77,49,41,4,0,40,14,3,40,14,3,1,49,41,4,0,57,1,1,1,49,42,4,0,58,49,41,4,0,40,154,1,59,1,49,255,3,0,58,49,41,4,0,40,168,0,40,154,1,60,1,49,44,4,0,58,49,41,4,0,40,168,0,40,154,1,40,154,1,49,42,4,0,1,1,253,3,21,3,4,2,42,0,0,0,0,1,35,1,20,40,168,0,216,0,2,20,40,168,0,216,0,2,39,49,2,4,0,1,0,39,49,2,4,0,1,1,39,49,2,4,0,1,2,58,20,40,168,0,192,0,2,20,40,168,0,192,0,2,39,49,2,4,0,1,0,39,49,2,4,0,1,1,39,49,2,4,0,1,2,40,168,0,1,0,21,6,4,2,42,0,0,0,0,1,35,44,1,39,49,4,4,0,1,0,79,39,49,4,4,0,1,2,40,14,3,6,40,154,1,3,18,0,0,0,0,1,1,49,5,4,0,59,1,39,49,4,4,0,1,1,58,39,49,4,4,0,1,0,40,168,0,40,168,0,60,1,39,49,4,4,0,1,2,58,39,49,4,4,0,1,0,40,168,0,40,168,0,49,5,4,0,6,40,154,1,1,18,0,0,0,0,1,0,21,9,4,2,42,1,0,46,45,4,9,201,7,40,168,0,2,1,0,201,7,0,0,3,48,40,168,0,1,47,45,4,0,20,40,168,0,3,4,1,49,8,4,0,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,1,40,14,3,2,42,0,0,0,0,1,23,0,1,39,49,7,4,0,1,1,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,0,1,2,75,20,40,154,1,6,4,2,39,49,7,4,0,3,0,1,2,49,45,4,0,40,154,1,1,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,0,2,1,75,20,40,154,1,6,4,2,39,49,7,4,0,3,0,2,1,49,45,4,0,40,154,1,1,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,2,0,1,75,20,40,154,1,6,4,2,39,49,7,4,0,3,2,0,1,49,45,4,0,40,154,1,1,1,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,1,0,2,75,20,40,154,1,6,4,2,39,49,7,4,0,3,1,0,2,49,45,4,0,40,154,1,1,23,0,1,39,49,7,4,0,1,1,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,1,2,0,75,20,40,154,1,6,4,2,39,49,7,4,0,3,1,2,0,49,45,4,0,40,154,1,1,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,2,1,0,75,20,40,154,1,6,4,2,39,49,7,4,0,3,2,1,0,49,45,4,0,40,154,1,1,35,49,7,4,0,1,2,3,4,6,4,21,12,4,2,42,3,0,46,46,4,9,125,7,40,168,0,2,46,47,4,9,26,9,40,154,1,2,46,48,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,48,40,168,0,1,47,46,4,0,1,39,49,11,4,0,1,3,59,39,49,10,4,0,1,3,40,168,0,48,40,154,1,1,47,47,4,0,1,39,49,10,4,0,3,0,1,2,59,39,49,11,4,0,1,3,40,154,1,48,40,154,1,1,47,48,4,0,1,39,49,11,4,0,3,0,1,2,59,39,49,10,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,20,40,154,1,9,4,2,49,47,4,0,49,48,4,0,49,46,4,0,49,48,4,0,57,39,49,11,4,0,3,0,1,2,40,154,1,58,49,48,4,0,40,154,1,57,39,49,10,4,0,3,0,1,2,40,154,1,58,49,47,4,0,40,154,1,1,1,39,49,10,4,0,1,3,57,39,49,11,4,0,1,3,40,168,0,58,49,46,4,0,40,168,0,1,2,1,4,9,4,21,15,4,2,42,3,0,46,49,4,9,125,7,40,168,0,2,46,50,4,9,26,9,40,154,1,2,46,51,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,48,40,168,0,1,47,49,4,0,1,39,49,14,4,0,1,3,59,39,49,13,4,0,1,3,40,168,0,48,40,154,1,1,47,50,4,0,1,39,49,13,4,0,3,0,1,2,59,39,49,14,4,0,1,3,40,154,1,48,40,154,1,1,47,51,4,0,1,39,49,14,4,0,3,0,1,2,59,39,49,13,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,20,40,154,1,9,4,2,49,51,4,0,49,50,4,0,49,49,4,0,49,51,4,0,57,39,49,14,4,0,3,0,1,2,40,154,1,58,49,51,4,0,40,154,1,57,39,49,13,4,0,3,0,1,2,40,154,1,58,49,50,4,0,40,154,1,1,1,39,49,13,4,0,1,3,57,39,49,14,4,0,1,3,40,168,0,58,49,49,4,0,40,168,0,1,2,1,4,9,4,21,18,4,2,42,3,0,46,52,4,9,125,7,40,168,0,2,46,53,4,9,26,9,40,154,1,2,46,54,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,48,40,168,0,1,47,52,4,0,1,39,49,17,4,0,1,3,59,39,49,16,4,0,1,3,40,168,0,48,40,154,1,1,47,53,4,0,1,39,49,16,4,0,3,0,1,2,59,39,49,17,4,0,1,3,40,154,1,48,40,154,1,1,47,54,4,0,1,39,49,17,4,0,3,0,1,2,59,39,49,16,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,49,53,4,0,49,52,4,0,49,54,4,0,57,39,49,17,4,0,3,0,1,2,40,154,1,58,49,54,4,0,40,154,1,57,39,49,16,4,0,3,0,1,2,40,154,1,58,49,53,4,0,40,154,1,1,1,39,49,16,4,0,1,3,57,39,49,17,4,0,1,3,40,168,0,58,49,52,4,0,40,168,0,1,1,1,4,21,21,4,2,42,3,0,46,55,4,9,125,7,40,168,0,2,46,56,4,9,26,9,40,154,1,2,46,57,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,48,40,168,0,1,47,55,4,0,1,39,49,20,4,0,1,3,59,39,49,19,4,0,1,3,40,168,0,48,40,154,1,1,47,56,4,0,1,39,49,19,4,0,3,0,1,2,59,39,49,20,4,0,1,3,40,154,1,48,40,154,1,1,47,57,4,0,1,39,49,20,4,0,3,0,1,2,59,39,49,19,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,49,57,4,0,49,55,4,0,49,56,4,0,57,39,49,20,4,0,3,0,1,2,40,154,1,58,49,57,4,0,40,154,1,57,39,49,19,4,0,3,0,1,2,40,154,1,58,49,56,4,0,40,154,1,1,1,39,49,19,4,0,1,3,57,39,49,20,4,0,1,3,40,168,0,58,49,55,4,0,40,168,0,1,1,1,4,13,2,0,42,29,0,46,58,4,29,8,1,34,9,40,1,0,0,46,59,4,29,8,1,41,9,40,1,0,0,46,60,4,29,8,1,46,9,40,1,0,0,46,61,4,29,8,1,51,9,40,1,0,0,46,62,4,29,8,1,60,9,40,1,0,0,46,63,4,29,8,1,69,9,40,1,0,0,46,64,4,29,8,1,76,9,40,1,0,0,46,65,4,29,8,1,83,9,40,1,0,0,46,66,4,29,8,1,91,9,40,1,0,0,46,67,4,29,8,1,99,9,40,1,0,0,46,68,4,29,8,1,108,9,40,1,0,0,46,69,4,29,8,1,117,9,40,1,0,0,46,70,4,29,8,1,122,9,40,1,0,0,46,71,4,29,8,1,128,9,40,1,0,0,46,72,4,29,8,1,138,9,40,1,0,0,46,73,4,29,8,1,146,9,40,1,0,0,46,74,4,29,8,1,155,9,40,1,0,0,46,75,4,29,8,1,163,9,40,1,0,0,46,76,4,29,8,1,172,9,40,1,0,0,46,77,4,29,8,1,184,9,40,1,0,0,46,78,4,29,8,1,195,9,40,1,0,0,46,79,4,29,8,1,206,9,40,1,0,0,46,80,4,29,8,1,217,9,40,1,0,0,46,81,4,29,8,1,229,9,40,1,0,0,46,82,4,29,8,1,240,9,40,1,0,0,46,83,4,29,8,1,250,9,40,1,0,0,46,84,4,29,8,1,255,9,40,1,0,0,46,85,4,29,8,1,11,10,40,1,0,0,46,86,4,29,8,1,18,10,40,1,0,0,29,0,34,9,0,0,11,10,27,0,184,9,19,0,172,9,18,0,155,9,16,0,217,9,22,0,46,9,2,0,108,9,10,0,76,9,6,0,91,9,8,0,60,9,4,0,229,9,23,0,195,9,20,0,250,9,25,0,163,9,17,0,18,10,28,0,128,9,13,0,240,9,24,0,146,9,15,0,122,9,12,0,255,9,26,0,138,9,14,0,206,9,21,0,41,9,1,0,99,9,9,0,69,9,5,0,83,9,7,0,51,9,3,0,117,9,11,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,21,25,4,2,42,0,0,0,0,2,38,0,42,0,0,0,0,49,22,4,0,29,27,0,0,0,0,1,35,20,40,248,1,164,3,2,49,23,4,0,49,24,4,0,27,1,0,0,0,1,35,20,40,248,1,167,3,2,49,23,4,0,49,24,4,0,27,2,0,0,0,1,35,20,40,248,1,170,3,2,49,23,4,0,49,24,4,0,27,3,0,0,0,1,35,20,40,248,1,173,3,2,49,23,4,0,49,24,4,0,27,4,0,0,0,1,35,20,40,248,1,176,3,2,49,23,4,0,49,24,4,0,27,5,0,0,0,1,35,20,40,248,1,179,3,2,49,23,4,0,49,24,4,0,27,6,0,0,0,1,35,20,40,248,1,182,3,2,49,23,4,0,49,24,4,0,27,7,0,0,0,1,35,20,40,248,1,185,3,2,49,23,4,0,49,24,4,0,27,8,0,0,0,1,35,20,40,248,1,188,3,2,49,23,4,0,49,24,4,0,27,9,0,0,0,1,35,20,40,248,1,191,3,2,49,23,4,0,49,24,4,0,27,10,0,0,0,1,35,20,40,248,1,194,3,2,49,23,4,0,49,24,4,0,27,11,0,0,0,1,35,20,40,248,1,197,3,2,49,23,4,0,49,24,4,0,27,12,0,0,0,1,35,20,40,248,1,200,3,2,49,23,4,0,49,24,4,0,27,13,0,0,0,1,35,20,40,248,1,203,3,2,49,23,4,0,49,24,4,0,27,14,0,0,0,1,35,20,40,248,1,206,3,2,49,23,4,0,49,24,4,0,27,15,0,0,0,1,35,20,40,248,1,212,3,2,49,23,4,0,49,24,4,0,27,16,0,0,0,1,35,20,40,248,1,215,3,2,49,23,4,0,49,24,4,0,27,17,0,0,0,1,35,20,40,248,1,218,3,2,49,23,4,0,49,24,4,0,27,18,0,0,0,1,35,20,40,248,1,227,3,2,49,23,4,0,49,24,4,0,27,19,0,0,0,1,35,20,40,248,1,233,3,2,49,23,4,0,49,24,4,0,27,20,0,0,0,1,35,20,40,248,1,236,3,2,49,23,4,0,49,24,4,0,27,21,0,0,0,1,35,20,40,248,1,242,3,2,49,23,4,0,49,24,4,0,27,22,0,0,0,1,35,20,40,248,1,245,3,2,49,23,4,0,49,24,4,0,27,23,0,0,0,1,35,20,40,248,1,248,3,2,49,23,4,0,49,24,4,0,27,24,0,0,0,1,35,20,40,248,1,251,3,2,49,23,4,0,49,24,4,0,27,25,0,0,0,1,35,20,40,248,1,12,4,2,49,23,4,0,49,24,4,0,27,26,0,0,0,1,35,20,40,248,1,15,4,2,49,23,4,0,49,24,4,0,27,27,0,0,0,1,35,20,40,248,1,18,4,2,49,23,4,0,49,24,4,0,27,28,0,0,0,1,35,20,40,248,1,21,4,2,49,23,4,0,49,24,4,0,35,6,40,248,1,1,18,0,0,0,0,1,29,164,3,167,3,170,3,173,3,176,3,179,3,182,3,185,3,188,3,191,3,194,3,197,3,200,3,203,3,206,3,212,3,215,3,218,3,227,3,233,3,236,3,242,3,245,3,248,3,251,3,12,4,15,4,18,4,21,4,21,27,4,2,42,0,0,0,0,1,35,6,40,248,1,2,1,39,49,26,4,0,3,0,1,2,60,20,40,168,0,216,0,2,39,49,26,4,0,1,3,18,23,183,209,56,40,154,1,39,49,26,4,0,1,3,1,0,21,29,4,2,42,0,0,0,0,1,35,6,40,114,1,2,1,39,49,28,4,0,3,0,1,2,60,20,40,160,0,208,0,2,39,49,28,4,0,1,3,18,23,183,209,56,40,150,1,39,49,28,4,0,1,3,1,0,21,31,4,2,42,0,0,0,0,1,35,1,39,49,30,4,0,2,0,1,60,39,49,30,4,0,1,2,40,108,1,1,0,};
+static constexpr size_t SKSL_INCLUDE_sksl_gpu_LENGTH = 23010;
+static uint8_t SKSL_INCLUDE_sksl_gpu[23010] = {28,10,11,83,107,66,108,101,110,100,77,111,100,101,7,100,101,103,114,101,101,115,8,36,103,101,110,84,121,112,101,7,114,97,100,105,97,110,115,5,97,110,103,108,101,3,115,105,110,3,99,111,115,3,116,97,110,1,120,4,97,115,105,110,4,97,99,111,115,1,121,4,97,116,97,110,8,121,95,111,118,101,114,95,120,4,115,105,110,104,4,99,111,115,104,4,116,97,110,104,5,97,115,105,110,104,5,97,99,111,115,104,5,97,116,97,110,104,3,112,111,119,3,101,120,112,3,108,111,103,4,101,120,112,50,4,108,111,103,50,4,115,113,114,116,9,36,103,101,110,72,84,121,112,101,11,105,110,118,101,114,115,101,115,113,114,116,3,97,98,115,9,36,103,101,110,73,84,121,112,101,4,115,105,103,110,5,102,108,111,111,114,5,116,114,117,110,99,5,114,111,117,110,100,9,114,111,117,110,100,69,118,101,110,4,99,101,105,108,5,102,114,97,99,116,5,102,108,111,97,116,3,109,111,100,4,104,97,108,102,1,105,4,109,111,100,102,3,109,105,110,3,105,110,116,3,109,97,120,6,109,105,110,86,97,108,6,109,97,120,86,97,108,5,99,108,97,109,112,8,115,97,116,117,114,97,116,101,1,97,3,109,105,120,9,36,103,101,110,66,84,121,112,101,4,101,100,103,101,4,115,116,101,112,5,101,100,103,101,48,5,101,100,103,101,49,10,115,109,111,111,116,104,115,116,101,112,5,105,115,110,97,110,5,105,115,105,110,102,5,118,97,108,117,101,14,102,108,111,97,116,66,105,116,115,84,111,73,110,116,14,105,110,116,66,105,116,115,84,111,102,108,111,97,116,9,36,103,101,110,85,84,121,112,101,15,117,105,110,116,66,105,116,115,84,111,102,108,111,97,116,1,98,1,99,3,102,109,97,5,102,114,101,120,112,5,108,100,101,120,112,1,118,6,102,108,111,97,116,50,13,112,97,99,107,85,110,111,114,109,50,120,49,54,4,117,105,110,116,13,112,97,99,107,83,110,111,114,109,50,120,49,54,6,102,108,111,97,116,52,12,112,97,99,107,85,110,111,114,109,52,120,56,12,112,97,99,107,83,110,111,114,109,52,120,56,1,112,15,117,110,112,97,99,107,85,110,111,114,109,50,120,49,54,15,117,110,112,97,99,107,83,110,111,114,109,50,120,49,54,14,117,110,112,97,99,107,85,110,111,114,109,52,120,56,14,117,110,112,97,99,107,83,110,111,114,109,52,120,56,12,112,97,99,107,72,97,108,102,50,120,49,54,14,117,110,112,97,99,107,72,97,108,102,50,120,49,54,6,108,101,110,103,116,104,2,112,48,2,112,49,8,100,105,115,116,97,110,99,101,3,100,111,116,6,102,108,111,97,116,51,5,99,114,111,115,115,5,104,97,108,102,51,9,110,111,114,109,97,108,105,122,101,10,102,116,114,97,110,115,102,111,114,109,1,78,1,73,4,78,114,101,102,11,102,97,99,101,102,111,114,119,97,114,100,7,114,101,102,108,101,99,116,3,101,116,97,7,114,101,102,114,97,99,116,4,36,109,97,116,14,109,97,116,114,105,120,67,111,109,112,77,117,108,116,1,114,12,111,117,116,101,114,80,114,111,100,117,99,116,8,102,108,111,97,116,50,120,50,8,102,108,111,97,116,51,120,51,8,102,108,111,97,116,52,120,51,8,102,108,111,97,116,50,120,51,8,102,108,111,97,116,51,120,50,8,102,108,111,97,116,50,120,52,8,102,108,111,97,116,52,120,50,8,102,108,111,97,116,51,120,52,5,104,97,108,102,50,7,104,97,108,102,50,120,50,7,104,97,108,102,51,120,51,5,104,97,108,102,52,7,104,97,108,102,52,120,51,7,104,97,108,102,50,120,51,7,104,97,108,102,51,120,50,7,104,97,108,102,50,120,52,7,104,97,108,102,52,120,50,7,104,97,108,102,51,120,52,1,109,9,116,114,97,110,115,112,111,115,101,8,102,108,111,97,116,52,120,52,7,104,97,108,102,52,120,52,11,100,101,116,101,114,109,105,110,97,110,116,7,105,110,118,101,114,115,101,4,36,118,101,99,8,108,101,115,115,84,104,97,110,5,36,98,118,101,99,5,36,104,118,101,99,5,36,105,118,101,99,5,36,115,118,101,99,6,36,117,115,118,101,99,5,36,117,118,101,99,13,108,101,115,115,84,104,97,110,69,113,117,97,108,11,103,114,101,97,116,101,114,84,104,97,110,16,103,114,101,97,116,101,114,84,104,97,110,69,113,117,97,108,5,101,113,117,97,108,8,110,111,116,69,113,117,97,108,3,97,110,121,4,98,111,111,108,3,97,108,108,3,110,111,116,8,98,105,116,67,111,117,110,116,7,102,105,110,100,76,83,66,7,102,105,110,100,77,83,66,7,116,101,120,116,117,114,101,9,116,101,120,116,117,114,101,50,68,7,115,97,109,112,108,101,114,13,109,97,107,101,83,97,109,112,108,101,114,50,68,9,115,97,109,112,108,101,114,50,68,15,36,103,115,97,109,112,108,101,114,50,68,82,101,99,116,11,116,101,120,116,117,114,101,83,105,122,101,4,105,110,116,50,11,36,103,115,97,109,112,108,101,114,49,68,1,80,6,115,97,109,112,108,101,4,98,105,97,115,11,36,103,115,97,109,112,108,101,114,50,68,10,105,115,97,109,112,108,101,114,50,68,4,105,110,116,52,18,115,97,109,112,108,101,114,69,120,116,101,114,110,97,108,79,69,83,7,115,117,98,112,97,115,115,12,115,117,98,112,97,115,115,73,110,112,117,116,11,115,117,98,112,97,115,115,76,111,97,100,14,115,117,98,112,97,115,115,73,110,112,117,116,77,83,5,105,109,97,103,101,7,105,109,97,103,101,50,68,9,105,109,97,103,101,76,111,97,100,8,105,105,109,97,103,101,50,68,4,100,70,100,120,4,100,70,100,121,6,102,119,105,100,116,104,11,105,110,116,101,114,112,111,108,97,110,116,19,105,110,116,101,114,112,111,108,97,116,101,65,116,83,97,109,112,108,101,6,111,102,102,115,101,116,19,105,110,116,101,114,112,111,108,97,116,101,65,116,79,102,102,115,101,116,3,115,114,99,3,100,115,116,11,98,108,101,110,100,95,99,108,101,97,114,9,98,108,101,110,100,95,115,114,99,9,98,108,101,110,100,95,100,115,116,14,98,108,101,110,100,95,115,114,99,95,111,118,101,114,14,98,108,101,110,100,95,100,115,116,95,111,118,101,114,12,98,108,101,110,100,95,115,114,99,95,105,110,12,98,108,101,110,100,95,100,115,116,95,105,110,13,98,108,101,110,100,95,115,114,99,95,111,117,116,13,98,108,101,110,100,95,100,115,116,95,111,117,116,14,98,108,101,110,100,95,115,114,99,95,97,116,111,112,14,98,108,101,110,100,95,100,115,116,95,97,116,111,112,9,98,108,101,110,100,95,120,111,114,10,98,108,101,110,100,95,112,108,117,115,14,98,108,101,110,100,95,109,111,100,117,108,97,116,101,12,98,108,101,110,100,95,115,99,114,101,101,110,1,115,1,100,24,95,98,108,101,110,100,95,111,118,101,114,108,97,121,95,99,111,109,112,111,110,101,110,116,13,98,108,101,110,100,95,111,118,101,114,108,97,121,12,98,108,101,110,100,95,100,97,114,107,101,110,13,98,108,101,110,100,95,108,105,103,104,116,101,110,1,110,15,95,103,117,97,114,100,101,100,95,100,105,118,105,100,101,22,95,99,111,108,111,114,95,100,111,100,103,101,95,99,111,109,112,111,110,101,110,116,17,98,108,101,110,100,95,99,111,108,111,114,95,100,111,100,103,101,21,95,99,111,108,111,114,95,98,117,114,110,95,99,111,109,112,111,110,101,110,116,16,98,108,101,110,100,95,99,111,108,111,114,95,98,117,114,110,16,98,108,101,110,100,95,104,97,114,100,95,108,105,103,104,116,21,95,115,111,102,116,95,108,105,103,104,116,95,99,111,109,112,111,110,101,110,116,16,98,108,101,110,100,95,115,111,102,116,95,108,105,103,104,116,16,98,108,101,110,100,95,100,105,102,102,101,114,101,110,99,101,15,98,108,101,110,100,95,101,120,99,108,117,115,105,111,110,14,98,108,101,110,100,95,109,117,108,116,105,112,108,121,5,99,111,108,111,114,22,95,98,108,101,110,100,95,99,111,108,111,114,95,108,117,109,105,110,97,110,99,101,11,104,117,101,83,97,116,67,111,108,111,114,5,97,108,112,104,97,8,108,117,109,67,111,108,111,114,26,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,108,117,109,105,110,97,110,99,101,23,95,98,108,101,110,100,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,9,109,105,110,77,105,100,77,97,120,3,115,97,116,34,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,95,104,101,108,112,101,114,11,104,117,101,76,117,109,67,111,108,111,114,8,115,97,116,67,111,108,111,114,27,95,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,9,98,108,101,110,100,95,104,117,101,16,98,108,101,110,100,95,115,97,116,117,114,97,116,105,111,110,11,98,108,101,110,100,95,99,111,108,111,114,16,98,108,101,110,100,95,108,117,109,105,110,111,115,105,116,121,4,109,111,100,101,5,98,108,101,110,100,8,117,110,112,114,101,109,117,108,14,117,110,112,114,101,109,117,108,95,102,108,111,97,116,4,112,114,111,106,45,115,107,95,67,97,112,115,46,105,110,66,108,101,110,100,77,111,100,101,115,70,97,105,108,82,97,110,100,111,109,108,121,70,111,114,65,108,108,90,101,114,111,86,101,99,6,114,101,115,117,108,116,51,115,107,95,67,97,112,115,46,109,117,115,116,71,117,97,114,100,68,105,118,105,115,105,111,110,69,118,101,110,65,102,116,101,114,69,120,112,108,105,99,105,116,90,101,114,111,67,104,101,99,107,5,100,101,108,116,97,4,68,83,113,100,4,68,67,117,98,5,68,97,83,113,100,5,68,97,67,117,98,3,108,117,109,7,109,105,110,67,111,109,112,7,109,97,120,67,111,109,112,3,115,100,97,3,100,115,97,6,107,67,108,101,97,114,4,107,83,114,99,4,107,68,115,116,8,107,83,114,99,79,118,101,114,8,107,68,115,116,79,118,101,114,6,107,83,114,99,73,110,6,107,68,115,116,73,110,7,107,83,114,99,79,117,116,7,107,68,115,116,79,117,116,8,107,83,114,99,65,84,111,112,8,107,68,115,116,65,84,111,112,4,107,88,111,114,5,107,80,108,117,115,9,107,77,111,100,117,108,97,116,101,7,107,83,99,114,101,101,110,8,107,79,118,101,114,108,97,121,7,107,68,97,114,107,101,110,8,107,76,105,103,104,116,101,110,11,107,67,111,108,111,114,68,111,100,103,101,10,107,67,111,108,111,114,66,117,114,110,10,107,72,97,114,100,76,105,103,104,116,10,107,83,111,102,116,76,105,103,104,116,11,107,68,105,102,102,101,114,101,110,99,101,10,107,69,120,99,108,117,115,105,111,110,9,107,77,117,108,116,105,112,108,121,4,107,72,117,101,11,107,83,97,116,117,114,97,116,105,111,110,6,107,67,111,108,111,114,11,107,76,117,109,105,110,111,115,105,116,121,42,231,3,14,1,0,2,0,46,2,0,9,14,0,43,3,0,22,0,3,22,4,0,9,31,0,1,2,0,40,3,0,46,5,0,9,39,0,40,3,0,3,22,6,0,9,45,0,1,5,0,40,3,0,46,7,0,9,39,0,40,3,0,3,22,8,0,9,49,0,1,7,0,40,3,0,46,9,0,9,39,0,40,3,0,3,22,10,0,9,53,0,1,9,0,40,3,0,46,11,0,9,57,0,40,3,0,3,22,12,0,9,59,0,1,11,0,40,3,0,46,13,0,9,57,0,40,3,0,3,22,14,0,9,64,0,1,13,0,40,3,0,46,15,0,9,69,0,40,3,0,3,46,16,0,9,57,0,40,3,0,3,22,17,0,9,71,0,2,15,0,16,0,40,3,0,46,18,0,9,76,0,40,3,0,3,45,19,0,2,40,17,0,22,20,0,9,71,0,1,18,0,40,3,0,40,20,0,46,21,0,9,57,0,40,3,0,3,22,22,0,9,85,0,1,21,0,40,3,0,46,23,0,9,57,0,40,3,0,3,22,24,0,9,90,0,1,23,0,40,3,0,46,25,0,9,57,0,40,3,0,3,22,26,0,9,95,0,1,25,0,40,3,0,46,27,0,9,57,0,40,3,0,3,22,28,0,9,100,0,1,27,0,40,3,0,46,29,0,9,57,0,40,3,0,3,22,30,0,9,106,0,1,29,0,40,3,0,46,31,0,9,57,0,40,3,0,3,22,32,0,9,112,0,1,31,0,40,3,0,46,33,0,9,57,0,40,3,0,3,46,34,0,9,69,0,40,3,0,3,22,35,0,9,118,0,2,33,0,34,0,40,3,0,46,36,0,9,57,0,40,3,0,3,22,37,0,9,122,0,1,36,0,40,3,0,46,38,0,9,57,0,40,3,0,3,22,39,0,9,126,0,1,38,0,40,3,0,46,40,0,9,57,0,40,3,0,3,22,41,0,9,130,0,1,40,0,40,3,0,46,42,0,9,57,0,40,3,0,3,22,43,0,9,135,0,1,42,0,40,3,0,46,44,0,9,57,0,40,3,0,3,22,45,0,9,140,0,1,44,0,40,3,0,46,46,0,9,14,0,43,47,0,145,0,3,45,48,0,2,40,4,0,22,49,0,9,31,0,1,46,0,40,47,0,40,49,0,46,50,0,9,39,0,40,47,0,3,45,51,0,2,40,6,0,22,52,0,9,45,0,1,50,0,40,47,0,40,52,0,46,53,0,9,39,0,40,47,0,3,45,54,0,2,40,8,0,22,55,0,9,49,0,1,53,0,40,47,0,40,55,0,46,56,0,9,39,0,40,47,0,3,45,57,0,2,40,10,0,22,58,0,9,53,0,1,56,0,40,47,0,40,58,0,46,59,0,9,57,0,40,47,0,3,45,60,0,2,40,12,0,22,61,0,9,59,0,1,59,0,40,47,0,40,61,0,46,62,0,9,57,0,40,47,0,3,45,63,0,2,40,14,0,22,64,0,9,64,0,1,62,0,40,47,0,40,64,0,46,65,0,9,69,0,40,47,0,3,46,66,0,9,57,0,40,47,0,3,45,67,0,3,40,17,0,40,20,0,22,68,0,9,71,0,2,65,0,66,0,40,47,0,40,68,0,46,69,0,9,76,0,40,47,0,3,45,70,0,4,40,17,0,40,20,0,40,68,0,22,71,0,9,71,0,1,69,0,40,47,0,40,71,0,46,72,0,9,57,0,40,47,0,3,45,73,0,2,40,22,0,22,74,0,9,85,0,1,72,0,40,47,0,40,74,0,46,75,0,9,57,0,40,47,0,3,45,76,0,2,40,24,0,22,77,0,9,90,0,1,75,0,40,47,0,40,77,0,46,78,0,9,57,0,40,47,0,3,45,79,0,2,40,26,0,22,80,0,9,95,0,1,78,0,40,47,0,40,80,0,46,81,0,9,57,0,40,47,0,3,45,82,0,2,40,28,0,22,83,0,9,100,0,1,81,0,40,47,0,40,83,0,46,84,0,9,57,0,40,47,0,3,45,85,0,2,40,30,0,22,86,0,9,106,0,1,84,0,40,47,0,40,86,0,46,87,0,9,57,0,40,47,0,3,45,88,0,2,40,32,0,22,89,0,9,112,0,1,87,0,40,47,0,40,89,0,46,90,0,9,57,0,40,47,0,3,46,91,0,9,69,0,40,47,0,3,45,92,0,2,40,35,0,22,93,0,9,118,0,2,90,0,91,0,40,47,0,40,93,0,46,94,0,9,57,0,40,47,0,3,45,95,0,2,40,37,0,22,96,0,9,122,0,1,94,0,40,47,0,40,96,0,46,97,0,9,57,0,40,47,0,3,45,98,0,2,40,39,0,22,99,0,9,126,0,1,97,0,40,47,0,40,99,0,46,100,0,9,57,0,40,47,0,3,45,101,0,2,40,41,0,22,102,0,9,130,0,1,100,0,40,47,0,40,102,0,46,103,0,9,57,0,40,47,0,3,45,104,0,2,40,43,0,22,105,0,9,135,0,1,103,0,40,47,0,40,105,0,46,106,0,9,57,0,40,47,0,3,45,107,0,2,40,45,0,22,108,0,9,140,0,1,106,0,40,47,0,40,108,0,46,109,0,9,57,0,40,3,0,3,22,110,0,9,155,0,1,109,0,40,3,0,46,111,0,9,57,0,40,3,0,3,22,112,0,9,167,0,1,111,0,40,3,0,46,113,0,9,57,0,40,47,0,3,45,114,0,2,40,112,0,22,115,0,9,167,0,1,113,0,40,47,0,40,115,0,46,116,0,9,57,0,43,117,0,171,0,3,45,118,0,3,40,112,0,40,115,0,22,119,0,9,167,0,1,116,0,40,117,0,40,119,0,46,120,0,9,57,0,40,3,0,3,22,121,0,9,181,0,1,120,0,40,3,0,46,122,0,9,57,0,40,47,0,3,45,123,0,2,40,121,0,22,124,0,9,181,0,1,122,0,40,47,0,40,124,0,46,125,0,9,57,0,40,117,0,3,45,126,0,3,40,121,0,40,124,0,22,127,0,9,181,0,1,125,0,40,117,0,40,127,0,46,128,0,9,57,0,40,3,0,3,22,129,0,9,186,0,1,128,0,40,3,0,46,130,0,9,57,0,40,47,0,3,45,131,0,2,40,129,0,22,132,0,9,186,0,1,130,0,40,47,0,40,132,0,46,133,0,9,57,0,40,3,0,3,22,134,0,9,192,0,1,133,0,40,3,0,46,135,0,9,57,0,40,47,0,3,45,136,0,2,40,134,0,22,137,0,9,192,0,1,135,0,40,47,0,40,137,0,46,138,0,9,57,0,40,3,0,3,22,139,0,9,198,0,1,138,0,40,3,0,46,140,0,9,57,0,40,47,0,3,45,141,0,2,40,139,0,22,142,0,9,198,0,1,140,0,40,47,0,40,142,0,46,143,0,9,57,0,40,3,0,3,22,144,0,9,204,0,1,143,0,40,3,0,46,145,0,9,57,0,40,47,0,3,45,146,0,2,40,144,0,22,147,0,9,204,0,1,145,0,40,47,0,40,147,0,46,148,0,9,57,0,40,3,0,3,22,149,0,9,214,0,1,148,0,40,3,0,46,150,0,9,57,0,40,47,0,3,45,151,0,2,40,149,0,22,152,0,9,214,0,1,150,0,40,47,0,40,152,0,46,153,0,9,57,0,40,3,0,3,22,154,0,9,219,0,1,153,0,40,3,0,46,155,0,9,57,0,40,47,0,3,45,156,0,2,40,154,0,22,157,0,9,219,0,1,155,0,40,47,0,40,157,0,46,158,0,9,57,0,40,3,0,3,46,159,0,9,69,0,43,160,0,225,0,3,22,161,0,9,231,0,2,158,0,159,0,40,3,0,46,162,0,9,57,0,40,3,0,3,46,163,0,9,69,0,40,3,0,3,45,164,0,2,40,161,0,22,165,0,9,231,0,2,162,0,163,0,40,3,0,40,165,0,46,166,0,9,57,0,40,47,0,3,46,167,0,9,69,0,43,168,0,235,0,3,45,169,0,3,40,161,0,40,165,0,22,170,0,9,231,0,2,166,0,167,0,40,47,0,40,170,0,46,171,0,9,57,0,40,47,0,3,46,172,0,9,69,0,40,47,0,3,45,173,0,4,40,161,0,40,165,0,40,170,0,22,174,0,9,231,0,2,171,0,172,0,40,47,0,40,174,0,46,175,0,9,57,0,40,3,0,3,46,176,0,29,8,4,240,0,40,3,0,3,22,177,0,9,242,0,2,175,0,176,0,40,3,0,46,178,0,9,57,0,40,47,0,3,46,179,0,29,8,4,240,0,40,47,0,3,45,180,0,2,40,177,0,22,181,0,9,242,0,2,178,0,179,0,40,47,0,40,181,0,46,182,0,9,57,0,40,3,0,3,46,183,0,9,69,0,40,3,0,3,22,184,0,9,247,0,2,182,0,183,0,40,3,0,46,185,0,9,57,0,40,3,0,3,46,186,0,9,69,0,40,160,0,3,45,187,0,2,40,184,0,22,188,0,9,247,0,2,185,0,186,0,40,3,0,40,188,0,46,189,0,9,57,0,40,47,0,3,46,190,0,9,69,0,40,47,0,3,45,191,0,3,40,184,0,40,188,0,22,192,0,9,247,0,2,189,0,190,0,40,47,0,40,192,0,46,193,0,9,57,0,40,47,0,3,46,194,0,9,69,0,40,168,0,3,45,195,0,4,40,184,0,40,188,0,40,192,0,22,196,0,9,247,0,2,193,0,194,0,40,47,0,40,196,0,46,197,0,9,57,0,40,117,0,3,46,198,0,9,69,0,40,117,0,3,45,199,0,5,40,184,0,40,188,0,40,192,0,40,196,0,22,200,0,9,247,0,2,197,0,198,0,40,117,0,40,200,0,46,201,0,9,57,0,40,117,0,3,46,202,0,9,69,0,43,203,0,251,0,3,45,204,0,6,40,184,0,40,188,0,40,192,0,40,196,0,40,200,0,22,205,0,9,247,0,2,201,0,202,0,40,117,0,40,205,0,46,206,0,9,57,0,40,3,0,3,46,207,0,9,69,0,40,3,0,3,22,208,0,9,255,0,2,206,0,207,0,40,3,0,46,209,0,9,57,0,40,3,0,3,46,210,0,9,69,0,40,160,0,3,45,211,0,2,40,208,0,22,212,0,9,255,0,2,209,0,210,0,40,3,0,40,212,0,46,213,0,9,57,0,40,47,0,3,46,214,0,9,69,0,40,47,0,3,45,215,0,3,40,208,0,40,212,0,22,216,0,9,255,0,2,213,0,214,0,40,47,0,40,216,0,46,217,0,9,57,0,40,47,0,3,46,218,0,9,69,0,40,168,0,3,45,219,0,4,40,208,0,40,212,0,40,216,0,22,220,0,9,255,0,2,217,0,218,0,40,47,0,40,220,0,46,221,0,9,57,0,40,117,0,3,46,222,0,9,69,0,40,117,0,3,45,223,0,5,40,208,0,40,212,0,40,216,0,40,220,0,22,224,0,9,255,0,2,221,0,222,0,40,117,0,40,224,0,46,225,0,9,57,0,40,117,0,3,46,226,0,9,69,0,40,203,0,3,45,227,0,6,40,208,0,40,212,0,40,216,0,40,220,0,40,224,0,22,228,0,9,255,0,2,225,0,226,0,40,117,0,40,228,0,46,229,0,9,57,0,40,3,0,3,46,230,0,9,3,1,40,3,0,3,46,231,0,9,10,1,40,3,0,3,22,232,0,9,17,1,3,229,0,230,0,231,0,40,3,0,46,233,0,9,57,0,40,3,0,3,46,234,0,9,3,1,40,160,0,3,46,235,0,9,10,1,40,160,0,3,45,236,0,2,40,232,0,22,237,0,9,17,1,3,233,0,234,0,235,0,40,3,0,40,237,0,46,238,0,9,57,0,40,47,0,3,46,239,0,9,3,1,40,47,0,3,46,240,0,9,10,1,40,47,0,3,45,241,0,3,40,232,0,40,237,0,22,242,0,9,17,1,3,238,0,239,0,240,0,40,47,0,40,242,0,46,243,0,9,57,0,40,47,0,3,46,244,0,9,3,1,40,168,0,3,46,245,0,9,10,1,40,168,0,3,45,246,0,4,40,232,0,40,237,0,40,242,0,22,247,0,9,17,1,3,243,0,244,0,245,0,40,47,0,40,247,0,46,248,0,9,57,0,40,117,0,3,46,249,0,9,3,1,40,117,0,3,46,250,0,9,10,1,40,117,0,3,45,251,0,5,40,232,0,40,237,0,40,242,0,40,247,0,22,252,0,9,17,1,3,248,0,249,0,250,0,40,117,0,40,252,0,46,253,0,9,57,0,40,117,0,3,46,254,0,9,3,1,40,203,0,3,46,255,0,9,10,1,40,203,0,3,45,0,1,6,40,232,0,40,237,0,40,242,0,40,247,0,40,252,0,22,1,1,9,17,1,3,253,0,254,0,255,0,40,117,0,40,1,1,46,2,1,9,57,0,40,3,0,3,22,3,1,9,23,1,1,2,1,40,3,0,46,4,1,9,57,0,40,47,0,3,45,5,1,2,40,3,1,22,6,1,9,23,1,1,4,1,40,47,0,40,6,1,46,7,1,9,57,0,40,3,0,3,46,8,1,9,69,0,40,3,0,3,46,9,1,9,32,1,40,3,0,3,22,10,1,9,34,1,3,7,1,8,1,9,1,40,3,0,46,11,1,9,57,0,40,3,0,3,46,12,1,9,69,0,40,3,0,3,46,13,1,9,32,1,40,160,0,3,45,14,1,2,40,10,1,22,15,1,9,34,1,3,11,1,12,1,13,1,40,3,0,40,15,1,46,16,1,9,57,0,40,47,0,3,46,17,1,9,69,0,40,47,0,3,46,18,1,9,32,1,40,47,0,3,45,19,1,3,40,10,1,40,15,1,22,20,1,9,34,1,3,16,1,17,1,18,1,40,47,0,40,20,1,46,21,1,9,57,0,40,47,0,3,46,22,1,9,69,0,40,47,0,3,46,23,1,9,32,1,40,168,0,3,45,24,1,4,40,10,1,40,15,1,40,20,1,22,25,1,9,34,1,3,21,1,22,1,23,1,40,47,0,40,25,1,46,26,1,9,57,0,40,3,0,3,46,27,1,9,69,0,40,3,0,3,46,28,1,9,32,1,43,29,1,38,1,3,45,30,1,5,40,10,1,40,15,1,40,20,1,40,25,1,22,31,1,9,34,1,3,26,1,27,1,28,1,40,3,0,40,31,1,46,32,1,9,57,0,40,47,0,3,46,33,1,9,69,0,40,47,0,3,46,34,1,9,32,1,40,29,1,3,45,35,1,6,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,22,36,1,9,34,1,3,32,1,33,1,34,1,40,47,0,40,36,1,46,37,1,9,57,0,40,117,0,3,46,38,1,9,69,0,40,117,0,3,46,39,1,9,32,1,40,29,1,3,45,40,1,7,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,40,36,1,22,41,1,9,34,1,3,37,1,38,1,39,1,40,117,0,40,41,1,46,42,1,9,57,0,40,29,1,3,46,43,1,9,69,0,40,29,1,3,46,44,1,9,32,1,40,29,1,3,45,45,1,8,40,10,1,40,15,1,40,20,1,40,25,1,40,31,1,40,36,1,40,41,1,22,46,1,9,34,1,3,42,1,43,1,44,1,40,29,1,40,46,1,46,47,1,9,48,1,40,3,0,3,46,48,1,9,57,0,40,3,0,3,22,49,1,9,53,1,2,47,1,48,1,40,3,0,46,50,1,9,48,1,40,160,0,3,46,51,1,9,57,0,40,3,0,3,45,52,1,2,40,49,1,22,53,1,9,53,1,2,50,1,51,1,40,3,0,40,53,1,46,54,1,9,48,1,40,47,0,3,46,55,1,9,57,0,40,47,0,3,45,56,1,3,40,49,1,40,53,1,22,57,1,9,53,1,2,54,1,55,1,40,47,0,40,57,1,46,58,1,9,48,1,40,168,0,3,46,59,1,9,57,0,40,47,0,3,45,60,1,4,40,49,1,40,53,1,40,57,1,22,61,1,9,53,1,2,58,1,59,1,40,47,0,40,61,1,46,62,1,9,58,1,40,3,0,3,46,63,1,9,64,1,40,3,0,3,46,64,1,9,57,0,40,3,0,3,22,65,1,9,70,1,3,62,1,63,1,64,1,40,3,0,46,66,1,9,58,1,40,160,0,3,46,67,1,9,64,1,40,160,0,3,46,68,1,9,57,0,40,3,0,3,45,69,1,2,40,65,1,22,70,1,9,70,1,3,66,1,67,1,68,1,40,3,0,40,70,1,46,71,1,9,58,1,40,47,0,3,46,72,1,9,64,1,40,47,0,3,46,73,1,9,57,0,40,47,0,3,45,74,1,3,40,65,1,40,70,1,22,75,1,9,70,1,3,71,1,72,1,73,1,40,47,0,40,75,1,46,76,1,9,58,1,40,168,0,3,46,77,1,9,64,1,40,168,0,3,46,78,1,9,57,0,40,47,0,3,45,79,1,4,40,65,1,40,70,1,40,75,1,22,80,1,9,70,1,3,76,1,77,1,78,1,40,47,0,40,80,1,46,81,1,9,57,0,40,3,0,3,22,82,1,9,81,1,1,81,1,40,29,1,46,83,1,9,57,0,40,3,0,3,22,84,1,9,87,1,1,83,1,40,29,1,46,85,1,9,93,1,40,3,0,3,22,86,1,9,99,1,1,85,1,40,117,0,46,87,1,9,93,1,40,117,0,3,22,88,1,9,114,1,1,87,1,40,3,0,46,89,1,9,93,1,43,90,1,129,1,3,22,91,1,9,139,1,1,89,1,40,3,0,46,92,1,9,32,1,40,3,0,3,46,93,1,9,155,1,40,3,0,3,46,94,1,9,157,1,40,3,0,3,22,95,1,9,159,1,3,92,1,93,1,94,1,40,3,0,46,96,1,9,32,1,40,47,0,3,46,97,1,9,155,1,40,47,0,3,46,98,1,9,157,1,40,47,0,3,45,99,1,2,40,95,1,22,100,1,9,159,1,3,96,1,97,1,98,1,40,47,0,40,100,1,46,101,1,9,57,0,40,3,0,3,46,102,1,29,8,4,122,0,40,117,0,3,22,103,1,30,8,0,16,0,0,163,1,2,101,1,102,1,40,3,0,46,104,1,9,57,0,40,3,0,3,46,105,1,29,8,2,122,0,40,117,0,3,22,106,1,9,169,1,2,104,1,105,1,40,3,0,46,107,1,9,175,1,43,108,1,177,1,3,22,109,1,9,184,1,1,107,1,43,110,1,198,1,46,111,1,9,175,1,40,108,1,3,22,112,1,9,203,1,1,111,1,40,110,1,46,113,1,9,175,1,43,114,1,217,1,3,22,115,1,9,224,1,1,113,1,40,110,1,46,116,1,9,175,1,40,114,1,3,22,117,1,9,237,1,1,116,1,40,110,1,46,118,1,9,250,1,40,110,1,3,22,119,1,9,252,1,1,118,1,40,108,1,46,120,1,9,250,1,40,110,1,3,22,121,1,9,12,2,1,120,1,40,108,1,46,122,1,9,250,1,40,110,1,3,22,123,1,9,28,2,1,122,1,40,114,1,46,124,1,9,250,1,40,110,1,3,22,125,1,9,43,2,1,124,1,40,114,1,46,126,1,9,175,1,40,108,1,3,22,127,1,9,58,2,1,126,1,40,110,1,46,128,1,9,175,1,40,110,1,3,22,129,1,9,71,2,1,128,1,40,108,1,46,130,1,9,57,0,40,3,0,3,22,131,1,9,86,2,1,130,1,40,160,0,46,132,1,9,57,0,40,47,0,3,45,133,1,2,40,131,1,22,134,1,9,86,2,1,132,1,40,168,0,40,134,1,46,135,1,9,93,2,40,3,0,3,46,136,1,9,96,2,40,3,0,3,22,137,1,9,99,2,2,135,1,136,1,40,160,0,46,138,1,9,93,2,40,47,0,3,46,139,1,9,96,2,40,47,0,3,45,140,1,2,40,137,1,22,141,1,9,99,2,2,138,1,139,1,40,168,0,40,141,1,46,142,1,9,57,0,40,3,0,3,46,143,1,9,69,0,40,3,0,3,22,144,1,9,108,2,2,142,1,143,1,40,160,0,46,145,1,9,57,0,40,47,0,3,46,146,1,9,69,0,40,47,0,3,45,147,1,2,40,144,1,22,148,1,9,108,2,2,145,1,146,1,40,168,0,40,148,1,46,149,1,9,57,0,43,150,1,112,2,3,46,151,1,9,69,0,40,150,1,3,22,152,1,9,119,2,2,149,1,151,1,40,150,1,46,153,1,9,57,0,43,154,1,125,2,3,46,155,1,9,69,0,40,154,1,3,45,156,1,2,40,152,1,22,157,1,9,119,2,2,153,1,155,1,40,154,1,40,157,1,46,158,1,9,57,0,40,3,0,3,22,159,1,9,131,2,1,158,1,40,3,0,46,160,1,9,57,0,40,47,0,3,45,161,1,2,40,159,1,22,162,1,9,131,2,1,160,1,40,47,0,40,162,1,22,163,1,9,141,2,0,40,114,1,46,164,1,9,152,2,40,3,0,3,46,165,1,9,154,2,40,3,0,3,46,166,1,9,156,2,40,3,0,3,22,167,1,9,161,2,3,164,1,165,1,166,1,40,3,0,46,168,1,9,152,2,40,47,0,3,46,169,1,9,154,2,40,47,0,3,46,170,1,9,156,2,40,47,0,3,45,171,1,2,40,167,1,22,172,1,9,161,2,3,168,1,169,1,170,1,40,47,0,40,172,1,46,173,1,9,154,2,40,3,0,3,46,174,1,9,152,2,40,3,0,3,22,175,1,9,173,2,2,173,1,174,1,40,3,0,46,176,1,9,154,2,40,47,0,3,46,177,1,9,152,2,40,47,0,3,45,178,1,2,40,175,1,22,179,1,9,173,2,2,176,1,177,1,40,47,0,40,179,1,46,180,1,9,154,2,40,3,0,3,46,181,1,9,152,2,40,3,0,3,46,182,1,9,181,2,40,160,0,3,22,183,1,9,185,2,3,180,1,181,1,182,1,40,3,0,46,184,1,9,154,2,40,47,0,3,46,185,1,9,152,2,40,47,0,3,46,186,1,9,181,2,40,160,0,3,45,187,1,2,40,183,1,22,188,1,9,185,2,3,184,1,185,1,186,1,40,47,0,40,188,1,46,189,1,9,57,0,43,190,1,193,2,3,46,191,1,9,69,0,40,190,1,3,22,192,1,9,198,2,2,189,1,191,1,40,190,1,46,193,1,9,157,1,40,108,1,3,46,194,1,9,213,2,40,108,1,3,22,195,1,9,215,2,2,193,1,194,1,43,196,1,228,2,46,197,1,9,157,1,40,150,1,3,46,198,1,9,213,2,40,150,1,3,45,199,1,2,40,195,1,22,200,1,9,215,2,2,197,1,198,1,43,201,1,237,2,40,200,1,46,202,1,9,157,1,40,114,1,3,46,203,1,9,213,2,40,114,1,3,45,204,1,3,40,195,1,40,200,1,22,205,1,9,215,2,2,202,1,203,1,43,206,1,246,2,40,205,1,46,207,1,9,157,1,40,150,1,3,46,208,1,9,213,2,40,108,1,3,45,209,1,4,40,195,1,40,200,1,40,205,1,22,210,1,9,215,2,2,207,1,208,1,43,211,1,255,2,40,210,1,46,212,1,9,157,1,40,108,1,3,46,213,1,9,213,2,40,150,1,3,45,214,1,5,40,195,1,40,200,1,40,205,1,40,210,1,22,215,1,9,215,2,2,212,1,213,1,43,216,1,8,3,40,215,1,46,217,1,9,157,1,40,114,1,3,46,218,1,9,213,2,40,108,1,3,45,219,1,6,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,22,220,1,9,215,2,2,217,1,218,1,43,221,1,17,3,40,220,1,46,222,1,9,157,1,40,108,1,3,46,223,1,9,213,2,40,114,1,3,45,224,1,7,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,22,225,1,9,215,2,2,222,1,223,1,43,226,1,26,3,40,225,1,46,227,1,9,157,1,40,114,1,3,46,228,1,9,213,2,40,150,1,3,45,229,1,8,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,22,230,1,9,215,2,2,227,1,228,1,43,231,1,35,3,40,230,1,46,232,1,9,157,1,40,150,1,3,46,233,1,9,213,2,40,114,1,3,45,234,1,9,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,22,235,1,9,215,2,2,232,1,233,1,40,206,1,40,235,1,46,236,1,9,157,1,43,237,1,44,3,3,46,238,1,9,213,2,40,237,1,3,45,239,1,10,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,22,240,1,9,215,2,2,236,1,238,1,43,241,1,50,3,40,240,1,46,242,1,9,157,1,40,154,1,3,46,243,1,9,213,2,40,154,1,3,45,244,1,11,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,22,245,1,9,215,2,2,242,1,243,1,43,246,1,58,3,40,245,1,46,247,1,9,157,1,43,248,1,66,3,3,46,249,1,9,213,2,40,248,1,3,45,250,1,12,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,22,251,1,9,215,2,2,247,1,249,1,43,252,1,72,3,40,251,1,46,253,1,9,157,1,40,154,1,3,46,254,1,9,213,2,40,237,1,3,45,255,1,13,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,22,0,2,9,215,2,2,253,1,254,1,43,1,2,80,3,40,0,2,46,2,2,9,157,1,40,237,1,3,46,3,2,9,213,2,40,154,1,3,45,4,2,14,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,22,5,2,9,215,2,2,2,2,3,2,43,6,2,88,3,40,5,2,46,7,2,9,157,1,40,248,1,3,46,8,2,9,213,2,40,237,1,3,45,9,2,15,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,22,10,2,9,215,2,2,7,2,8,2,43,11,2,96,3,40,10,2,46,12,2,9,157,1,40,237,1,3,46,13,2,9,213,2,40,248,1,3,45,14,2,16,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,22,15,2,9,215,2,2,12,2,13,2,43,16,2,104,3,40,15,2,46,17,2,9,157,1,40,248,1,3,46,18,2,9,213,2,40,154,1,3,45,19,2,17,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,40,15,2,22,20,2,9,215,2,2,17,2,18,2,43,21,2,112,3,40,20,2,46,22,2,9,157,1,40,154,1,3,46,23,2,9,213,2,40,248,1,3,45,24,2,18,40,195,1,40,200,1,40,205,1,40,210,1,40,215,1,40,220,1,40,225,1,40,230,1,40,235,1,40,240,1,40,245,1,40,251,1,40,0,2,40,5,2,40,10,2,40,15,2,40,20,2,22,25,2,9,215,2,2,22,2,23,2,40,252,1,40,25,2,46,26,2,9,120,3,40,196,1,3,22,27,2,9,122,3,1,26,2,40,196,1,46,28,2,9,120,3,40,201,1,3,45,29,2,2,40,27,2,22,30,2,9,122,3,1,28,2,40,201,1,40,30,2,46,31,2,9,120,3,43,32,2,132,3,3,45,33,2,3,40,27,2,40,30,2,22,34,2,9,122,3,1,31,2,40,32,2,40,34,2,46,35,2,9,120,3,40,216,1,3,45,36,2,4,40,27,2,40,30,2,40,34,2,22,37,2,9,122,3,1,35,2,40,211,1,40,37,2,46,38,2,9,120,3,40,211,1,3,45,39,2,5,40,27,2,40,30,2,40,34,2,40,37,2,22,40,2,9,122,3,1,38,2,40,216,1,40,40,2,46,41,2,9,120,3,40,226,1,3,45,42,2,6,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,22,43,2,9,122,3,1,41,2,40,221,1,40,43,2,46,44,2,9,120,3,40,221,1,3,45,45,2,7,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,22,46,2,9,122,3,1,44,2,40,226,1,40,46,2,46,47,2,9,120,3,40,206,1,3,45,48,2,8,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,22,49,2,9,122,3,1,47,2,40,231,1,40,49,2,46,50,2,9,120,3,40,231,1,3,45,51,2,9,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,22,52,2,9,122,3,1,50,2,40,206,1,40,52,2,46,53,2,9,120,3,40,241,1,3,45,54,2,10,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,22,55,2,9,122,3,1,53,2,40,241,1,40,55,2,46,56,2,9,120,3,40,246,1,3,45,57,2,11,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,22,58,2,9,122,3,1,56,2,40,246,1,40,58,2,46,59,2,9,120,3,43,60,2,141,3,3,45,61,2,12,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,22,62,2,9,122,3,1,59,2,40,60,2,40,62,2,46,63,2,9,120,3,40,6,2,3,45,64,2,13,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,22,65,2,9,122,3,1,63,2,40,1,2,40,65,2,46,66,2,9,120,3,40,1,2,3,45,67,2,14,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,22,68,2,9,122,3,1,66,2,40,6,2,40,68,2,46,69,2,9,120,3,40,16,2,3,45,70,2,15,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,22,71,2,9,122,3,1,69,2,40,11,2,40,71,2,46,72,2,9,120,3,40,11,2,3,45,73,2,16,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,22,74,2,9,122,3,1,72,2,40,16,2,40,74,2,46,75,2,9,120,3,40,252,1,3,45,76,2,17,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,40,74,2,22,77,2,9,122,3,1,75,2,40,21,2,40,77,2,46,78,2,9,120,3,40,21,2,3,45,79,2,18,40,27,2,40,30,2,40,34,2,40,37,2,40,40,2,40,43,2,40,46,2,40,49,2,40,52,2,40,55,2,40,58,2,40,62,2,40,65,2,40,68,2,40,71,2,40,74,2,40,77,2,22,80,2,9,122,3,1,78,2,40,252,1,40,80,2,46,81,2,9,120,3,40,196,1,3,22,82,2,9,149,3,1,81,2,40,160,0,46,83,2,9,120,3,40,201,1,3,45,84,2,2,40,82,2,22,85,2,9,149,3,1,83,2,40,160,0,40,85,2,46,86,2,9,120,3,40,32,2,3,45,87,2,3,40,82,2,40,85,2,22,88,2,9,149,3,1,86,2,40,160,0,40,88,2,46,89,2,9,120,3,40,241,1,3,45,90,2,4,40,82,2,40,85,2,40,88,2,22,91,2,9,149,3,1,89,2,40,168,0,40,91,2,46,92,2,9,120,3,40,246,1,3,45,93,2,5,40,82,2,40,85,2,40,88,2,40,91,2,22,94,2,9,149,3,1,92,2,40,168,0,40,94,2,46,95,2,9,120,3,40,60,2,3,45,96,2,6,40,82,2,40,85,2,40,88,2,40,91,2,40,94,2,22,97,2,9,149,3,1,95,2,40,168,0,40,97,2,46,98,2,9,120,3,40,196,1,3,22,99,2,9,161,3,1,98,2,40,196,1,46,100,2,9,120,3,40,201,1,3,45,101,2,2,40,99,2,22,102,2,9,161,3,1,100,2,40,201,1,40,102,2,46,103,2,9,120,3,40,32,2,3,45,104,2,3,40,99,2,40,102,2,22,105,2,9,161,3,1,103,2,40,32,2,40,105,2,46,106,2,9,120,3,40,241,1,3,45,107,2,4,40,99,2,40,102,2,40,105,2,22,108,2,9,161,3,1,106,2,40,241,1,40,108,2,46,109,2,9,120,3,40,246,1,3,45,110,2,5,40,99,2,40,102,2,40,105,2,40,108,2,22,111,2,9,161,3,1,109,2,40,246,1,40,111,2,46,112,2,9,120,3,40,60,2,3,45,113,2,6,40,99,2,40,102,2,40,105,2,40,108,2,40,111,2,22,114,2,9,161,3,1,112,2,40,60,2,40,114,2,46,115,2,9,57,0,43,116,2,169,3,3,46,117,2,9,69,0,40,116,2,3,22,118,2,9,174,3,2,115,2,117,2,43,119,2,183,3,46,120,2,9,57,0,43,121,2,189,3,3,46,122,2,9,69,0,40,121,2,3,45,123,2,2,40,118,2,22,124,2,9,174,3,2,120,2,122,2,40,119,2,40,124,2,46,125,2,9,57,0,43,126,2,195,3,3,46,127,2,9,69,0,40,126,2,3,45,128,2,3,40,118,2,40,124,2,22,129,2,9,174,3,2,125,2,127,2,40,119,2,40,129,2,46,130,2,9,57,0,43,131,2,201,3,3,46,132,2,9,69,0,40,131,2,3,45,133,2,4,40,118,2,40,124,2,40,129,2,22,134,2,9,174,3,2,130,2,132,2,40,119,2,40,134,2,46,135,2,9,57,0,43,136,2,207,3,3,46,137,2,9,69,0,40,136,2,3,45,138,2,5,40,118,2,40,124,2,40,129,2,40,134,2,22,139,2,9,174,3,2,135,2,137,2,40,119,2,40,139,2,46,140,2,9,57,0,43,141,2,214,3,3,46,142,2,9,69,0,40,141,2,3,45,143,2,6,40,118,2,40,124,2,40,129,2,40,134,2,40,139,2,22,144,2,9,174,3,2,140,2,142,2,40,119,2,40,144,2,46,145,2,9,57,0,40,116,2,3,46,146,2,9,69,0,40,116,2,3,22,147,2,9,220,3,2,145,2,146,2,40,119,2,46,148,2,9,57,0,40,121,2,3,46,149,2,9,69,0,40,121,2,3,45,150,2,2,40,147,2,22,151,2,9,220,3,2,148,2,149,2,40,119,2,40,151,2,46,152,2,9,57,0,40,126,2,3,46,153,2,9,69,0,40,126,2,3,45,154,2,3,40,147,2,40,151,2,22,155,2,9,220,3,2,152,2,153,2,40,119,2,40,155,2,46,156,2,9,57,0,40,141,2,3,46,157,2,9,69,0,40,141,2,3,45,158,2,4,40,147,2,40,151,2,40,155,2,22,159,2,9,220,3,2,156,2,157,2,40,119,2,40,159,2,46,160,2,9,57,0,40,131,2,3,46,161,2,9,69,0,40,131,2,3,45,162,2,5,40,147,2,40,151,2,40,155,2,40,159,2,22,163,2,9,220,3,2,160,2,161,2,40,119,2,40,163,2,46,164,2,9,57,0,40,136,2,3,46,165,2,9,69,0,40,136,2,3,45,166,2,6,40,147,2,40,151,2,40,155,2,40,159,2,40,163,2,22,167,2,9,220,3,2,164,2,165,2,40,119,2,40,167,2,46,168,2,9,57,0,40,116,2,3,46,169,2,9,69,0,40,116,2,3,22,170,2,9,234,3,2,168,2,169,2,40,119,2,46,171,2,9,57,0,40,121,2,3,46,172,2,9,69,0,40,121,2,3,45,173,2,2,40,170,2,22,174,2,9,234,3,2,171,2,172,2,40,119,2,40,174,2,46,175,2,9,57,0,40,126,2,3,46,176,2,9,69,0,40,126,2,3,45,177,2,3,40,170,2,40,174,2,22,178,2,9,234,3,2,175,2,176,2,40,119,2,40,178,2,46,179,2,9,57,0,40,141,2,3,46,180,2,9,69,0,40,141,2,3,45,181,2,4,40,170,2,40,174,2,40,178,2,22,182,2,9,234,3,2,179,2,180,2,40,119,2,40,182,2,46,183,2,9,57,0,40,131,2,3,46,184,2,9,69,0,40,131,2,3,45,185,2,5,40,170,2,40,174,2,40,178,2,40,182,2,22,186,2,9,234,3,2,183,2,184,2,40,119,2,40,186,2,46,187,2,9,57,0,40,136,2,3,46,188,2,9,69,0,40,136,2,3,45,189,2,6,40,170,2,40,174,2,40,178,2,40,182,2,40,186,2,22,190,2,9,234,3,2,187,2,188,2,40,119,2,40,190,2,46,191,2,9,57,0,40,116,2,3,46,192,2,9,69,0,40,116,2,3,22,193,2,9,246,3,2,191,2,192,2,40,119,2,46,194,2,9,57,0,40,121,2,3,46,195,2,9,69,0,40,121,2,3,45,196,2,2,40,193,2,22,197,2,9,246,3,2,194,2,195,2,40,119,2,40,197,2,46,198,2,9,57,0,40,126,2,3,46,199,2,9,69,0,40,126,2,3,45,200,2,3,40,193,2,40,197,2,22,201,2,9,246,3,2,198,2,199,2,40,119,2,40,201,2,46,202,2,9,57,0,40,141,2,3,46,203,2,9,69,0,40,141,2,3,45,204,2,4,40,193,2,40,197,2,40,201,2,22,205,2,9,246,3,2,202,2,203,2,40,119,2,40,205,2,46,206,2,9,57,0,40,131,2,3,46,207,2,9,69,0,40,131,2,3,45,208,2,5,40,193,2,40,197,2,40,201,2,40,205,2,22,209,2,9,246,3,2,206,2,207,2,40,119,2,40,209,2,46,210,2,9,57,0,40,136,2,3,46,211,2,9,69,0,40,136,2,3,45,212,2,6,40,193,2,40,197,2,40,201,2,40,205,2,40,209,2,22,213,2,9,246,3,2,210,2,211,2,40,119,2,40,213,2,46,214,2,9,57,0,40,116,2,3,46,215,2,9,69,0,40,116,2,3,22,216,2,9,7,4,2,214,2,215,2,40,119,2,46,217,2,9,57,0,40,121,2,3,46,218,2,9,69,0,40,121,2,3,45,219,2,2,40,216,2,22,220,2,9,7,4,2,217,2,218,2,40,119,2,40,220,2,46,221,2,9,57,0,40,126,2,3,46,222,2,9,69,0,40,126,2,3,45,223,2,3,40,216,2,40,220,2,22,224,2,9,7,4,2,221,2,222,2,40,119,2,40,224,2,46,225,2,9,57,0,40,141,2,3,46,226,2,9,69,0,40,141,2,3,45,227,2,4,40,216,2,40,220,2,40,224,2,22,228,2,9,7,4,2,225,2,226,2,40,119,2,40,228,2,46,229,2,9,57,0,40,131,2,3,46,230,2,9,69,0,40,131,2,3,45,231,2,5,40,216,2,40,220,2,40,224,2,40,228,2,22,232,2,9,7,4,2,229,2,230,2,40,119,2,40,232,2,46,233,2,9,57,0,40,136,2,3,46,234,2,9,69,0,40,136,2,3,45,235,2,6,40,216,2,40,220,2,40,224,2,40,228,2,40,232,2,22,236,2,9,7,4,2,233,2,234,2,40,119,2,40,236,2,46,237,2,9,57,0,40,119,2,3,46,238,2,9,69,0,40,119,2,3,45,239,2,7,40,216,2,40,220,2,40,224,2,40,228,2,40,232,2,40,236,2,22,240,2,9,7,4,2,237,2,238,2,40,119,2,40,240,2,46,241,2,9,57,0,40,116,2,3,46,242,2,9,69,0,40,116,2,3,22,243,2,9,13,4,2,241,2,242,2,40,119,2,46,244,2,9,57,0,40,121,2,3,46,245,2,9,69,0,40,121,2,3,45,246,2,2,40,243,2,22,247,2,9,13,4,2,244,2,245,2,40,119,2,40,247,2,46,248,2,9,57,0,40,126,2,3,46,249,2,9,69,0,40,126,2,3,45,250,2,3,40,243,2,40,247,2,22,251,2,9,13,4,2,248,2,249,2,40,119,2,40,251,2,46,252,2,9,57,0,40,141,2,3,46,253,2,9,69,0,40,141,2,3,45,254,2,4,40,243,2,40,247,2,40,251,2,22,255,2,9,13,4,2,252,2,253,2,40,119,2,40,255,2,46,0,3,9,57,0,40,131,2,3,46,1,3,9,69,0,40,131,2,3,45,2,3,5,40,243,2,40,247,2,40,251,2,40,255,2,22,3,3,9,13,4,2,0,3,1,3,40,119,2,40,3,3,46,4,3,9,57,0,40,136,2,3,46,5,3,9,69,0,40,136,2,3,45,6,3,6,40,243,2,40,247,2,40,251,2,40,255,2,40,3,3,22,7,3,9,13,4,2,4,3,5,3,40,119,2,40,7,3,46,8,3,9,57,0,40,119,2,3,46,9,3,9,69,0,40,119,2,3,45,10,3,7,40,243,2,40,247,2,40,251,2,40,255,2,40,3,3,40,7,3,22,11,3,9,13,4,2,8,3,9,3,40,119,2,40,11,3,46,12,3,9,57,0,40,119,2,3,22,13,3,9,22,4,1,12,3,43,14,3,26,4,46,15,3,9,57,0,40,119,2,3,22,16,3,9,31,4,1,15,3,40,14,3,46,17,3,9,57,0,40,119,2,3,22,18,3,9,35,4,1,17,3,40,119,2,46,19,3,9,93,1,40,117,0,3,22,20,3,9,39,4,1,19,3,40,117,0,46,21,3,9,93,1,40,90,1,3,45,22,3,2,40,20,3,22,23,3,9,39,4,1,21,3,40,117,0,40,23,3,46,24,3,9,93,1,40,117,0,3,22,25,3,9,48,4,1,24,3,40,117,0,46,26,3,9,93,1,40,90,1,3,45,27,3,2,40,25,3,22,28,3,9,48,4,1,26,3,40,117,0,40,28,3,46,29,3,9,93,1,40,117,0,3,22,30,3,9,56,4,1,29,3,40,117,0,46,31,3,9,93,1,40,90,1,3,45,32,3,2,40,30,3,22,33,3,9,56,4,1,31,3,40,117,0,40,33,3,46,34,3,9,64,4,43,35,3,72,4,3,46,36,3,9,82,4,43,37,3,82,4,3,22,38,3,9,90,4,2,34,3,36,3,43,39,3,104,4,46,40,3,9,82,4,43,41,3,114,4,3,22,42,3,9,130,4,1,40,3,43,43,3,142,4,46,44,3,9,82,4,43,45,3,147,4,3,46,46,3,9,159,4,40,160,0,3,22,47,3,9,161,4,2,44,3,46,3,40,248,1,46,48,3,9,82,4,40,45,3,3,46,49,3,9,159,4,40,160,0,3,46,50,3,9,168,4,40,160,0,3,45,51,3,2,40,47,3,22,52,3,9,161,4,3,48,3,49,3,50,3,40,248,1,40,52,3,46,53,3,9,82,4,43,54,3,173,4,3,46,55,3,9,159,4,40,108,1,3,45,56,3,3,40,47,3,40,52,3,22,57,3,9,161,4,2,53,3,55,3,40,248,1,40,57,3,46,58,3,9,82,4,43,59,3,185,4,3,46,60,3,9,159,4,40,108,1,3,45,61,3,4,40,47,3,40,52,3,40,57,3,22,62,3,9,161,4,2,58,3,60,3,43,63,3,196,4,40,62,3,46,64,3,9,82,4,43,65,3,201,4,3,46,66,3,9,159,4,40,108,1,3,46,67,3,9,168,4,40,160,0,3,45,68,3,5,40,47,3,40,52,3,40,57,3,40,62,3,22,69,3,9,161,4,3,64,3,66,3,67,3,40,248,1,40,69,3,46,70,3,9,82,4,40,65,3,3,46,71,3,9,159,4,40,108,1,3,45,72,3,6,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,22,73,3,9,161,4,2,70,3,71,3,40,248,1,40,73,3,46,74,3,9,82,4,40,41,3,3,46,75,3,9,159,4,40,108,1,3,45,76,3,7,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,22,77,3,9,161,4,2,74,3,75,3,40,248,1,40,77,3,46,78,3,9,82,4,40,41,3,3,46,79,3,9,159,4,40,150,1,3,45,80,3,8,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,22,81,3,9,161,4,2,78,3,79,3,40,248,1,40,81,3,46,82,3,9,220,4,43,83,3,228,4,3,22,84,3,9,241,4,1,82,3,40,248,1,46,85,3,9,220,4,43,86,3,253,4,3,46,87,3,9,161,4,40,203,0,3,45,88,3,2,40,84,3,22,89,3,9,241,4,2,85,3,87,3,40,248,1,40,89,3,46,90,3,9,82,4,40,45,3,3,46,91,3,9,159,4,40,108,1,3,45,92,3,9,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,22,93,3,9,161,4,2,90,3,91,3,40,248,1,40,93,3,46,94,3,9,82,4,40,45,3,3,46,95,3,9,159,4,40,108,1,3,46,96,3,9,168,4,40,160,0,3,45,97,3,10,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,22,98,3,9,161,4,3,94,3,95,3,96,3,40,248,1,40,98,3,46,99,3,9,82,4,40,54,3,3,46,100,3,9,159,4,40,150,1,3,45,101,3,11,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,40,98,3,22,102,3,9,161,4,2,99,3,100,3,40,248,1,40,102,3,46,103,3,9,82,4,40,54,3,3,46,104,3,9,159,4,40,150,1,3,46,105,3,9,168,4,40,160,0,3,45,106,3,12,40,47,3,40,52,3,40,57,3,40,62,3,40,69,3,40,73,3,40,77,3,40,81,3,40,93,3,40,98,3,40,102,3,22,107,3,9,161,4,3,103,3,104,3,105,3,40,248,1,40,107,3,46,108,3,9,12,5,43,109,3,18,5,3,46,110,3,9,159,4,40,43,3,3,22,111,3,9,26,5,2,108,3,110,3,40,114,1,46,112,3,9,12,5,43,113,3,36,5,3,46,114,3,9,159,4,40,43,3,3,45,115,3,2,40,111,3,22,116,3,9,26,5,2,112,3,114,3,40,63,3,40,116,3,46,117,3,9,250,1,40,3,0,3,22,118,3,9,45,5,1,117,3,40,3,0,46,119,3,9,250,1,40,3,0,3,22,120,3,9,50,5,1,119,3,40,3,0,46,121,3,9,250,1,40,47,0,3,45,122,3,2,40,118,3,22,123,3,9,45,5,1,121,3,40,47,0,40,123,3,46,124,3,9,250,1,40,47,0,3,45,125,3,2,40,120,3,22,126,3,9,50,5,1,124,3,40,47,0,40,126,3,46,127,3,9,250,1,40,3,0,3,22,128,3,9,55,5,1,127,3,40,3,0,46,129,3,9,250,1,40,47,0,3,45,130,3,2,40,128,3,22,131,3,9,55,5,1,129,3,40,47,0,40,131,3,46,132,3,9,62,5,40,160,0,3,46,133,3,9,161,4,40,203,0,3,22,134,3,9,74,5,2,132,3,133,3,40,160,0,46,135,3,9,62,5,40,108,1,3,46,136,3,9,161,4,40,203,0,3,45,137,3,2,40,134,3,22,138,3,9,74,5,2,135,3,136,3,40,108,1,40,138,3,46,139,3,9,62,5,40,150,1,3,46,140,3,9,161,4,40,203,0,3,45,141,3,3,40,134,3,40,138,3,22,142,3,9,74,5,2,139,3,140,3,40,150,1,40,142,3,46,143,3,9,62,5,40,114,1,3,46,144,3,9,161,4,40,203,0,3,45,145,3,4,40,134,3,40,138,3,40,142,3,22,146,3,9,74,5,2,143,3,144,3,40,114,1,40,146,3,46,147,3,9,62,5,40,160,0,3,46,148,3,9,94,5,40,108,1,3,22,149,3,9,101,5,2,147,3,148,3,40,160,0,46,150,3,9,62,5,40,108,1,3,46,151,3,9,94,5,40,108,1,3,45,152,3,2,40,149,3,22,153,3,9,101,5,2,150,3,151,3,40,108,1,40,153,3,46,154,3,9,62,5,40,150,1,3,46,155,3,9,94,5,40,108,1,3,45,156,3,3,40,149,3,40,153,3,22,157,3,9,101,5,2,154,3,155,3,40,150,1,40,157,3,46,158,3,9,62,5,40,114,1,3,46,159,3,9,94,5,40,108,1,3,45,160,3,4,40,149,3,40,153,3,40,157,3,22,161,3,9,101,5,2,158,3,159,3,40,114,1,40,161,3,46,162,3,9,121,5,40,248,1,3,46,163,3,9,125,5,40,248,1,3,22,164,3,9,129,5,2,162,3,163,3,40,248,1,46,165,3,9,121,5,40,248,1,3,46,166,3,9,125,5,40,248,1,3,22,167,3,9,141,5,2,165,3,166,3,40,248,1,46,168,3,9,121,5,40,248,1,3,46,169,3,9,125,5,40,248,1,3,22,170,3,9,151,5,2,168,3,169,3,40,248,1,46,171,3,9,121,5,40,248,1,3,46,172,3,9,125,5,40,248,1,3,22,173,3,9,161,5,2,171,3,172,3,40,248,1,46,174,3,9,121,5,40,248,1,3,46,175,3,9,125,5,40,248,1,3,22,176,3,9,176,5,2,174,3,175,3,40,248,1,46,177,3,9,121,5,40,248,1,3,46,178,3,9,125,5,40,248,1,3,22,179,3,9,191,5,2,177,3,178,3,40,248,1,46,180,3,9,121,5,40,248,1,3,46,181,3,9,125,5,40,248,1,3,22,182,3,9,204,5,2,180,3,181,3,40,248,1,46,183,3,9,121,5,40,248,1,3,46,184,3,9,125,5,40,248,1,3,22,185,3,9,217,5,2,183,3,184,3,40,248,1,46,186,3,9,121,5,40,248,1,3,46,187,3,9,125,5,40,248,1,3,22,188,3,9,231,5,2,186,3,187,3,40,248,1,46,189,3,9,121,5,40,248,1,3,46,190,3,9,125,5,40,248,1,3,22,191,3,9,245,5,2,189,3,190,3,40,248,1,46,192,3,9,121,5,40,248,1,3,46,193,3,9,125,5,40,248,1,3,22,194,3,9,4,6,2,192,3,193,3,40,248,1,46,195,3,9,121,5,40,248,1,3,46,196,3,9,125,5,40,248,1,3,22,197,3,9,19,6,2,195,3,196,3,40,248,1,46,198,3,9,121,5,40,248,1,3,46,199,3,9,125,5,40,248,1,3,22,200,3,9,29,6,2,198,3,199,3,40,248,1,46,201,3,9,121,5,40,248,1,3,46,202,3,9,125,5,40,248,1,3,22,203,3,9,40,6,2,201,3,202,3,40,248,1,46,204,3,9,121,5,40,248,1,3,46,205,3,9,125,5,40,248,1,3,22,206,3,9,55,6,2,204,3,205,3,40,248,1,46,207,3,9,68,6,40,237,1,3,46,208,3,9,70,6,40,237,1,3,22,209,3,9,72,6,2,207,3,208,3,40,168,0,46,210,3,9,121,5,40,248,1,3,46,211,3,9,125,5,40,248,1,3,22,212,3,9,97,6,2,210,3,211,3,40,248,1,46,213,3,9,121,5,40,248,1,3,46,214,3,9,125,5,40,248,1,3,22,215,3,9,111,6,2,213,3,214,3,40,248,1,46,216,3,9,121,5,40,248,1,3,46,217,3,9,125,5,40,248,1,3,22,218,3,9,124,6,2,216,3,217,3,40,248,1,46,219,3,9,138,6,40,168,0,3,46,220,3,9,70,6,40,168,0,3,22,221,3,9,140,6,2,219,3,220,3,40,168,0,46,222,3,9,68,6,40,237,1,3,46,223,3,9,70,6,40,237,1,3,22,224,3,9,156,6,2,222,3,223,3,40,168,0,46,225,3,9,121,5,40,248,1,3,46,226,3,9,125,5,40,248,1,3,22,227,3,9,179,6,2,225,3,226,3,40,248,1,46,228,3,9,68,6,40,237,1,3,46,229,3,9,70,6,40,237,1,3,22,230,3,9,197,6,2,228,3,229,3,40,168,0,46,231,3,9,121,5,40,248,1,3,46,232,3,9,125,5,40,248,1,3,22,233,3,9,219,6,2,231,3,232,3,40,248,1,46,234,3,9,121,5,40,248,1,3,46,235,3,9,125,5,40,248,1,3,22,236,3,9,236,6,2,234,3,235,3,40,248,1,46,237,3,9,68,6,40,237,1,3,46,238,3,9,70,6,40,237,1,3,22,239,3,9,253,6,2,237,3,238,3,40,168,0,46,240,3,9,121,5,40,248,1,3,46,241,3,9,125,5,40,248,1,3,22,242,3,9,19,7,2,240,3,241,3,40,248,1,46,243,3,9,121,5,40,248,1,3,46,244,3,9,125,5,40,248,1,3,22,245,3,9,36,7,2,243,3,244,3,40,248,1,46,246,3,9,121,5,40,248,1,3,46,247,3,9,125,5,40,248,1,3,22,248,3,9,53,7,2,246,3,247,3,40,248,1,46,249,3,9,121,5,40,248,1,3,46,250,3,9,125,5,40,248,1,3,22,251,3,9,69,7,2,249,3,250,3,40,248,1,46,252,3,9,84,7,40,154,1,3,22,253,3,9,90,7,1,252,3,40,168,0,46,254,3,9,113,7,40,154,1,3,46,255,3,9,125,7,40,168,0,3,46,0,4,9,131,7,40,154,1,3,22,1,4,9,140,7,3,254,3,255,3,0,4,40,154,1,46,2,4,9,84,7,40,154,1,3,22,3,4,9,167,7,1,2,4,40,168,0,46,4,4,9,191,7,40,154,1,3,46,5,4,9,201,7,40,168,0,3,22,6,4,9,205,7,2,4,4,5,4,40,154,1,46,7,4,9,240,7,40,154,1,3,46,8,4,9,252,7,40,154,1,3,22,9,4,9,5,8,2,7,4,8,4,40,154,1,46,10,4,9,121,5,40,248,1,3,46,11,4,9,125,5,40,248,1,3,22,12,4,9,33,8,2,10,4,11,4,40,248,1,46,13,4,9,121,5,40,248,1,3,46,14,4,9,125,5,40,248,1,3,22,15,4,9,43,8,2,13,4,14,4,40,248,1,46,16,4,9,121,5,40,248,1,3,46,17,4,9,125,5,40,248,1,3,22,18,4,9,60,8,2,16,4,17,4,40,248,1,46,19,4,9,121,5,40,248,1,3,46,20,4,9,125,5,40,248,1,3,22,21,4,9,72,8,2,19,4,20,4,40,248,1,46,22,4,9,89,8,40,1,0,3,46,23,4,9,121,5,40,248,1,3,46,24,4,9,125,5,40,248,1,3,22,25,4,9,94,8,3,22,4,23,4,24,4,40,248,1,46,26,4,9,84,7,40,248,1,3,22,27,4,9,100,8,1,26,4,40,248,1,46,28,4,9,84,7,40,114,1,3,22,29,4,9,109,8,1,28,4,40,114,1,46,30,4,9,250,1,40,150,1,3,22,31,4,9,124,8,1,30,4,40,108,1,135,0,2,0,0,0,90,7,196,3,167,7,202,3,72,6,152,3,140,7,200,3,5,8,208,3,205,7,205,3,197,6,173,3,156,6,167,3,140,6,164,3,253,6,182,3,167,0,114,0,64,0,60,0,106,0,82,0,31,4,229,2,22,4,227,2,59,0,57,0,100,0,79,0,71,0,67,0,112,0,85,0,39,4,235,2,94,8,224,3,129,5,107,3,60,8,217,3,219,6,176,3,179,6,170,3,111,6,158,3,36,7,188,3,151,5,113,3,4,6,137,3,204,5,125,3,231,5,131,3,176,5,119,3,53,7,191,3,236,6,179,3,33,8,211,3,124,6,161,3,72,8,220,3,40,6,146,3,69,7,194,3,97,6,155,3,29,6,143,3,43,8,214,3,55,6,149,3,19,7,185,3,141,5,110,3,245,5,134,3,191,5,122,3,217,5,128,3,161,5,116,3,19,6,140,3,214,0,147,0,17,1,249,0,49,0,51,0,90,0,73,0,119,2,142,1,45,5,65,3,50,5,68,3,149,3,61,2,99,2,128,1,108,2,135,1,7,4,197,2,122,0,92,0,130,0,98,0,161,2,157,1,48,4,240,2,56,4,245,2,99,1,78,1,186,0,127,0,159,1,90,1,219,0,152,0,163,1,94,1,141,2,149,1,55,5,73,3,234,3,147,2,246,3,170,2,26,5,58,3,114,1,80,1,101,5,103,3,74,5,88,3,161,3,78,2,155,0,107,0,87,1,76,1,81,1,74,1,169,1,97,1,86,2,121,1,174,3,101,2,220,3,124,2,126,0,95,0,135,0,101,0,90,4,249,2,198,2,177,1,255,0,220,0,247,0,197,0,34,1,37,1,231,0,167,0,242,0,174,0,131,2,147,1,35,4,231,2,13,4,224,2,215,2,247,1,58,2,115,1,203,1,101,1,237,1,105,1,184,1,99,1,224,1,103,1,118,0,89,0,124,8,230,3,31,0,45,0,173,2,164,1,185,2,173,1,198,0,137,0,204,0,142,0,161,4,51,3,23,1,254,0,181,0,122,0,45,0,48,0,85,0,70,0,70,1,71,1,140,0,104,0,53,1,52,1,241,4,33,3,53,0,54,0,95,0,76,0,130,4,251,2,122,3,44,2,192,0,132,0,139,1,82,1,71,2,117,1,12,2,109,1,43,2,113,1,252,1,107,1,28,2,111,1,100,8,226,3,109,8,228,3,12,44,21,164,3,2,42,0,0,0,0,1,35,6,40,248,1,1,18,0,0,0,0,1,0,21,167,3,2,42,0,0,0,0,1,35,49,165,3,0,1,0,21,170,3,2,42,0,0,0,0,1,35,49,169,3,0,1,0,21,173,3,2,42,0,0,0,0,1,35,1,49,171,3,0,57,1,1,18,0,0,128,63,58,39,49,171,3,0,1,3,40,168,0,59,49,172,3,0,40,248,1,40,248,1,1,0,21,176,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,175,3,0,1,3,40,168,0,59,49,174,3,0,40,248,1,57,49,175,3,0,40,248,1,1,0,21,179,3,2,42,0,0,0,0,1,35,44,36,129,8,3,0,44,1,49,177,3,0,76,6,40,248,1,1,18,0,0,0,0,40,14,3,6,40,248,1,1,18,0,0,0,0,1,49,177,3,0,59,39,49,178,3,0,1,3,40,248,1,1,49,177,3,0,59,39,49,178,3,0,1,3,40,248,1,1,0,21,182,3,2,42,0,0,0,0,1,35,20,40,248,1,179,3,2,49,181,3,0,49,180,3,0,1,1,179,3,21,185,3,2,42,0,0,0,0,1,35,1,1,18,0,0,128,63,58,39,49,184,3,0,1,3,40,168,0,59,49,183,3,0,40,248,1,1,0,21,188,3,2,42,0,0,0,0,1,35,1,1,18,0,0,128,63,58,39,49,186,3,0,1,3,40,168,0,59,49,187,3,0,40,248,1,1,0,21,191,3,2,42,0,0,0,0,1,35,1,1,39,49,190,3,0,1,3,59,49,189,3,0,40,248,1,57,1,1,18,0,0,128,63,58,39,49,189,3,0,1,3,40,168,0,59,49,190,3,0,40,248,1,40,248,1,1,0,21,194,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,193,3,0,1,3,40,168,0,59,49,192,3,0,40,248,1,57,1,39,49,192,3,0,1,3,59,49,193,3,0,40,248,1,40,248,1,1,0,21,197,3,2,42,0,0,0,0,1,35,1,1,1,18,0,0,128,63,58,39,49,196,3,0,1,3,40,168,0,59,49,195,3,0,40,248,1,57,1,1,18,0,0,128,63,58,39,49,195,3,0,1,3,40,168,0,59,49,196,3,0,40,248,1,40,248,1,1,0,21,200,3,2,42,0,0,0,0,1,35,20,40,248,1,196,0,2,1,49,198,3,0,57,49,199,3,0,40,248,1,18,0,0,128,63,1,0,21,203,3,2,42,0,0,0,0,1,35,1,49,201,3,0,59,49,202,3,0,40,248,1,1,0,21,206,3,2,42,0,0,0,0,1,35,1,49,204,3,0,57,1,1,18,0,0,128,63,58,49,204,3,0,40,248,1,59,49,205,3,0,40,248,1,40,248,1,1,0,21,209,3,2,42,0,0,0,0,1,35,44,1,1,18,0,0,0,64,59,39,49,208,3,0,1,0,40,168,0,81,39,49,208,3,0,1,1,40,14,3,1,1,18,0,0,0,64,59,39,49,207,3,0,1,0,40,168,0,59,39,49,208,3,0,1,0,40,168,0,1,1,39,49,207,3,0,1,1,59,39,49,208,3,0,1,1,40,168,0,58,1,1,18,0,0,0,64,59,1,39,49,208,3,0,1,1,58,39,49,208,3,0,1,0,40,168,0,40,168,0,59,1,39,49,207,3,0,1,1,58,39,49,207,3,0,1,0,40,168,0,40,168,0,40,168,0,1,0,21,212,3,2,42,1,0,46,32,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,47,32,4,40,248,1,0,6,40,248,1,4,20,40,168,0,209,3,2,39,49,210,3,0,2,0,3,39,49,211,3,0,2,0,3,20,40,168,0,209,3,2,39,49,210,3,0,2,1,3,39,49,211,3,0,2,1,3,20,40,168,0,209,3,2,39,49,210,3,0,2,2,3,39,49,211,3,0,2,2,3,1,39,49,210,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,210,3,0,1,3,40,168,0,59,39,49,211,3,0,1,3,40,168,0,40,168,0,15,1,39,49,32,4,2,3,0,1,2,82,1,1,39,49,211,3,0,3,0,1,2,59,1,18,0,0,128,63,58,39,49,210,3,0,1,3,40,168,0,40,154,1,57,1,39,49,210,3,0,3,0,1,2,59,1,18,0,0,128,63,58,39,49,211,3,0,1,3,40,168,0,40,154,1,40,154,1,40,154,1,35,49,32,4,0,1,1,209,3,21,215,3,2,42,1,0,46,33,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,47,33,4,40,248,1,0,20,40,248,1,173,3,2,49,213,3,0,49,214,3,0,15,1,39,49,33,4,1,3,0,1,2,75,20,40,154,1,192,0,2,39,49,33,4,0,3,0,1,2,1,1,1,18,0,0,128,63,58,39,49,214,3,0,1,3,40,168,0,59,39,49,213,3,0,3,0,1,2,40,154,1,57,39,49,214,3,0,3,0,1,2,40,154,1,40,154,1,35,49,33,4,0,1,1,173,3,21,218,3,2,42,1,0,46,34,4,9,175,8,40,248,1,2,1,0,175,8,0,0,3,47,34,4,40,248,1,0,20,40,248,1,173,3,2,49,216,3,0,49,217,3,0,15,1,39,49,34,4,1,3,0,1,2,75,20,40,154,1,216,0,2,39,49,34,4,0,3,0,1,2,1,1,1,18,0,0,128,63,58,39,49,217,3,0,1,3,40,168,0,59,39,49,216,3,0,3,0,1,2,40,154,1,57,39,49,217,3,0,3,0,1,2,40,154,1,40,154,1,35,49,34,4,0,1,1,173,3,21,221,3,2,42,0,0,0,0,1,35,44,36,182,8,3,0,1,49,219,3,0,60,1,49,220,3,0,57,18,119,204,43,50,40,168,0,40,168,0,1,49,219,3,0,60,49,220,3,0,40,168,0,1,0,21,224,3,2,42,0,0,0,0,1,23,0,1,39,49,223,3,0,1,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,1,2,42,1,0,46,35,4,9,234,8,40,168,0,2,1,0,234,8,0,0,2,47,35,4,40,168,0,0,1,39,49,222,3,0,1,1,58,39,49,222,3,0,1,0,40,168,0,23,0,1,49,35,4,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,1,1,39,49,222,3,0,1,1,59,39,49,223,3,0,1,1,40,168,0,57,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,223,3,0,1,0,59,1,18,0,0,128,63,58,39,49,222,3,0,1,1,40,168,0,40,168,0,40,168,0,1,2,42,0,0,0,0,2,15,1,49,35,4,1,75,20,40,168,0,192,0,2,39,49,223,3,0,1,1,20,40,168,0,221,3,2,1,39,49,223,3,0,1,0,59,39,49,222,3,0,1,1,40,168,0,49,35,4,0,40,168,0,35,1,1,1,49,35,4,0,59,39,49,222,3,0,1,1,40,168,0,57,1,39,49,222,3,0,1,0,59,1,18,0,0,128,63,58,39,49,223,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,223,3,0,1,0,59,1,18,0,0,128,63,58,39,49,222,3,0,1,1,40,168,0,40,168,0,40,168,0,1,1,1,1,221,3,21,227,3,2,42,0,0,0,0,1,35,6,40,248,1,4,20,40,168,0,224,3,2,39,49,225,3,0,2,0,3,39,49,226,3,0,2,0,3,20,40,168,0,224,3,2,39,49,225,3,0,2,1,3,39,49,226,3,0,2,1,3,20,40,168,0,224,3,2,39,49,225,3,0,2,2,3,39,49,226,3,0,2,2,3,1,39,49,225,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,225,3,0,1,3,40,168,0,59,39,49,226,3,0,1,3,40,168,0,40,168,0,1,1,224,3,21,230,3,2,42,0,0,0,0,1,23,0,1,39,49,229,3,0,1,1,76,39,49,229,3,0,1,0,40,14,3,2,42,0,0,0,0,1,35,1,1,1,39,49,228,3,0,1,1,59,39,49,229,3,0,1,1,40,168,0,57,1,39,49,228,3,0,1,0,59,1,18,0,0,128,63,58,39,49,229,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,40,168,0,1,23,0,1,39,49,228,3,0,1,0,76,18,0,0,0,0,40,14,3,2,42,0,0,0,0,1,35,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,1,2,42,1,0,46,36,4,9,234,8,40,168,0,2,1,0,234,8,0,0,2,47,36,4,40,168,0,0,20,40,168,0,216,0,2,18,0,0,0,0,1,39,49,229,3,0,1,1,58,20,40,168,0,221,3,2,1,1,39,49,229,3,0,1,1,58,39,49,229,3,0,1,0,40,168,0,59,39,49,228,3,0,1,1,40,168,0,39,49,228,3,0,1,0,40,168,0,35,1,1,1,49,36,4,0,59,39,49,228,3,0,1,1,40,168,0,57,1,39,49,228,3,0,1,0,59,1,18,0,0,128,63,58,39,49,229,3,0,1,1,40,168,0,40,168,0,40,168,0,57,1,39,49,229,3,0,1,0,59,1,18,0,0,128,63,58,39,49,228,3,0,1,1,40,168,0,40,168,0,40,168,0,1,1,1,221,3,21,233,3,2,42,0,0,0,0,1,35,6,40,248,1,4,20,40,168,0,230,3,2,39,49,231,3,0,2,0,3,39,49,232,3,0,2,0,3,20,40,168,0,230,3,2,39,49,231,3,0,2,1,3,39,49,232,3,0,2,1,3,20,40,168,0,230,3,2,39,49,231,3,0,2,2,3,39,49,232,3,0,2,2,3,1,39,49,231,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,231,3,0,1,3,40,168,0,59,39,49,232,3,0,1,3,40,168,0,40,168,0,1,1,230,3,21,236,3,2,42,0,0,0,0,1,35,20,40,248,1,212,3,2,49,235,3,0,49,234,3,0,1,1,212,3,21,239,3,2,42,0,0,0,0,1,23,0,1,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,81,39,49,237,3,0,1,1,40,14,3,2,42,0,0,0,0,1,35,1,1,20,40,168,0,221,3,2,1,1,39,49,238,3,0,1,0,59,39,49,238,3,0,1,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,39,49,238,3,0,1,1,57,1,1,18,0,0,128,63,58,39,49,238,3,0,1,1,40,168,0,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,1,39,49,238,3,0,1,0,59,1,1,34,58,39,49,237,3,0,1,1,57,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,18,0,0,128,63,40,168,0,40,168,0,40,168,0,1,23,0,1,1,18,0,0,128,64,59,39,49,238,3,0,1,0,40,168,0,81,39,49,238,3,0,1,1,40,14,3,2,42,4,0,46,37,4,9,240,8,40,168,0,2,46,38,4,9,245,8,40,168,0,2,46,39,4,9,250,8,40,168,0,2,46,40,4,9,0,9,40,168,0,2,4,0,245,8,1,0,240,8,0,0,0,9,3,0,250,8,2,0,5,47,37,4,40,168,0,0,1,39,49,238,3,0,1,0,59,39,49,238,3,0,1,0,40,168,0,47,38,4,40,168,0,0,1,49,37,4,0,59,39,49,238,3,0,1,0,40,168,0,47,39,4,40,168,0,0,1,39,49,238,3,0,1,1,59,39,49,238,3,0,1,1,40,168,0,47,40,4,40,168,0,0,1,49,39,4,0,59,39,49,238,3,0,1,1,40,168,0,35,20,40,168,0,221,3,2,1,1,1,1,49,39,4,0,59,1,39,49,237,3,0,1,0,58,1,39,49,238,3,0,1,0,59,1,1,1,18,0,0,64,64,59,39,49,237,3,0,1,1,40,168,0,58,1,18,0,0,192,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,58,18,0,0,128,63,40,168,0,40,168,0,40,168,0,40,168,0,57,1,1,1,18,0,0,64,65,59,39,49,238,3,0,1,1,40,168,0,59,49,37,4,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,1,18,0,0,128,65,59,49,38,4,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,49,40,4,0,59,39,49,237,3,0,1,0,40,168,0,40,168,0,49,39,4,0,1,2,42,0,0,0,0,1,35,1,1,1,1,39,49,238,3,0,1,0,59,1,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,57,18,0,0,128,63,40,168,0,40,168,0,57,39,49,237,3,0,1,0,40,168,0,58,1,20,40,168,0,108,0,1,1,39,49,238,3,0,1,1,59,39,49,238,3,0,1,0,40,168,0,59,1,39,49,237,3,0,1,1,58,1,18,0,0,0,64,59,39,49,237,3,0,1,0,40,168,0,40,168,0,40,168,0,40,168,0,58,1,39,49,238,3,0,1,1,59,39,49,237,3,0,1,0,40,168,0,40,168,0,1,1,1,221,3,21,242,3,2,42,0,0,0,0,1,35,44,1,39,49,241,3,0,1,3,76,18,0,0,0,0,40,14,3,49,240,3,0,6,40,248,1,4,20,40,168,0,239,3,2,39,49,240,3,0,2,0,3,39,49,241,3,0,2,0,3,20,40,168,0,239,3,2,39,49,240,3,0,2,1,3,39,49,241,3,0,2,1,3,20,40,168,0,239,3,2,39,49,240,3,0,2,2,3,39,49,241,3,0,2,2,3,1,39,49,240,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,240,3,0,1,3,40,168,0,59,39,49,241,3,0,1,3,40,168,0,40,168,0,1,1,239,3,21,245,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,39,49,243,3,0,3,0,1,2,57,39,49,244,3,0,3,0,1,2,40,154,1,58,1,18,0,0,0,64,59,20,40,154,1,192,0,2,1,39,49,243,3,0,3,0,1,2,59,39,49,244,3,0,1,3,40,154,1,1,39,49,244,3,0,3,0,1,2,59,39,49,243,3,0,1,3,40,154,1,40,154,1,40,154,1,1,39,49,243,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,243,3,0,1,3,40,168,0,59,39,49,244,3,0,1,3,40,168,0,40,168,0,1,0,21,248,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,39,49,247,3,0,3,0,1,2,57,39,49,246,3,0,3,0,1,2,40,154,1,58,1,1,18,0,0,0,64,59,39,49,247,3,0,3,0,1,2,40,154,1,59,39,49,246,3,0,3,0,1,2,40,154,1,40,154,1,1,39,49,246,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,246,3,0,1,3,40,168,0,59,39,49,247,3,0,1,3,40,168,0,40,168,0,1,0,21,251,3,2,42,0,0,0,0,1,35,6,40,248,1,2,1,1,1,1,18,0,0,128,63,58,39,49,249,3,0,1,3,40,168,0,59,39,49,250,3,0,3,0,1,2,40,154,1,57,1,1,18,0,0,128,63,58,39,49,250,3,0,1,3,40,168,0,59,39,49,249,3,0,3,0,1,2,40,154,1,40,154,1,57,1,39,49,249,3,0,3,0,1,2,59,39,49,250,3,0,3,0,1,2,40,154,1,40,154,1,1,39,49,249,3,0,1,3,57,1,1,18,0,0,128,63,58,39,49,249,3,0,1,3,40,168,0,59,39,49,250,3,0,1,3,40,168,0,40,168,0,1,0,21,253,3,2,42,0,0,0,0,1,35,20,40,168,0,148,1,2,6,40,154,1,3,18,154,153,153,62,18,61,10,23,63,18,174,71,225,61,49,252,3,0,1,0,21,1,4,2,42,4,0,46,41,4,9,6,9,40,168,0,2,46,42,4,9,175,8,40,154,1,2,46,43,4,9,10,9,40,168,0,2,46,44,4,9,18,9,40,168,0,2,4,0,6,9,0,0,18,9,3,0,10,9,2,0,175,8,1,0,6,47,41,4,40,168,0,0,20,40,168,0,253,3,1,49,0,4,0,47,42,4,40,154,1,0,1,1,49,41,4,0,58,20,40,168,0,253,3,1,49,254,3,0,40,168,0,57,49,254,3,0,40,154,1,47,43,4,40,168,0,0,20,40,168,0,192,0,2,20,40,168,0,192,0,2,39,49,42,4,0,1,0,39,49,42,4,0,1,1,39,49,42,4,0,1,2,47,44,4,40,168,0,0,20,40,168,0,216,0,2,20,40,168,0,216,0,2,39,49,42,4,0,1,0,39,49,42,4,0,1,1,39,49,42,4,0,1,2,23,0,1,1,49,43,4,0,79,18,0,0,0,0,40,14,3,70,1,49,41,4,0,77,49,43,4,0,40,14,3,40,14,3,2,42,0,0,0,0,1,15,1,49,42,4,1,75,1,49,41,4,0,57,1,1,1,49,42,4,0,58,49,41,4,0,40,154,1,59,49,41,4,0,40,154,1,60,1,49,41,4,0,58,49,43,4,0,40,168,0,40,154,1,40,154,1,40,154,1,1,50,35,44,1,1,49,44,4,0,78,49,255,3,0,40,14,3,70,1,49,44,4,0,77,49,41,4,0,40,14,3,40,14,3,1,49,41,4,0,57,1,1,1,49,42,4,0,58,49,41,4,0,40,154,1,59,1,49,255,3,0,58,49,41,4,0,40,168,0,40,154,1,60,1,49,44,4,0,58,49,41,4,0,40,168,0,40,154,1,40,154,1,49,42,4,0,1,1,253,3,21,3,4,2,42,0,0,0,0,1,35,1,20,40,168,0,216,0,2,20,40,168,0,216,0,2,39,49,2,4,0,1,0,39,49,2,4,0,1,1,39,49,2,4,0,1,2,58,20,40,168,0,192,0,2,20,40,168,0,192,0,2,39,49,2,4,0,1,0,39,49,2,4,0,1,1,39,49,2,4,0,1,2,40,168,0,1,0,21,6,4,2,42,0,0,0,0,1,35,44,1,39,49,4,4,0,1,0,79,39,49,4,4,0,1,2,40,14,3,6,40,154,1,3,18,0,0,0,0,1,1,49,5,4,0,59,1,39,49,4,4,0,1,1,58,39,49,4,4,0,1,0,40,168,0,40,168,0,60,1,39,49,4,4,0,1,2,58,39,49,4,4,0,1,0,40,168,0,40,168,0,49,5,4,0,6,40,154,1,1,18,0,0,0,0,1,0,21,9,4,2,42,1,0,46,45,4,9,201,7,40,168,0,2,1,0,201,7,0,0,3,47,45,4,40,168,0,0,20,40,168,0,3,4,1,49,8,4,0,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,1,40,14,3,2,42,0,0,0,0,1,23,0,1,39,49,7,4,0,1,1,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,0,1,2,75,20,40,154,1,6,4,2,39,49,7,4,0,3,0,1,2,49,45,4,0,40,154,1,1,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,0,2,1,75,20,40,154,1,6,4,2,39,49,7,4,0,3,0,2,1,49,45,4,0,40,154,1,1,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,2,0,1,75,20,40,154,1,6,4,2,39,49,7,4,0,3,2,0,1,49,45,4,0,40,154,1,1,1,23,0,1,39,49,7,4,0,1,0,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,1,0,2,75,20,40,154,1,6,4,2,39,49,7,4,0,3,1,0,2,49,45,4,0,40,154,1,1,23,0,1,39,49,7,4,0,1,1,81,39,49,7,4,0,1,2,40,14,3,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,1,2,0,75,20,40,154,1,6,4,2,39,49,7,4,0,3,1,2,0,49,45,4,0,40,154,1,1,2,42,0,0,0,0,1,15,1,39,49,7,4,1,3,2,1,0,75,20,40,154,1,6,4,2,39,49,7,4,0,3,2,1,0,49,45,4,0,40,154,1,1,35,49,7,4,0,1,2,3,4,6,4,21,12,4,2,42,3,0,46,46,4,9,125,7,40,168,0,2,46,47,4,9,26,9,40,154,1,2,46,48,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,47,46,4,40,168,0,0,1,39,49,11,4,0,1,3,59,39,49,10,4,0,1,3,40,168,0,47,47,4,40,154,1,0,1,39,49,10,4,0,3,0,1,2,59,39,49,11,4,0,1,3,40,154,1,47,48,4,40,154,1,0,1,39,49,11,4,0,3,0,1,2,59,39,49,10,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,20,40,154,1,9,4,2,49,47,4,0,49,48,4,0,49,46,4,0,49,48,4,0,57,39,49,11,4,0,3,0,1,2,40,154,1,58,49,48,4,0,40,154,1,57,39,49,10,4,0,3,0,1,2,40,154,1,58,49,47,4,0,40,154,1,1,1,39,49,10,4,0,1,3,57,39,49,11,4,0,1,3,40,168,0,58,49,46,4,0,40,168,0,1,2,1,4,9,4,21,15,4,2,42,3,0,46,49,4,9,125,7,40,168,0,2,46,50,4,9,26,9,40,154,1,2,46,51,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,47,49,4,40,168,0,0,1,39,49,14,4,0,1,3,59,39,49,13,4,0,1,3,40,168,0,47,50,4,40,154,1,0,1,39,49,13,4,0,3,0,1,2,59,39,49,14,4,0,1,3,40,154,1,47,51,4,40,154,1,0,1,39,49,14,4,0,3,0,1,2,59,39,49,13,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,20,40,154,1,9,4,2,49,51,4,0,49,50,4,0,49,49,4,0,49,51,4,0,57,39,49,14,4,0,3,0,1,2,40,154,1,58,49,51,4,0,40,154,1,57,39,49,13,4,0,3,0,1,2,40,154,1,58,49,50,4,0,40,154,1,1,1,39,49,13,4,0,1,3,57,39,49,14,4,0,1,3,40,168,0,58,49,49,4,0,40,168,0,1,2,1,4,9,4,21,18,4,2,42,3,0,46,52,4,9,125,7,40,168,0,2,46,53,4,9,26,9,40,154,1,2,46,54,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,47,52,4,40,168,0,0,1,39,49,17,4,0,1,3,59,39,49,16,4,0,1,3,40,168,0,47,53,4,40,154,1,0,1,39,49,16,4,0,3,0,1,2,59,39,49,17,4,0,1,3,40,154,1,47,54,4,40,154,1,0,1,39,49,17,4,0,3,0,1,2,59,39,49,16,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,49,53,4,0,49,52,4,0,49,54,4,0,57,39,49,17,4,0,3,0,1,2,40,154,1,58,49,54,4,0,40,154,1,57,39,49,16,4,0,3,0,1,2,40,154,1,58,49,53,4,0,40,154,1,1,1,39,49,16,4,0,1,3,57,39,49,17,4,0,1,3,40,168,0,58,49,52,4,0,40,168,0,1,1,1,4,21,21,4,2,42,3,0,46,55,4,9,125,7,40,168,0,2,46,56,4,9,26,9,40,154,1,2,46,57,4,9,30,9,40,154,1,2,3,0,125,7,0,0,30,9,2,0,26,9,1,0,4,47,55,4,40,168,0,0,1,39,49,20,4,0,1,3,59,39,49,19,4,0,1,3,40,168,0,47,56,4,40,154,1,0,1,39,49,19,4,0,3,0,1,2,59,39,49,20,4,0,1,3,40,154,1,47,57,4,40,154,1,0,1,39,49,20,4,0,3,0,1,2,59,39,49,19,4,0,1,3,40,154,1,35,6,40,248,1,2,1,1,1,1,20,40,154,1,1,4,3,49,57,4,0,49,55,4,0,49,56,4,0,57,39,49,20,4,0,3,0,1,2,40,154,1,58,49,57,4,0,40,154,1,57,39,49,19,4,0,3,0,1,2,40,154,1,58,49,56,4,0,40,154,1,1,1,39,49,19,4,0,1,3,57,39,49,20,4,0,1,3,40,168,0,58,49,55,4,0,40,168,0,1,1,1,4,13,2,0,42,29,0,46,58,4,29,8,1,34,9,40,1,0,0,46,59,4,29,8,1,41,9,40,1,0,0,46,60,4,29,8,1,46,9,40,1,0,0,46,61,4,29,8,1,51,9,40,1,0,0,46,62,4,29,8,1,60,9,40,1,0,0,46,63,4,29,8,1,69,9,40,1,0,0,46,64,4,29,8,1,76,9,40,1,0,0,46,65,4,29,8,1,83,9,40,1,0,0,46,66,4,29,8,1,91,9,40,1,0,0,46,67,4,29,8,1,99,9,40,1,0,0,46,68,4,29,8,1,108,9,40,1,0,0,46,69,4,29,8,1,117,9,40,1,0,0,46,70,4,29,8,1,122,9,40,1,0,0,46,71,4,29,8,1,128,9,40,1,0,0,46,72,4,29,8,1,138,9,40,1,0,0,46,73,4,29,8,1,146,9,40,1,0,0,46,74,4,29,8,1,155,9,40,1,0,0,46,75,4,29,8,1,163,9,40,1,0,0,46,76,4,29,8,1,172,9,40,1,0,0,46,77,4,29,8,1,184,9,40,1,0,0,46,78,4,29,8,1,195,9,40,1,0,0,46,79,4,29,8,1,206,9,40,1,0,0,46,80,4,29,8,1,217,9,40,1,0,0,46,81,4,29,8,1,229,9,40,1,0,0,46,82,4,29,8,1,240,9,40,1,0,0,46,83,4,29,8,1,250,9,40,1,0,0,46,84,4,29,8,1,255,9,40,1,0,0,46,85,4,29,8,1,11,10,40,1,0,0,46,86,4,29,8,1,18,10,40,1,0,0,29,0,34,9,0,0,11,10,27,0,184,9,19,0,172,9,18,0,155,9,16,0,217,9,22,0,46,9,2,0,108,9,10,0,76,9,6,0,91,9,8,0,60,9,4,0,229,9,23,0,195,9,20,0,250,9,25,0,163,9,17,0,18,10,28,0,128,9,13,0,240,9,24,0,146,9,15,0,122,9,12,0,255,9,26,0,138,9,14,0,206,9,21,0,41,9,1,0,99,9,9,0,69,9,5,0,83,9,7,0,51,9,3,0,117,9,11,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,21,25,4,2,42,0,0,0,0,2,38,0,42,0,0,0,0,49,22,4,0,29,27,0,0,0,0,1,35,20,40,248,1,164,3,2,49,23,4,0,49,24,4,0,27,1,0,0,0,1,35,20,40,248,1,167,3,2,49,23,4,0,49,24,4,0,27,2,0,0,0,1,35,20,40,248,1,170,3,2,49,23,4,0,49,24,4,0,27,3,0,0,0,1,35,20,40,248,1,173,3,2,49,23,4,0,49,24,4,0,27,4,0,0,0,1,35,20,40,248,1,176,3,2,49,23,4,0,49,24,4,0,27,5,0,0,0,1,35,20,40,248,1,179,3,2,49,23,4,0,49,24,4,0,27,6,0,0,0,1,35,20,40,248,1,182,3,2,49,23,4,0,49,24,4,0,27,7,0,0,0,1,35,20,40,248,1,185,3,2,49,23,4,0,49,24,4,0,27,8,0,0,0,1,35,20,40,248,1,188,3,2,49,23,4,0,49,24,4,0,27,9,0,0,0,1,35,20,40,248,1,191,3,2,49,23,4,0,49,24,4,0,27,10,0,0,0,1,35,20,40,248,1,194,3,2,49,23,4,0,49,24,4,0,27,11,0,0,0,1,35,20,40,248,1,197,3,2,49,23,4,0,49,24,4,0,27,12,0,0,0,1,35,20,40,248,1,200,3,2,49,23,4,0,49,24,4,0,27,13,0,0,0,1,35,20,40,248,1,203,3,2,49,23,4,0,49,24,4,0,27,14,0,0,0,1,35,20,40,248,1,206,3,2,49,23,4,0,49,24,4,0,27,15,0,0,0,1,35,20,40,248,1,212,3,2,49,23,4,0,49,24,4,0,27,16,0,0,0,1,35,20,40,248,1,215,3,2,49,23,4,0,49,24,4,0,27,17,0,0,0,1,35,20,40,248,1,218,3,2,49,23,4,0,49,24,4,0,27,18,0,0,0,1,35,20,40,248,1,227,3,2,49,23,4,0,49,24,4,0,27,19,0,0,0,1,35,20,40,248,1,233,3,2,49,23,4,0,49,24,4,0,27,20,0,0,0,1,35,20,40,248,1,236,3,2,49,23,4,0,49,24,4,0,27,21,0,0,0,1,35,20,40,248,1,242,3,2,49,23,4,0,49,24,4,0,27,22,0,0,0,1,35,20,40,248,1,245,3,2,49,23,4,0,49,24,4,0,27,23,0,0,0,1,35,20,40,248,1,248,3,2,49,23,4,0,49,24,4,0,27,24,0,0,0,1,35,20,40,248,1,251,3,2,49,23,4,0,49,24,4,0,27,25,0,0,0,1,35,20,40,248,1,12,4,2,49,23,4,0,49,24,4,0,27,26,0,0,0,1,35,20,40,248,1,15,4,2,49,23,4,0,49,24,4,0,27,27,0,0,0,1,35,20,40,248,1,18,4,2,49,23,4,0,49,24,4,0,27,28,0,0,0,1,35,20,40,248,1,21,4,2,49,23,4,0,49,24,4,0,35,6,40,248,1,1,18,0,0,0,0,1,29,164,3,167,3,170,3,173,3,176,3,179,3,182,3,185,3,188,3,191,3,194,3,197,3,200,3,203,3,206,3,212,3,215,3,218,3,227,3,233,3,236,3,242,3,245,3,248,3,251,3,12,4,15,4,18,4,21,4,21,27,4,2,42,0,0,0,0,1,35,6,40,248,1,2,1,39,49,26,4,0,3,0,1,2,60,20,40,168,0,216,0,2,39,49,26,4,0,1,3,18,23,183,209,56,40,154,1,39,49,26,4,0,1,3,1,0,21,29,4,2,42,0,0,0,0,1,35,6,40,114,1,2,1,39,49,28,4,0,3,0,1,2,60,20,40,160,0,208,0,2,39,49,28,4,0,1,3,18,23,183,209,56,40,150,1,39,49,28,4,0,1,3,1,0,21,31,4,2,42,0,0,0,0,1,35,1,39,49,30,4,0,2,0,1,60,39,49,30,4,0,1,2,40,108,1,1,0,};
diff --git a/src/sksl/generated/sksl_pipeline.dehydrated.sksl b/src/sksl/generated/sksl_pipeline.dehydrated.sksl
index 75c51c7..16cc746 100644
--- a/src/sksl/generated/sksl_pipeline.dehydrated.sksl
+++ b/src/sksl/generated/sksl_pipeline.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_pipeline_LENGTH = 251;
-static uint8_t SKSL_INCLUDE_sksl_pipeline[251] = {87,0,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,2,102,112,17,102,114,97,103,109,101,110,116,80,114,111,99,101,115,115,111,114,6,115,97,109,112,108,101,5,104,97,108,102,52,6,99,111,111,114,100,115,6,102,108,111,97,116,50,9,116,114,97,110,115,102,111,114,109,8,102,108,111,97,116,51,120,51,42,11,0,46,1,0,29,5,15,0,0,2,0,43,2,0,15,0,0,46,3,0,9,22,0,43,4,0,25,0,3,22,5,0,9,43,0,1,3,0,43,6,0,50,0,46,7,0,9,22,0,40,4,0,3,46,8,0,9,56,0,43,9,0,63,0,3,45,10,0,2,40,5,0,22,11,0,9,43,0,2,7,0,8,0,40,6,0,40,11,0,46,12,0,9,22,0,40,4,0,3,46,13,0,9,70,0,43,14,0,80,0,3,45,15,0,3,40,5,0,40,11,0,22,16,0,9,43,0,2,12,0,13,0,40,6,0,40,16,0,2,0,43,0,9,0,2,0,0,0,12,1,48,40,2,0,1,47,1,0,0,50,};
+static constexpr size_t SKSL_INCLUDE_sksl_pipeline_LENGTH = 250;
+static uint8_t SKSL_INCLUDE_sksl_pipeline[250] = {87,0,12,115,107,95,70,114,97,103,67,111,111,114,100,6,102,108,111,97,116,52,2,102,112,17,102,114,97,103,109,101,110,116,80,114,111,99,101,115,115,111,114,6,115,97,109,112,108,101,5,104,97,108,102,52,6,99,111,111,114,100,115,6,102,108,111,97,116,50,9,116,114,97,110,115,102,111,114,109,8,102,108,111,97,116,51,120,51,42,11,0,46,1,0,29,5,15,0,0,2,0,43,2,0,15,0,0,46,3,0,9,22,0,43,4,0,25,0,3,22,5,0,9,43,0,1,3,0,43,6,0,50,0,46,7,0,9,22,0,40,4,0,3,46,8,0,9,56,0,43,9,0,63,0,3,45,10,0,2,40,5,0,22,11,0,9,43,0,2,7,0,8,0,40,6,0,40,11,0,46,12,0,9,22,0,40,4,0,3,46,13,0,9,70,0,43,14,0,80,0,3,45,15,0,3,40,5,0,40,11,0,22,16,0,9,43,0,2,12,0,13,0,40,6,0,40,16,0,2,0,43,0,9,0,2,0,0,0,12,1,48,47,1,0,40,2,0,0,50,};
diff --git a/src/sksl/generated/sksl_vert.dehydrated.sksl b/src/sksl/generated/sksl_vert.dehydrated.sksl
index 369b023..f917e89 100644
--- a/src/sksl/generated/sksl_vert.dehydrated.sksl
+++ b/src/sksl/generated/sksl_vert.dehydrated.sksl
@@ -1,2 +1,2 @@
-static constexpr size_t SKSL_INCLUDE_sksl_vert_LENGTH = 216;
-static uint8_t SKSL_INCLUDE_sksl_vert[216] = {82,0,12,115,107,95,80,101,114,86,101,114,116,101,120,11,115,107,95,80,111,115,105,116,105,111,110,6,102,108,111,97,116,52,12,115,107,95,80,111,105,110,116,83,105,122,101,5,102,108,111,97,116,11,115,107,95,86,101,114,116,101,120,73,68,3,105,110,116,13,115,107,95,73,110,115,116,97,110,99,101,73,68,0,42,6,0,37,1,0,2,0,2,29,5,0,0,0,15,0,43,2,0,27,0,29,5,1,0,0,34,0,43,3,0,47,0,46,4,0,29,8,4,2,0,40,1,0,0,16,4,0,0,16,4,0,1,46,5,0,29,5,42,0,2,53,0,43,6,0,65,0,0,46,7,0,29,5,43,0,2,69,0,40,6,0,0,4,0,69,0,5,0,34,0,3,0,15,0,2,0,53,0,4,0,12,3,26,40,4,0,2,0,83,0,0,48,40,6,0,1,47,5,0,0,50,48,40,6,0,1,47,7,0,0,50,};
+static constexpr size_t SKSL_INCLUDE_sksl_vert_LENGTH = 214;
+static uint8_t SKSL_INCLUDE_sksl_vert[214] = {82,0,12,115,107,95,80,101,114,86,101,114,116,101,120,11,115,107,95,80,111,115,105,116,105,111,110,6,102,108,111,97,116,52,12,115,107,95,80,111,105,110,116,83,105,122,101,5,102,108,111,97,116,11,115,107,95,86,101,114,116,101,120,73,68,3,105,110,116,13,115,107,95,73,110,115,116,97,110,99,101,73,68,0,42,6,0,37,1,0,2,0,2,29,5,0,0,0,15,0,43,2,0,27,0,29,5,1,0,0,34,0,43,3,0,47,0,46,4,0,29,8,4,2,0,40,1,0,0,16,4,0,0,16,4,0,1,46,5,0,29,5,42,0,2,53,0,43,6,0,65,0,0,46,7,0,29,5,43,0,2,69,0,40,6,0,0,4,0,69,0,5,0,34,0,3,0,15,0,2,0,53,0,4,0,12,3,26,40,4,0,2,0,83,0,0,48,47,5,0,40,6,0,0,50,48,47,7,0,40,6,0,0,50,};
diff --git a/src/sksl/ir/SkSLProgramElement.h b/src/sksl/ir/SkSLProgramElement.h
index 826468a..8adcf5e 100644
--- a/src/sksl/ir/SkSLProgramElement.h
+++ b/src/sksl/ir/SkSLProgramElement.h
@@ -25,10 +25,10 @@
         kInterfaceBlock,
         kModifiers,
         kSection,
-        kVar,
+        kGlobalVar,
 
         kFirst = kEnum,
-        kLast = kVar
+        kLast = kGlobalVar
     };
 
     ProgramElement(int offset, Kind kind)
diff --git a/src/sksl/ir/SkSLStatement.h b/src/sksl/ir/SkSLStatement.h
index d7333f4..aa8674e 100644
--- a/src/sksl/ir/SkSLStatement.h
+++ b/src/sksl/ir/SkSLStatement.h
@@ -32,7 +32,6 @@
         kSwitch,
         kSwitchCase,
         kVarDeclaration,
-        kVarDeclarations,
         kWhile,
 
         kFirst = kBlock,
diff --git a/src/sksl/ir/SkSLVarDeclarations.h b/src/sksl/ir/SkSLVarDeclarations.h
index 475b45d..21883f5 100644
--- a/src/sksl/ir/SkSLVarDeclarations.h
+++ b/src/sksl/ir/SkSLVarDeclarations.h
@@ -16,20 +16,22 @@
 namespace SkSL {
 
 /**
- * A single variable declaration within a var declaration statement. For instance, the statement
- * 'int x = 2, y[3];' is a VarDeclarations statement containing two individual VarDeclaration
- * instances.
+ * A single variable declaration statement. Multiple variables declared together are expanded to
+ * separate (sequential) statements. For instance, the SkSL 'int x = 2, y[3];' produces two
+ * VarDeclaration instances (wrapped in an unscoped Block).
  */
 struct VarDeclaration : public Statement {
     static constexpr Kind kStatementKind = Kind::kVarDeclaration;
 
     VarDeclaration(const Variable* var,
+                   const Type* baseType,
                    std::vector<std::unique_ptr<Expression>> sizes,
                    std::unique_ptr<Expression> value)
-    : INHERITED(var->fOffset, kStatementKind)
-    , fVar(var)
-    , fSizes(std::move(sizes))
-    , fValue(std::move(value)) {}
+            : INHERITED(var->fOffset, kStatementKind)
+            , fVar(var)
+            , fBaseType(*baseType)
+            , fSizes(std::move(sizes))
+            , fValue(std::move(value)) {}
 
     std::unique_ptr<Statement> clone() const override {
         std::vector<std::unique_ptr<Expression>> sizesClone;
@@ -40,12 +42,13 @@
                 sizesClone.push_back(nullptr);
             }
         }
-        return std::unique_ptr<Statement>(new VarDeclaration(fVar, std::move(sizesClone),
-                                                             fValue ? fValue->clone() : nullptr));
+        return std::make_unique<VarDeclaration>(fVar, &fBaseType, std::move(sizesClone),
+                                                fValue ? fValue->clone() : nullptr);
     }
 
     String description() const override {
-        String result = fVar->fModifiers.description() + fVar->type().name() + " " + fVar->name();
+        String result =
+                fVar->fModifiers.description() + fBaseType.description() + " " + fVar->name();
         for (const auto& size : fSizes) {
             if (size) {
                 result += "[" + size->description() + "]";
@@ -56,10 +59,12 @@
         if (fValue) {
             result += " = " + fValue->description();
         }
+        result += ";";
         return result;
     }
 
     const Variable* fVar;
+    const Type& fBaseType;
     std::vector<std::unique_ptr<Expression>> fSizes;
     std::unique_ptr<Expression> fValue;
 
@@ -67,66 +72,28 @@
 };
 
 /**
- * A variable declaration statement, which may consist of one or more individual variables.
+ * A variable declaration appearing at global scope. A global declaration like 'int x, y;' produces
+ * two GlobalVarDeclaration elements, each containing the declaration of one variable.
  */
-struct VarDeclarations : public ProgramElement {
-    static constexpr Kind kProgramElementKind = Kind::kVar;
+struct GlobalVarDeclaration : public ProgramElement {
+    static constexpr Kind kProgramElementKind = Kind::kGlobalVar;
 
-    // vars must be a vector of unique_ptr<VarDeclaration>, but to simplify the CFG, we store
-    // (and thus are constructed with) Statements.
-    VarDeclarations(int offset, const Type* baseType, std::vector<std::unique_ptr<Statement>> vars)
-            : INHERITED(offset, kProgramElementKind), fBaseType(*baseType)
-            , fVars(std::move(vars)) {
-#if defined(SK_DEBUG)
-        for (auto& var : fVars) {
-            SkASSERT(var->is<VarDeclaration>());
-        }
-#endif
+    // decl must be a unique_ptr<VarDeclaration>, but to simplify construction, we take a Statement
+    GlobalVarDeclaration(int offset, std::unique_ptr<Statement> decl)
+            : INHERITED(offset, kProgramElementKind) {
+        SkASSERT(decl->is<VarDeclaration>());
+        fDecl.reset(static_cast<VarDeclaration*>(decl.release()));
     }
 
     std::unique_ptr<ProgramElement> clone() const override {
-        std::vector<std::unique_ptr<Statement>> cloned;
-        cloned.reserve(fVars.size());
-        for (const auto& v : fVars) {
-            cloned.push_back(v->clone());
-        }
-        return std::make_unique<VarDeclarations>(fOffset, &fBaseType, std::move(cloned));
+        return std::make_unique<GlobalVarDeclaration>(fOffset, fDecl->clone());
     }
 
     String description() const override {
-        if (!fVars.size()) {
-            return String();
-        }
-        String result;
-        for (const auto& var : fVars) {
-            if (var->kind() != Statement::Kind::kNop) {
-                SkASSERT(var->kind() == Statement::Kind::kVarDeclaration);
-                result = ((const VarDeclaration&) *var).fVar->fModifiers.description();
-                break;
-            }
-        }
-        result += fBaseType.description() + " ";
-        String separator;
-        for (const auto& rawVar : fVars) {
-            if (rawVar->kind() == Statement::Kind::kNop) {
-                continue;
-            }
-            SkASSERT(rawVar->kind() == Statement::Kind::kVarDeclaration);
-            VarDeclaration& var = (VarDeclaration&) *rawVar;
-            result += separator;
-            separator = ", ";
-            result += var.fVar->name();
-            if (var.fValue) {
-                result += " = " + var.fValue->description();
-            }
-        }
-        return result;
+        return fDecl->description();
     }
 
-    const Type& fBaseType;
-    // this *should* be a vector of unique_ptr<VarDeclaration>, but it significantly simplifies the
-    // CFG to only have to worry about unique_ptr<Statement>
-    std::vector<std::unique_ptr<Statement>> fVars;
+    std::unique_ptr<VarDeclaration> fDecl;
 
     using INHERITED = ProgramElement;
 };
diff --git a/src/sksl/ir/SkSLVarDeclarationsStatement.h b/src/sksl/ir/SkSLVarDeclarationsStatement.h
deleted file mode 100644
index a611b58..0000000
--- a/src/sksl/ir/SkSLVarDeclarationsStatement.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SKSL_VARDECLARATIONSSTATEMENT
-#define SKSL_VARDECLARATIONSSTATEMENT
-
-#include "src/sksl/ir/SkSLStatement.h"
-#include "src/sksl/ir/SkSLVarDeclarations.h"
-
-namespace SkSL {
-
-/**
- * One or more variable declarations appearing as a statement within a function.
- */
-struct VarDeclarationsStatement : public Statement {
-    static constexpr Kind kStatementKind = Kind::kVarDeclarations;
-
-    VarDeclarationsStatement(std::unique_ptr<VarDeclarations> decl)
-    : INHERITED(decl->fOffset, kStatementKind)
-    , fDeclaration(std::move(decl)) {}
-
-    bool isEmpty() const override {
-        for (const auto& s : fDeclaration->fVars) {
-            if (!s->isEmpty()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    std::unique_ptr<Statement> clone() const override {
-        std::unique_ptr<VarDeclarations> cloned((VarDeclarations*) fDeclaration->clone().release());
-        return std::unique_ptr<Statement>(new VarDeclarationsStatement(std::move(cloned)));
-    }
-
-    String description() const override {
-        return fDeclaration->description() + ";";
-    }
-
-    std::unique_ptr<VarDeclarations> fDeclaration;
-
-    using INHERITED = Statement;
-};
-
-}  // namespace SkSL
-
-#endif